ユーザーまたはグループのSIDが指定されている場合、それに属するLDAPオブジェクトを見つけるにはどうすればよいですか?
LDAPサーバーはActive Directory(Windows Server 2008)です。
LDAPクエリ文字列が役立ちます。
私はそれが次のように簡単だったことを望みます:
dsget user "objectSID={thesid},CN=Users,DC=domain,DC=com" -samid
しかし、そうではありません。 ADは、objectSIDを16進数として格納します。
ただし、serverfaultの担当者は、役立つと思われるいくつかの回答を書いています。
別の方法は、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経由で簡単に検索できるいくつかの属性ができました。
これは古いのですが、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
}
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
のドメイン値をサブミットすると、ドメイン管理者アカウントが取得されます。