【发布时间】:2020-01-20 18:14:15
【问题描述】:
我正在编写一个类来设置或删除访问规则,以保护或取消保护对象免受意外删除,使用 ActiveDirectorySecurity.AddAccessRule 和 ActiveDirectorySecurity.RemoveAccessRule。
如果我向DirectoryEntry 提供管理员帐户的用户名和密码(我不想这样做),我的班级工作正常,但如果我不提供用户名和密码,则会引发错误
System.DirectoryServices.DirectoryServicesCOMException:发生约束冲突
但是,我的默认帐户可以使用 Active Directory 用户和计算机应用程序更改保护对象标志,而不会出现任何问题。
关于为什么会发生这种情况的任何想法?
using System;
using System.DirectoryServices;
using System.Security.AccessControl;
using System.Security.Principal;
namespace test123
{
internal class Test124
{
internal static void RemoveAccidentialProtection()
{
string dn = "CN=XXX,OU=XXX,OU=XXX,OU=XXX,OU=XXX,DC=XXX,DC=XXX";
using (DirectoryEntry ent = new DirectoryEntry("LDAP://XXX:nnn/" + dn))
{
IdentityReference everyOneAccount = new NTAccount("Everyone").Translate(typeof(SecurityIdentifier)); //S - 1 - 1 - 0
ActiveDirectoryAccessRule objAce = new ActiveDirectoryAccessRule(everyOneAccount, ActiveDirectoryRights.Delete | ActiveDirectoryRights.DeleteTree, AccessControlType.Deny);
ent.ObjectSecurity.RemoveAccessRule(objAce);
ent.CommitChanges();
}
}
}
}
【问题讨论】:
-
您的应用程序是否作为控制台应用程序、WinForm 应用程序、ASP.Net 应用程序运行?
-
这是作为控制台应用程序运行的。
标签: c# active-directory directoryentry