【问题标题】:Active Directory data into SQL table将 Active Directory 数据写入 SQL 表
【发布时间】:2011-02-03 11:05:06
【问题描述】:

如何提取 Active Directory 信息(用户名、名字、姓氏)并使用结果填充 SQL 表?

非常感谢

斯科特

【问题讨论】:

  • 您正在使用/准备使用哪种(编程)语言??

标签: sql active-directory


【解决方案1】:

我们为 LARGE AD 环境执行此操作的方式:

  1. 每晚运行 AdFind(免费软件工具)的批处理程序以执行 LDAP 查询并将其转储到 CSV 文件中
  2. BCP(内置 SQL 命令行工具)将 CSV 文件批量导入到 SQL 数据库中的导入表中
  3. 存储过程(使用osql 执行)从导入表中获取数据并在主表中添加/更新记录

从开始到结束,我们在大约 2 小时内从 10 个域中提取了 14.5 万用户、8 万组、13 万台计算机。这包括为用户和计算机提取准确的 LastLogon 信息,这需要您点击每个域控制器。没有这个,这个过程大约需要 30 分钟。

【讨论】:

    【解决方案2】:

    如果你只是在 SQL 中需要它,我使用下面的代码

    INSERT...
    SELECT A.SAMAccountName, A.Mail,  A.displayName  FROM
        (SELECT * FROM OpenQuery(ADSI, 'SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn, userAccountControl,mail  
        FROM ''LDAP://domain.ro/DC=domain,DC=ro'' where objectClass = ''User''')
        WHERE (sn is not null) and (givenName is not null) and (mail is not null) )A
    

    其中 ADSI 是基于此创建的链接服务器: http://msdn2.microsoft.com/en-us/library/aa772380(VS.85).aspx

    【讨论】:

    • ADSI单次查询返回不超过1000条记录,之后会报错
    • 而ADSI不能处理多值属性,查询多值字段也会失败。
    【解决方案3】:

    如果您使用的是 .NET 3.5,我会为此使用新的 System.DirectoryServices.AccountManagement 命名空间。

    在这里了解它:

    Managing Directory Security Principals in the .NET Framework 3.5

    基本上,您需要设置一个容器(PrincipalContext),然后枚举您要处理的用户。遍历这些并提取您需要的信息,并将其提供给 SQL Server。

    【讨论】:

      【解决方案4】:

      有不同的方法可以做到这一点。我使用 PHP 从我们的 Active Directory 中获取数据。请查看 PHP 文档中的“Lightweight Directory Access Protocol”一章。使用 PHP 填充数据库也很容易,例如MySQLMicrosoft SQL Server

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多