我需要编写一个查询Active Directory的C#应用程序,并返回有权使用某个共享邮箱的用户列表。
我已经与我们的支持部门进行了交谈,他们说每个共享邮箱都有一个关联的安全组。为了授予用户访问共享邮箱的权限,他们使用户成为关联安全组的成员。
我的问题是AD中的共享邮箱和安全组之间的链接是什么?如何确定哪个安全组与哪个共享邮箱关联?
答案 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:=
您的查询上的选择器。 (如果您的组织使用嵌套组,则非常方便)