Active Directory数据进入SQL表

时间:2011-02-03 11:05:07

标签: sql active-directory

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

非常感谢

斯科特

4 个答案:

答案 0 :(得分:6)

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

  1. 运行AdFind(免费软件工具)以执行LDAP查询并将其转储为CSV文件的每夜批处理
  2. BCP(内置SQL命令行工具)将CSV文件批量导入SQL数据库中的导入表
  3. 存储过程(使用osql执行)从导入表中获取数据并在主表中添加/更新记录
  4. 我们从开始到结束的大约2个小时内从10个域中吸引了145k用户,80k组,130k台计算机。这包括为需要您命中每个域控制器的用户和计算机提取准确的LastLogon信息。没有它,这个过程大约需要30分钟。

答案 1 :(得分:4)

如果您只是在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

答案 2 :(得分:3)

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

在这里了解它:

Managing Directory Security Principals in the .NET Framework 3.5

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

答案 3 :(得分:1)

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