我有一张表,其中包含安全组的成员列表。我需要每天检查一下是否添加或删除了新成员并相应地更新了表格。 有没有办法使用SQL获取Active Directory中安全组的成员列表?
答案 0 :(得分:1)
Linked server to Active Directory是常用的方法。
Here是一种更好的,逐步的设置方法。
然后创建一个包含LDAP查询的视图,你应该好好去。
这是我用于其中一个系统的内容:
CREATE VIEW adsi_to_app AS
SELECT convert(VARCHAR(20), u.sAMAccountName) collate SQL_Latin1_General_CP1_CI_AS "username",
CASE
WHEN (u.userAccountControl & 2) <> 0
THEN 'Disabled'
WHEN CASE convert(BIGINT, u.accountExpires)
WHEN 0
THEN '12/31/9999'
WHEN 9223372036854775807
THEN '12/31/9999'
ELSE dateadd(mi, (convert(BIGINT, u.accountExpires) / 600000000) - 157258080 + datediff(minute, GetUTCDate(), GetDate()), 0)
END < getdate()
THEN 'Expired'
ELSE 'Active'
END "account_status"
FROM OPENQUERY(ADSI, '<LDAP://DC=your,DC=domain,DC=goes,DC=here>;(&(objectCategory=Person)(objectClass=User)(memberOf=CN=GroupName,OU=Groups,DC=your,DC=domain,DC=goes,DC=here));sAMAccountName,userAccountControl,accountExpires;subtree') u
排序规则是因为服务器具有区分大小写的排序规则。 ADSI
中的OPENQUERY()
是链接服务器对象的名称。
请注意,您可能需要启用即席查询才能使用OPENQUERY()
。