我在 Windows 7 上使用 AD LDS,并使用 adaminstall 实用程序创建了一个带有新应用程序分区的本地实例。
如何将现有的本地 Windows 组添加到此分区的 Readers 角色?
我想通过以下手动步骤以编程方式(在 C# 中)实现相同的结果:
- 启动 ADSI Edit 并连接到 AD LDS 实例和分区。
- 导航到分区根节点下的 CN=Readers。
- 双击 CN=Readers 条目。
- 双击“成员”属性。
- 选择并添加现有的本地 Windows 组。
我已经有以下 C# 代码:
public void AddReader(string partitionName, string accountName)
{
var ntAccount = new NTAccount(accountName);
var securityIdentifer = ntAccount.Translate(typeof(SecurityIdentifier));
var accountNameDN = string.Format("CN={0},CN=ForeignSecurityPrincipals,{1}", securityIdentifer.Value, partitionName);
var rootPath = string.Format("LDAP://localhost:389/CN=Readers,CN=Roles,{0}", partitionName)
var directoryEntry = new DirectoryEntry(RootPath);
directoryEntry.Properties["member"].Add(accountNameDN);
directoryEntry.CommitChanges();
}
仅当使用上述手动步骤将本地组至少添加一次到 Readers 角色时,此代码才有效。如果我手动添加组然后手动删除它,上面显示的代码可用于再次重新添加组。
但是当我尝试添加一个新的本地 Windows 组时,CommitChanges()
上面代码中的调用会抛出一个DirectoryServicesCOMException
错误代码0x8007002F
和消息A constraint violation occurred
。
显然,手动步骤对现有的本地 Windows 组进行了一些修改,使其适合添加到 AD LDS 读者角色。但我错过了什么?
我认为必须有比我使用ActiveDirectorySecurity
andActiveDirectoryAccessRule
类的方法更好的方法,但我不知道如何使用它们。