如何从SQL Server 2005查询Active Directory?从SQL Server 2005查询Active Directory
7
A
回答
10
相当普遍的问题,但这里有一些指针。
您需要在SQL Server上创建指向ADSI(活动目录服务接口)的链接服务器才能做到这一点。
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'
然后,您可以使用以下类型的查询。
SELECT *
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName
FROM ''LDAP://DC=MyDC,DC=com,DC=uk''
WHERE objectCategory = ''Person''
AND objectClass = ''user'')
你需要设置LDAP://线适当地(索要详细信息,请AD管理员),并意识到分布式即席使用OPENQUERY默认情况下在SQL Server中禁用查询。一旦你有了上面的内容,但对于任何特定的变体,Google都应该很容易。
5
是的。
链接服务器:
EXEC master.dbo.sp_addlinkedserver
@server = N'ADSI',
@srvproduct=N'Active Directory Services',
@provider=N'ADsDSOObject',
@datasrc=N'Servername.domain.com'
查询:
select * from openquery
(
ADSI,'SELECT name
FROM ''LDAP://Servername.domain.com''
WHERE objectCategory = ''Person'' AND objectClass = ''user''
')
有很多的例子,如果你搜索链接服务器和LDPA谷歌。 我这样说是因为LDAP可能相当复杂。
3
为了克服Active Directory查询一次返回1000条记录的最大限制,可以使用我在下面写的函数。
CREATE FUNCTION [dbo].[tf_GetAllUsersFromActiveDirectory]
()
RETURNS
@USERS TABLE
(
sAMAccountName VARCHAR(25) PRIMARY KEY CLUSTERED
, givenName VARCHAR(200)
, SN VARCHAR(200)
, userAccountControl VARBINARY(8)
, mail VARCHAR(200)
)
AS
BEGIN
INSERT INTO @Users
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=A*)(sAMAccountName=B*)(sAMAccountName=C*)(sAMAccountName=D*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=E*)(sAMAccountName=F*)(sAMAccountName=G*)(sAMAccountName=H*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=I*)(sAMAccountName=J*)(sAMAccountName=K*)(sAMAccountName=L*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=M*)(sAMAccountName=N*)(sAMAccountName=O*)(sAMAccountName=P*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Q*)(sAMAccountName=R*)(sAMAccountName=S*)(sAMAccountName=T*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=U*)(sAMAccountName=V*)(sAMAccountName=W*)(sAMAccountName=X*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
UNION ALL
SELECT sAMAccountName,givenName, sn, userAccountControl,mail FROM OpenQuery(ADSI, '<LDAP://YourDomain.com:389>;(&(objectClass=User)(|(sAMAccountName=Y*)(sAMAccountName=Z*)));sAMAccountName,givenName, sn, mail,userAccountControl;subtree')
RETURN
END
GO
3
相关问题
- 1. Active Directory组与SQL Server 2005
- 2. 从SQL Server访问Active Directory
- 3. 用“SQL”查询Active Directory?
- 4. 查询Active Directory
- 5. 在SQL Server 2005(LDAP)中从Active Directory获取描述字段
- 6. Parallelise Active Directory查询
- 7. SQL Server 2005查询
- 8. SQL查询在SQL Server 2005
- 9. 使用SQL Server 2005通过LDAP访问Active Directory角色成员
- 10. 使用PowerShell查询Active Directory
- 11. SQL Server 2005求和查询
- 12. SQL Server 2005的XML查询
- 13. 在SQL Server DISTINCT 2005查询
- 14. 查询SQL Server 2005中
- 15. SQL Server 2005子查询
- 16. SQL Server 2005 - 优先查询
- 17. SQL Server 2005查询帮助
- 18. SQL Server 2005性能查询
- 19. SQL Server 2005 XML查询
- 20. sql server 2005从'查询'更新
- 21. 从SQL Server 2005访问Passthrough查询
- 22. 使用VBScript查询Active Directory
- 23. SQL Server GUID(来自Active Directory)vs Int
- 24. Active Directory组添加到SQL Server
- 25. 从SQL Server 2008端查询SQL Server 2005数据库
- 26. SQL查询,通配符,MS SQL SERVER 2005
- 27. Active Directory自定义搜索LDAP查询
- 28. 在NT AUTHORITY/NETWORK SERVICE下查询Active Directory
- 29. SQL CLR存储过程来查询Active Directory
- 30. Active Directory查询疑难解答
到AD的链接是只读还是可以通过此路由插入呢? – Kristen 2009-11-11 19:28:24
不,它只是选择,但您可以使用ADSI COM对象模型创建用户。这里有一个介绍http://en.csharp-online.net/User_Management_with_Active_Directory – 2009-11-12 17:15:11