Изменение свойств Active Directory - PullRequest
0 голосов
/ 10 сентября 2009

Я пытаюсь изменить определенные свойства для пользователей в нашем активном каталоге. Некоторые свойства я могу изменить, а некоторые я не могу. Я делаю олицетворение, но для некоторых свойств я все еще получаю «Общедоступную ошибку, запрещенную», когда я пытаюсь вызвать CommitChanges ().

Например, это будет работать:

DirectoryEntry deUser = new DirectoryEntry(result.Path);

if (ImpersonateValidUser(adConnectionUsername, adConnectionDomain, adConnectionPassword))
{                    
    deUser.Properties["ampPasswordQuestion"].Value = newPasswordQuestion;
    deUser.Properties["ampPasswordAnswer"].Value = newPasswordAnswer;    
    deUser.CommitChanges();
    deUser.Close();

    UndoImpersonation();
}

Это работает предположительно, потому что мы вручную добавили свойства в схему AD без ограничений доступа. (См. ASP.NET 3.5 Безопасность, членство и управление ролями с помощью C # и VB )

Однако, если я попытаюсь изменить что-то вроде свойства Comment записи следующим образом:

DirectoryEntry deUser = new DirectoryEntry(result.Path);

if (ImpersonateValidUser(adConnectionUsername, adConnectionDomain, adConnectionPassword))
{                    
    deUser.Properties["comment"].Value = comment;
    deUser.CommitChanges();
    deUser.Close();

    UndoImpersonation();
}

Тогда я получу «Общая ошибка доступа запрещена».

У кого-нибудь есть идеи?

Код Impersionation от Microsoft находится по адресу: http://support.microsoft.com/kb/306158

1 Ответ

3 голосов
/ 10 сентября 2009

Мне кажется, я нашел проблему. Очевидно, вам нужно создать DirectoryEntry, который будет изменен после Олицетворение сделано. Кажется, это имеет смысл, потому что я считаю, что права изменяющего пользователя вступают в силу при создании изменяемой записи. Кто-нибудь может это проверить? Я не видел такого объяснения в какой-либо документации.

Я провел дополнительное тестирование и обнаружил, что для первой записи даже не требуется олицетворение, поскольку эти атрибуты не защищены.

Во втором случае работает следующий код:

if (ImpersonateValidUser(adConnectionUsername, adConnectionDomain, adConnectionPassword))
{      
    DirectoryEntry deUser = new DirectoryEntry(result.Path);              
    deUser.Properties["comment"].Value = comment;
    deUser.CommitChanges();
    deUser.Close();

    UndoImpersonation();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...