Как заставить пользователя БД иметь определенное членство в роли базы данных не в интерактивном режиме в SQL Server Express 2008 - PullRequest
1 голос
/ 17 декабря 2009

Сначала небольшое вступление.

У нас есть база данных SQL Server Express 2008, схема которой хранится в элементе управления исходным кодом в виде сценариев, изначально созданных путем открытия контекстного меню базы данных в Management Studio и выбора Задачи | Создать сценарии. ... .

У каждого разработчика есть локальная база данных SQL Server Express 2008 и одна центральная база данных SQL Server 2008, используемая сервером CI. Каждый раз, когда разработчик изменяет схему локальной базы данных, он (ы) регенерирует сценарии, фиксирует их вместе с исходным кодом и обновляет схему в центральной базе данных, используемой сервером CI.

Иногда изменения огромны, и проще просто удалить всю базу данных и создать ее с нуля, используя сценарии, что действительно легко.

НО , есть одна проблема. Хотя сценарии действительно создают правильного пользователя базы данных (скажем, ServerUser ), они не предоставляют этому пользователю членство в роли db_owner, требуемое приложением. Разработчик должен не забыть открыть диалоговое окно свойств для пользователя ServerUser в Management Studio и установить флажок db_owner в списке Членство в роли базы данных . Излишне говорить, что мы часто забываем об этом шаге. Я сам потратил около часа, пытаясь выяснить, почему сервер не запускается.

Будучи несколько наивным человеком, я подумал, что мог бы манипулировать каталогом [master].[sys].[database_role_members] с помощью простого оператора вставки SQL, чтобы автоматически добавлять необходимое членство в роли, как часть выполнения сценариев. Конечно, это не удалось с сообщением об ошибке Специальные обновления системных каталогов не допускаются. . Глупый я.

В любом случае, мой вопрос такой. Можно ли запустить сценарий SQL при создании базы данных и ServerUser , что позволило бы этому пользователю получить роль db_owner для новой базы данных?

Спасибо.

1 Ответ

3 голосов
/ 17 декабря 2009

Вы можете использовать sp_addrolemember.

http://msdn.microsoft.com/en-us/library/ms187750.aspx

EXEC sp_addrolemember 'db_owner', 'username'
...