3

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

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

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

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

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

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

1 回答 1

3

有几件事使这更容易:

  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
于 2012-07-11T19:06:36.430 回答