【问题标题】:How can I manage SQL permissions between development and production?如何管理开发和生产之间的 SQL 权限?
【发布时间】:2012-07-11 04:03:19
【问题描述】:

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

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

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

有没有什么方法可以在 Visual Studio 中使用项目配置来做到这一点?

我们使用的是完整的 Microsoft 堆栈

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 确保如果您使用 :r 语法运行多个脚本,则您的脚本之间有 GO 语句。如果你不这样做,那么它就不能正确执行。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 2016-04-07
    • 2012-05-26
    • 2021-09-01
    • 1970-01-01
    • 2013-12-14
    • 2011-10-09
    相关资源
    最近更新 更多