SQL查询技巧:从LDAP获取用户信息

需积分: 0 10 下载量 88 浏览量 更新于2024-12-14 收藏 279KB PDF 举报
本文主要介绍了如何使用SQL查询语言来获取特定数据库中的用户信息,特别是针对Active Directory(AD)域服务的查询。通过T-SQL语句,我们可以从AD数据库中检索到用户的各种详细资料,包括账号名、名字、姓氏、邮箱地址、电话号码、办公室位置、邮政地址等。 在SQL经典语句中,一个常见的任务是获取所有加入域的人员信息。例如,以下查询语句展示了如何使用`OPENQUERY`函数结合Active Directory的LDAP接口来实现这一目标: ```sql SELECT sAMAccountname AS AccountName, GivenName AS [FirstName], SN AS [LastName], mail AS [E-mailAddress], TelephoneNumber AS [TelephoneNumber], l AS Office, PostalAddress AS [PostalAddress], PostalCode, StreetAddress AS [StreetAddress], wWWHomePage AS [WebPage], distinguishedname AS DN FROM OPENQUERY( ADSI, 'SELECT GivenName, SN, company, department, TelephoneNumber, mail, distinguishedname, title,l,manager,mobile,name,PhysicalDeliveryOfficeName,PostalAddress,PostalCode, sAMAccountname, StreetAddress, wWWHomePage FROM ''LDAP://itg.net/OU=itg,DC=itg,DC=net'' WHERE objectCategory=''Person'' AND objectClass=''user'' ORDER BY Name' ) Rowset_1 ``` 这段SQL查询首先通过`OPENQUERY`函数连接到ADSI(Active Directory Service Interfaces),并指定一个 LDAP 查询字符串。在这个查询字符串中,我们指定了要查询的数据源(即LDAP服务器的URL)、OU(组织单元)路径,以及过滤条件(在这里是`objectCategory='Person'`和`objectClass='user'`),表示我们要找的是属于“人”类别且类型为“用户”的对象。最后,`ORDER BY Name`确保结果按名称排序。 如果需要查询特定用户的个人信息,可以在`WHERE`子句中添加相应的过滤条件,例如`WHERE sAMAccountname='clw'`,这将返回账号名为'clw'的用户的所有信息。 查询部门信息的方式与查询个人信息类似,只需去掉特定的用户过滤条件: ```sql SELECT * FROM OPENQUERY( ADSI, 'SELECT GivenName, SN, company, department, TelephoneNumber, mail, distinguishedname, title,l,manager,mobile,name,PhysicalDeliveryOfficeName,PostalAddress,PostalCode, sAMAccountname, StreetAddress, wWWHomePage FROM ''LDAP://itg.net/OU=itg,DC=itg,DC=net'' WHERE objectCategory=''Person'' ') ``` 这个查询会返回所有人的信息,不局限于特定的部门或用户。 这些SQL经典实例展示了如何利用T-SQL和OpenQuery功能与外部数据源(如AD)交互,这对于IT管理员来说非常有用,可以方便地管理和检索组织内部的用户数据。了解并掌握这些查询技巧,能帮助你在处理数据库信息时更加高效和精准。