首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全ID结构无效,设置AD用户属性的新SecurityDescriptor时出现此错误

安全ID结构无效,设置AD用户属性的新SecurityDescriptor时出现此错误
EN

Stack Overflow用户
提问于 2011-05-10 14:39:18
回答 1查看 1.6K关注 0票数 0

我正在尝试设置AD帐户中的用户选项,而创建帐户时,我正在尝试设置选项“用户无法更改密码”。

但是当我尝试设置新的安全描述符值时,我收到了错误消息"Security ID Structure invalid“。

以下是示例代码,

代码语言:javascript
复制
            string[] trustees = new string[] { @"NT AUTHORITY\SELF", "EVERYONE" };

            IADsSecurityDescriptor sd = (IADsSecurityDescriptor)usr.Properties["ntSecurityDescriptor"].Value;
            IADsAccessControlList acl = (IADsAccessControlList)sd.DiscretionaryAcl;
            IADsAccessControlEntry ace = new AccessControlEntry();
            foreach (string trustee in trustees)    
            {
                ace.Trustee = trustee;
                ace.AceFlags = 0;
                //For remove 'User cannot change password' selection
                //ace.AceType = (int) ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED_OBJECT;
                ace.AceType = (int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_DENIED_OBJECT;
                ace.Flags = (int)ADS_FLAGTYPE_ENUM.ADS_FLAG_OBJECT_TYPE_PRESENT;
                ace.ObjectType = PASSWORD_GUID;
                ace.AccessMask = (int)ADS_RIGHTS_ENUM.ADS_RIGHT_DS_CONTROL_ACCESS;
                acl.AddAce(ace);

                ace.Trustee = trustee;
                ace.AceFlags = 0;
                ace.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_DENIED_OBJECT;
                ace.Flags =  (int)ActiveDs.ADS_FLAGTYPE_ENUM.ADS_FLAG_OBJECT_TYPE_PRESENT;
                ace.ObjectType = PASSWORD_GUID;
                ace.AccessMask = (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_DS_CONTROL_ACCESS;
                acl.AddAce(ace);
            }
            sd.DiscretionaryAcl = acl;                
            usr.Properties["ntSecurityDescriptor"].Value = (ActiveDs.IADsSecurityDescriptor)sd;
            usr.CommitChanges();

你知道为什么我会收到这个“安全ID结构无效”的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-11 14:42:16

我用谷歌搜索了一下,在网上找到了类似的代码。我相信上面的代码应该可以工作。我确实看到有人有类似的抱怨。这似乎与您正在使用的帐户有关。您使用哪个帐户来运行上述代码?

此外,如果您可以使用.NET 3.5或更高版本,请尝试使用以下代码。

代码语言:javascript
复制
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "YourDomain"))
{
    UserPrincipal up = UserPrincipal.FindByIdentity(context, "Domain\\YourUser");
    up.UserCannotChangePassword = false;
    up.Save();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5946150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档