我在windowsPrincipal.getIdentity()。getSid()中將用戶的SID設置爲byte []。我如何從SID獲取活動目錄條目(DirectoryEntry)?給定用戶的SID,如何獲取AD DirectoryEntry?
5
A
回答
4
我發現在C#這個例子
// SID must be in Security Descriptor Description Language (SDDL) format
// The PrincipalSearcher can help you here too (result.Sid.ToString())
public void FindByIdentitySid()
{
UserPrincipal user = UserPrincipal.FindByIdentity(
adPrincipalContext,
IdentityType.Sid,
"S-1-5-21-2422933499-3002364838-2613214872-12917");
Console.WriteLine(user.DistinguishedName);
}
轉換到VB.NET:
' SID must be in Security Descriptor Description Language (SDDL) format
' The PrincipalSearcher can help you here too (result.Sid.ToString())
Public Sub FindByIdentitySid()
Dim user As UserPrincipal = UserPrincipal.FindByIdentity(adPrincipalContext, IdentityType.Sid, "S-1-5-21-2422933499-3002364838-2613214872-12917")
Console.WriteLine(user.DistinguishedName)
End Sub
顯然,則可以:
dim de as new DirectoryEntry("LDAP://" & user.DistinguishedName)
要獲得SID = S-1 -5-21- *(對不起VB.NET)
' Convert ObjectSID to a String
' http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/57452aab-4b68-4444-aefa-136b387dd06e
Dim ADpropSid As Byte()
ADpropSid = de.Properties("objectSid").Item(0)
' in my test the byte field looks like this : 01 02 00 00 00 00.......37 02 00 00
Dim SID As New System.Security.Principal.SecurityIdentifier(ADpropSid, 0)
我還沒有測試過C#或自己使用過轉換後的版本,但已經使用了上面的方法來返回SDDL格式的SID。
0
這也可以在PowerShell中完成,只要你安裝了.NET 3.5或4.0的(見https://gist.github.com/882528,如果你不默認)
add-type -assemblyname system.directoryservices.accountmanagement
$adPrincipalContext =
New-Object System.DirectoryServices.AccountManagement.PrincipalContext(
[System.DirectoryServices.AccountManagement.ContextType]::Domain)
$user = [system.directoryservices.accountmanagement.userprincipal]::findbyidentity(
$adPrincipalContext
, [System.DirectoryServices.AccountManagement.IdentityType]::Sid
, "S-1-5-21-2422933499-3002364838-2613214872-12917")
$user.DisplayName
$user.DistinguishedName
0
我發現的最簡單的方法是使用LDAP綁定。類似於Nick Giles所說的。在MSDN更多信息
''' <summary>
''' Gets the DirectoryEntry identified by this SecurityIdentifier.
''' </summary>
''' <param name="id">The SecurityIdentifier (SID).</param>
<System.Runtime.CompilerServices.Extension()> _
Public Function GetDirectoryEntry(ByVal id As SecurityIdentifier) As DirectoryEntry
Const sidBindingFormat As String = "LDAP://AOT/<SID={0}>"
Return New DirectoryEntry(String.Format(sidBindingFormat, id.Value))
End Function
6
使用SecurityIdentifier類中的SID從字節[]轉換格式的字符串,然後直接綁定到對象:
DirectoryEntry OpenEntry(byte[] sidAsBytes)
{
var sid = new SecurityIdentifier(sidAsBytes, 0);
return new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.ToString()));
}
相關問題
- 1. 如何從AD DirectoryEntry獲取DOMAIN \ USER?
- 2. 給定用戶的SID,我如何獲得他們的userPrincipalName?
- 3. 如何獲取給定SID的用戶配置文件?
- 4. PHP LDAP獲取用戶SID
- 5. ASP.NET - 獲取DirectoryEntry/SID的主體/相對標識符(RID)
- 6. 如何在Active Directory中獲得用戶組後,獲取組的SID?
- 7. 如何在Asp.Net中爲用戶獲取AD用戶組?
- 8. 無法從Directoryentry獲取用戶
- 9. 獲取服務中的用戶SID
- 10. 獲取用戶列表從Active Directory在給定AD組
- 11. 如何使用objectGUID獲取DirectoryEntry?
- 12. 如何枚舉屬於C中給定組或SID的用戶?
- 13. 通過SID獲取本地用戶
- 14. C++ WMI獲取AccountName知道用戶SID
- 15. 在AD帳戶的數據庫中存儲SID或用戶名?
- 16. 如何獲取與Windows用戶匹配的所有安全標識符(SID)?
- 17. 如何在NetSqlAZMAN中獲取應用組,SID和用戶名
- 18. 如何從活動目錄中使用c#獲取SID-History值
- 19. 從python獲取特定(用戶)SID的所有visualsvn權限WMI
- 20. 如何查找AD中屬於某個組的用戶,並獲取他們的SAMAccountName和SID?
- 21. 如何從powershell AD模塊獲取完整的SID並在SSIS中運行
- 22. 如何通過ldap中的域名獲取用戶的用戶名和SID
- 23. 獲取登錄的用戶SID而不是提升的用戶
- 24. 如何構建具有特定域控制器和用戶或組的SID的DirectoryEntry?
- 25. 如何確定帳戶的類型(AD用戶與AD組)?
- 26. 如何獲取Oracle的SID列表
- 27. flex air app - 獲取用戶的AD域
- 28. 如何獲取當前Windows帳戶的SID?
- 29. 使用DirectoryEntry獲取本地組中的所有用戶LINQ C#
- 30. 僅通過帳戶名稱獲取Windows用戶帳戶SID