ActiveDirectoryMembershipProvider и ссылочная целостность

Раньше, когда я реализовывал свои собственные механизмы аутентификации, у меня была таблица пользователей со связями с другими таблицами в базе данных MySQL моего приложения. Однако теперь, когда я подумываю об использовании ActiveDirectoryMembershipProvider, я не вижу возможности создать аналогичные отношения между пользователями AD и этими таблицами.

Как обычно можно решить эту проблему? Должен ли я просто принять тот факт, что кто-то потенциально может вставлять записи с идентификаторами пользователей, которые не соответствуют существующим пользователям? На самом деле я не ожидаю, что это произойдет, но я привык обеспечивать целостность на уровне базы данных.


person Andy West    schedule 07.12.2009    source источник


Ответы (2)


Думаю, в этом случае вам придется отказаться от ссылочной целостности базы данных. Просто попросите код вашего приложения проверить наличие учетной записи Active Directory перед добавлением записи в БД.

Теоретически какой-нибудь пользователь может войти вручную и ввести инструкцию SQL INSERT, которая ссылается на недопустимую учетную запись AD. Но на практике, надеюсь, вы не даете группе пользователей прямой доступ к таблицам. Если код приложения - единственное, что имеет доступ к БД, код приложения проверяет учетную запись перед вставкой строки, и этот код проверки проверяется, тогда все должно быть в порядке.

На всякий случай у вас может быть ночной пакетный процесс, который проверяет все строки в ссылочной таблице (таблицах) на соответствие Active Directory. Если он обнаружит какие-либо несоответствия, он может отправить вам электронное письмо. Это не предотвратит нарушения целостности, но, по крайней мере, позволит вам узнать о них.

person Richard Beier    schedule 08.12.2009

Я не знаю, как бы вы могли это сделать через MySQL. Если бы вы использовали SQL-сервер, вы могли бы написать триггер, который будет вызывать библиотеку C #, которая проверяет, что они являются членом AD. Тогда, если бы их не было, вы могли бы заблокировать вставку в БД. Возможно, вы сможете сделать что-то подобное с MySQL, но мои знания MySQL довольно скудные.

person andrewWinn    schedule 07.12.2009
comment
Интересная идея. Возможно, для моего сценария это несколько излишне. Мне в основном интересно, что делают с этим другие люди, использующие ActiveDirectoryMembershipProvider, если вообще что-нибудь. - person Andy West; 07.12.2009