已禁用Active Directory帐户的SQL查询

已禁用Active Directory帐户的SQL查询,sql,active-directory,Sql,Active Directory,我需要查询广告,以确定用户帐户是否已禁用 使用答案中使用的类似查询 我认为,要确定帐户是否被禁用,我必须以某种方式使用userAccountControl字段。我尝试过几种方法,但它们似乎不起作用: WHERE userAccountControl & 2 <> 0 显然它确实起作用了。。。这将是一个ID-10-T:p如何: SELECT sAMAccountName FROM OPENQUERY(ADSI, 'SELECT sAMAccountName, userAcco

我需要查询广告,以确定用户帐户是否已禁用

使用答案中使用的类似查询

我认为,要确定帐户是否被禁用,我必须以某种方式使用userAccountControl字段。我尝试过几种方法,但它们似乎不起作用:

WHERE userAccountControl & 2 <> 0

显然它确实起作用了。。。这将是一个ID-10-T:p

如何:

SELECT sAMAccountName
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName, userAccountControl 
FROM ''LDAP://DC=MyDC,DC=com,DC=uk'' 
WHERE objectCategory = ''Person'' 
AND objectClass = ''user''') 
WHERE userAccountControl & 2 <> 0; -- disabled
在OPENQUERY内部:

和userAccountControl:1.2.840.113556.1.4.803:2


上面的代码返回活动用户。很棒的解决方案。由于ADSI.1.2.840.113556.1.4.803是按位运算的代码,而1.2.840.113556.1.4.804是按位OR运算的代码,以防有人想知道其中为什么有一个奇怪的数字以及它的含义,所以在OPENQUERY内部使用它要好得多。此外,由于前面的评论所述的原因,这是一个更好的解决方案。非常感谢!
SELECT sAMAccountName
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName, userAccountControl 
FROM ''LDAP://DC=MyDC,DC=com,DC=uk'' 
WHERE objectCategory = ''Person'' 
AND objectClass = ''user''') 
WHERE userAccountControl & 2 <> 0; -- disabled
SELECT *
FROM OPENQUERY(ADSI, 'SELECT sAMAccountName
FROM ''LDAP://DC=MyDC,DC=com,DC=uk''
WHERE objectCategory = ''Person''
AND objectClass = ''user''
AND ''userAccountControl:1.2.840.113556.1.4.803:''<>2)