如何在开发和生产之间管理SQL权限?

时间:2012-07-11 13:58:22

标签: sql-server visual-studio-2010 tfs vsdbcmd

我正在尝试建立一个平滑的部署过程,我们可以使用单个部署脚本部署到生产或开发SQL服务器。

但我不知道如何最好地管理两个环境之间的用户和权限。例如,在开发中,我们希望开发人员组具有db_owner数据库角色。在制作时,我们要么不想访问,要么只想要datareader角色。

我认为最简单的方法是在每台服务器上设置一次用户,然后不将它们保存在数据库项目中。但是在部署过程中它们会被丢弃。

我是否可以通过Visual Studio中的项目配置来实现此目的?

我们正在使用完整的Microsoft堆栈

  • Visual Studio 2010数据库项目
  • SQL Server 2008
  • TFS版本控制和构建服务器
  • vsdbcmd用于部署

1 个答案:

答案 0 :(得分:2)

有些事情可以让这更容易:

  1. 在数据库中创建有意义的角色名称,其中包含角色应具有的权限。例如“开发”或“生产支持”。仅为这些角色和角色用户分配权限
  2. 在您的项目中,您可能会针对不同的环境使用不同的部署配置。由于每个配置可以使用不同的sqlcmdvars文件,因此为您的环境创建一个SQLCMD变量并为其添加适当的值(例如,“DEV”用于开发,“PROD”用于生产)
  3. 创建一个部署后脚本,根据SQLCMD变量的值为正确的环境做正确的事情。类似的东西:
  4. -

    if ('$(Environment)' = 'DEV')
    begin
       create user [domain\developers]
       exec sp_addrolemember @rolename='db_owner', @membername='domain\developers'
    end