给定用户或组的 SID,如何找到属于它的 LDAP 对象?
LDAP 服务器是 Active Directory(Windows Server 2008)。
LDAP 查询字符串将会很有用。
答案1
我希望它像这样简单:
dsget user "objectSID={thesid},CN=Users,DC=domain,DC=com" -samid
但事实并非如此;AD 将 objectSID 存储为十六进制。
不过,serverfault 上的人们写了一些可能有帮助的答案:
答案2
另一种方法是放弃 LDAP 并使用 WMIC:
H:\>wmic useraccount where (sid = "S-1-5-21-1698188384-1693678267-1543859470-6637") get * /format:list
AccountType=512
Caption=MYDOMAIN\quux
Description=some guy's account
Disabled=FALSE
Domain=MYDOMAIN
FullName=Some Guy
InstallDate=
LocalAccount=FALSE
Lockout=FALSE
Name=quux
PasswordChangeable=TRUE
PasswordExpires=FALSE
PasswordRequired=TRUE
SID=S-1-5-21-1698188384-1693678267-1543859470-6637
SIDType=1
Status=OK
现在,如果您仍然需要的话,您有几个可以通过 LDAP 轻松搜索的属性。
答案3
它是使用 LDAP 查询按 SID 进行搜索。例如:
dsquery * domainroot -filter "(objectSid=S-1-5-21-blah-blah-blah-500)"
或者,在 PowerShell 中,
Get-ADuser -LDAPFilter '(objectSid=S-1-5-21-blah-blah-blah-500)'
如果您在域值中输入 ,将会获得域管理员帐户blah-blah-blah
。
答案4
我看到这个已经很旧了,但是你可以在 ADUC 中通过转到自定义搜索并单击高级选项卡来执行此操作。
LDAP 查询字符串为:(objectSID=SID)
将“SID”替换为您要查找的 SID。
我必须使用以下代码在 PowerShell 中将 SID 转换为名称,然后再转换回 SID(对于外部安全主体):
function Find_By_SID($SID) {
//Searches Active Directory by SID
//Returns NetBios Name
// Example output: CONTOSO\User1
$account = New-Object Security.Principal.SecurityIdentifier("$SID")
$netbios = $account.Translate([Security.Principal.NTAccount])
return $netbios.Value
}