2015-05-29 159 views
2

我需要編寫一個C#應用程序來查詢Active Directory並返回有權使用某個共享郵箱的用戶列表。Active Directory共享郵箱用戶權限

我已經和我們的支持部門通過了聯繫,他們說每個共享郵箱都有一個關聯的安全組。爲了授予用戶訪問共享郵箱的權限,他們使用戶成爲相關安全組的成員。

我的問題是AD中的共享郵箱和安全組之間的鏈接是什麼?如何確定哪個安全組與哪個共享郵箱相關聯?

回答

1

您可以使用Active Directory中共享郵箱對象的msExchMailboxSecurityDescriptor屬性,它將爲您提供郵箱的DACL。例如How to read msExchMailboxSecurityDescriptor attribute in C#

我怎樣才能制定出哪些安全組關聯到共享郵箱?

沒有直接的方式,然後枚舉每個共享郵箱上的每個DACL。如果通過AlternativeMailbox元素https://msdn.microsoft.com/en-us/library/ee237925(v=EXCHG.80).aspx自動映射,自動發現將返回特定用戶有權訪問的所有郵箱。

乾杯 格倫

編輯看到完整的程序集名稱,你應該能夠工作休息了自己

   byte[] DaclByte = (Byte[])DirectoryEntry.Properties["msExchMailBoxSecurityDescriptor"][0]; 
       System.DirectoryServices.ActiveDirectorySecurity adDACL = new ActiveDirectorySecurity(); 
       adDACL.SetSecurityDescriptorBinaryForm(DaclByte); 

       System.Security.AccessControl.AuthorizationRuleCollection aclCollection = adDACL.GetAccessRules(true, false, typeof(System.Security.Principal.SecurityIdentifier)); 
       foreach (System.Security.AccessControl.AuthorizationRule ace in aclCollection) 
       { 
+0

感謝您的回覆以及關於如何閱讀msExchMailboxSecurityDescriptor的鏈接。但我不知道SecurityDescriptor類所在的命名空間。我在MSDN上找到了以下鏈接,其中討論了安全描述符屬性類型,並且還顯示了一個使用SecurityDescriptor類的示例。但是並沒有指出SecurityDescriptor所在的程序集/名稱空間。請問是否可以向我展示一個關於如何枚舉每個DACL的C#示例。謝謝。 https://msdn.microsoft.com/en-us/library/ms180874(v=vs.80).aspx –

+0

請參閱編輯這就是我使用這兩種方法應該可以很好地工作,另一種方法是使用ObjectSecurity類https:// msdn.microsoft.com/en-us/library/system.security.accesscontrol.objectsecurity(v=vs.100).aspx閱讀SSDL表單。 –

+0

感謝您的代碼示例,我現在可以獲取SecurityDescriptorBinaryForm。並循環AuthorizationRuleCollection項目。但是我沒有看到任何屬性值告訴我共享郵箱鏈接到的安全組。對不起,很痛苦,但是你能告訴我怎樣才能找出哪個安全組與一個共享郵箱鏈接到一起(代碼示例)?十分感謝你。 –

0

我也有類似的要求。在我結束了使用的郵箱帳戶中的廣告領域是PUBLICDELEGATES

mailboxDirectoryEntry.publicDelegates 

這包含已通過Outlook委派功能允許訪問的用戶ID或組的distinguishedNames的列表。

對於這個特定的問題,你可以列出你從publicDelegates獲得的組的成員。可以在您的查詢

member:1.2.840.113556.1.4.1941:= 

選擇獲得

傳遞成員身份。 (如果您的組織使用嵌套組,則非常方便)