Я пишу класс для установки или удаления правил доступа для защиты или снятия защиты объектов от случайного удаления, используя 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();
}
}
}
}