Я создал веб-приложение, которое в фоновом режиме использует базу данных SQL Server 2008 R2. Приложение использует соединение SSPI с интегрированной безопасностью к базе данных, поэтому пользователям необходим доступ к серверу базы данных.
Все пользователи, которые должны использовать приложение, являются членами определенной группы домена AD.
Я добавил новый вход в систему безопасности на уровне SQL Server и предоставил имя группы домена AD, которое отображается как группа (на основе значка)
Затем я открыл это диалоговое окно свойств входа на сервер и открыл Сопоставление пользователей настройки, в которых я проверил свою конкретную базу данных, к которой я хочу, чтобы пользователи этой группы домена AD имели доступ (см. ниже на изображении)
В списке ниже отображаются Членство в ролях базы данных где общественный проверено.
Я создал все объекты в своей базе данных как отдельный пользователь SQL Server с администратор безопасности разрешение и предоставленная схема dbo с каждым объектом, как в:
create table dbo.SomeTable ...
create procedure dbo.SomeProcedure ...
Все манипуляции с базой данных выполняются через только хранимые процедуры. Приложение напрямую не обращается к таблицам.
Основываясь на этих фактах (схема dbo с моими объектами, вход в систему безопасности группы домена AD, только выполнение хранимых процедур), мне интересно, какая роль должна быть установлена при входе на сервер группы домена AD для использования моей базы данных.
Пользователи должны иметь разрешение на выполнение хранимых процедур. Они же делают все остальное. CRUD-операции с таблицами, выполняют определенные пользователем функции и также вызывают друг друга.
Настройка db_datareader и db_datawriter (как показано ниже) недостаточно, как следует из экрана ошибок, который получают мои пользователи (хранимые процедуры предположительно не существуют)?
Как установить разрешения безопасности для моей доменной группы AD, чтобы она могла видеть dbo
объекты и выполнять эти хранимые процедуры?
Применения db_datareader и db_datawriter недостаточно, поскольку ни один из них не имеет права на выполнение хранимой процедуры. Вы должны либо предоставить разрешение на выполнение для каждой хранимой процедуры в вашей базе данных, либо ... Скорее утомительно.
Если ваша база данных - SQL Server 2005 или более поздняя версия (моя - SQL Server 2008 R2, так что я покрыт), вы можете сделать это с гораздо меньшими усилиями:
создать новую роль базы данных с именем db_executor
create role db_executor
предоставить права на выполнение хранимых процедур для всех хранимых процедур в базе данных
grant execute to db_executor
Если вы хотите предоставить права на выполнение только хранимым процедурам, специфичным для схемы, то этот последний вызов следует выполнить как (настройте имя схемы - dbo - как требуется):
grant execute on schema::dbo to db_executor
И это все. Затем все, что вам нужно сделать, это настроить вашего пользователя (или в моем случае это была группа), чтобы он был членом этой роли, и все работает, как ожидалось.