我正在尝试阅读一个msExchMailboxSecurityDescriptor,以确定它是否包含对另一个人的完全访问。访问控制条目包含netbios格式(DOMAIN\Username)中的受托人。
SecurityDescriptor secDesc = (SecurityDescriptor)userDirectoryEntry.Properties["msExchMailboxSecurityDescriptor"].Value;
AccessControlList usrAcl = (AccessControlList)secDesc.DiscretionaryAcl;
foreach (AccessControlEntry ace in (IEnumerable)usrAcl)
{
var netbiosDn = ace.Trustee.Split('\\')[0];
var netbiosUser = ace.Trustee.Split('\\')[1];
// now, the problem:
UserPrincipal user = UserPrincipal.FindByIdentity(
new PrincipalContext(ContextType.Domain, netbiosDn),
netbiosUser
);这直到最后一行,我必须连接到正确的AD服务器,并获得一些用户信息。显然,如果该域没有可用的服务器,如任何"NT权威“或"BUILTIN”“域”,则此操作将失败。它不仅失败,还需要相当一段时间才能成功。
我究竟该如何区分哪些域是AD域,哪些域可以连接到AD服务器,哪些域不是AD域?
我可能在Security描述符中找到一些示例用户,只是为了让您了解问题:
发布于 2015-01-06 08:54:08
看看SecurityIdentifier.IsWellKnown
您可以传递各种值,包括WellKnownSidType.NTAuthoritySid,以确定您拥有什么样的SID。
(还请参阅转换为可读名称的this PowerShell代码。)
https://stackoverflow.com/questions/27794998
复制相似问题