Как я могу управлять разрешениями SQL между разработкой и производством?

Я пытаюсь настроить плавный процесс развертывания, при котором мы можем выполнить развертывание на SQL-сервере производства или разработки с помощью одного сценария развертывания.

Но я не знаю, как лучше всего управлять пользователями и разрешениями между двумя средами. Например, при разработке мы хотим, чтобы группа разработчиков имела роль базы данных db_owner. В рабочей среде нам либо не нужен доступ, либо нужна только роль datareader.

Я думаю, что самый простой способ сделать это - настроить пользователей один раз на каждом сервере, а затем не оставлять их в проекте базы данных. Но затем они сбрасываются во время развертывания.

Есть ли способ сделать это, используя конфигурацию проекта в Visual Studio?

Мы используем полный стек Microsoft

  • Проект базы данных Visual Studio 2010
  • SQL Server 2008
  • Контроль версий TFS и сервер сборки
  • vsdbcmd для развертывания

person Kris Harper    schedule 11.07.2012    source источник


Ответы (1)


Несколько вещей делают это проще:

  1. Создайте осмысленные имена ролей в базе данных, которые охватывают разрешения, которые должна иметь роль. Например, «Разработка» или «Поддержка производства». Назначать разрешения только этим ролям и пользователям на роли
  2. В вашем проекте у вас, вероятно, есть разные конфигурации развертывания для разных сред. Поскольку каждая конфигурация может использовать другой файл sqlcmdvars, создайте переменную SQLCMD для своей среды и введите для нее соответствующее значение (например, «DEV» для разработки, «PROD» для производства)
  3. Создайте сценарий после развертывания, который делает правильные действия для правильной среды на основе значения переменной SQLCMD. Что-то типа:

--

if ('$(Environment)' = 'DEV')
begin
   create user [domain\developers]
   exec sp_addrolemember @rolename='db_owner', @membername='domain\developers'
end
person Ben Thul    schedule 11.07.2012
comment
Если вы запускаете несколько сценариев с синтаксисом :r, убедитесь, что между вашими сценариями есть операторы GO. Если вы этого не сделаете, он не будет выполняться должным образом. - person Landon Poch; 21.08.2012