我试图建立一个流畅的部署过程,我们可以部署到生产或开发SQL服务器的单一部署脚本。
但我不知道如何最好地管理两个环境之间的用户和权限。 例如,在发展,我们希望开发组具有db_owner
数据库角色。 在生产我们要么不想要访问或者只是datareader
作用。
我认为这样做会在每台服务器上,一旦建立了用户,然后禁止他们在数据库项目的最简单方法。 但后来他们得到部署期间下降。
有没有一些方法,我可以做在Visual Studio中使用此项目配置?
我们使用一个完整的Microsoft堆栈
- Visual Studio 2010的数据库项目
- SQL Server 2008中
- TFS版本控制和构建服务器
-
vsdbcmd
部署
几件事情使这更容易:
- 在数据库中创建有意义的角色名是涵盖权限一个角色应该有。 例如“发展”或“生产支持”。 分配权限只对这些角色和用户角色
- 在你的项目,你可能有你不同的环境不同的部署配置。 由于每个配置可以使用不同的sqlcmdvars文件,做出SQLCMD变量为您的环境,并把合适的值在它(例如,“DEV”的发展,“PROD”用于生产)
- 创建做正确的事的基础上,SQLCMD变量的值合适的环境部署后脚本。 就像是:
-
if ('$(Environment)' = 'DEV')
begin
create user [domain\developers]
exec sp_addrolemember @rolename='db_owner', @membername='domain\developers'
end