Active Directory共享邮箱用户权限

时间:2015-05-29 14:33:57

标签: c# active-directory exchange-server

我需要编写一个查询Active Directory的C#应用​​程序,并返回有权使用某个共享邮箱的用户列表。

我已经与我们的支持部门进行了交谈,他们说每个共享邮箱都有一个关联的安全组。为了授予用户访问共享邮箱的权限,他们使用户成为关联安全组的成员。

我的问题是AD中的共享邮箱和安全组之间的链接是什么?如何确定哪个安全组与哪个共享邮箱关联?

2 个答案:

答案 0 :(得分: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)
                {

答案 1 :(得分:0)

我有类似的要求。我最终使用的邮箱帐户上的AD字段是 publicDelegates

mailboxDirectoryEntry.publicDelegates

这包含已通过Outlook委派功能授予访问权限的用户ID或组的distinguishedNames列表。

对于这个特定问题,您可以列出从publicDelegates获得的组的成员。

可以使用

获取传递成员资格
member:1.2.840.113556.1.4.1941:=
您的查询上的

选择器。 (如果您的组织使用嵌套组,则非常方便)