Sql server 如何在VisualStudio数据库项目中处理用户和登录?

Sql server 如何在VisualStudio数据库项目中处理用户和登录?,sql-server,visual-studio-2010,visual-studio,sql-server-2008-r2,database-project,Sql Server,Visual Studio 2010,Visual Studio,Sql Server 2008 R2,Database Project,我已经在SQLServer2008R2中构建了一个数据库,并且正在使用VisualStudio2010Ultimate为它创建一个数据库项目 我已经创建了一个SQL Server项目和数据库项目来表示基于此的环境。这两个项目的模式比较工作正常,我能够将服务器上的所有更改复制到项目中 但是,它似乎导入了一些特定于环境的配置,例如登录、用户/登录映射、本地服务帐户(例如NT service\MSSQL$SQLEXPRESS2008),这似乎不太理想,因为我的印象是这个数据库项目可以部署到另一台服务器

我已经在SQLServer2008R2中构建了一个数据库,并且正在使用VisualStudio2010Ultimate为它创建一个数据库项目

我已经创建了一个SQL Server项目和数据库项目来表示基于此的环境。这两个项目的模式比较工作正常,我能够将服务器上的所有更改复制到项目中

但是,它似乎导入了一些特定于环境的配置,例如登录、用户/登录映射、本地服务帐户(例如NT service\MSSQL$SQLEXPRESS2008),这似乎不太理想,因为我的印象是这个数据库项目可以部署到另一台服务器上,而这些特定于环境的细节可能会有所不同。例如,Dev、QA和Prod之间的命名实例可能不同。用户可以映射到不同的登录

我这样做是否正确,还是应该采取额外的步骤使数据库项目可移植到所有环境

我的目标是利用这个项目

  • 版本控制中的捕获模式
  • 部署架构更改,例如通过生成更改脚本
  • 结合单元测试,动态创建一次性测试环境

  • 我们以前不得不处理这个问题,最终使用了Jamie Thompson的想法,即创建部署后脚本来处理基于包含环境/配置名称的变量的权限。您可以在此处找到(已存档)文章:

    注:杰米的链接显然已失效。我在这里根据它写了一些东西:

    我还编写了一个脚本来处理权限脚本:

    SELECT
    state_desc + ' ' + permission_name +
    ' on ['+ ss.name + '].[' + so.name + ']
    to [' + sdpr.name + ']'
    COLLATE LATIN1_General_CI_AS as [Permissions T-SQL]
    FROM SYS.DATABASE_PERMISSIONS AS sdp
    JOIN sys.objects AS so
         ON sdp.major_id = so.OBJECT_ID
    JOIN SYS.SCHEMAS AS ss
         ON so.SCHEMA_ID = ss.SCHEMA_ID
    JOIN SYS.DATABASE_PRINCIPALS AS sdpr
         ON sdp.grantee_principal_id = sdpr.principal_id
    
    UNION
    
    SELECT
    state_desc + ' ' + permission_name +
    ' on Schema::['+ ss.name + ']
    to [' + sdpr.name + ']'
    COLLATE LATIN1_General_CI_AS as [Permissions T-SQL]
    FROM SYS.DATABASE_PERMISSIONS AS sdp
    JOIN SYS.SCHEMAS AS ss
         ON sdp.major_id = ss.SCHEMA_ID
         AND sdp.class_desc = 'Schema'
    JOIN SYS.DATABASE_PRINCIPALS AS sdpr
         ON sdp.grantee_principal_id = sdpr.principal_id
    order by [Permissions T-SQL]
    GO
    

    同时,我将权限设置到部署后脚本和文件夹中,这些脚本和文件夹将根据环境重新创建用户/角色/权限。我们从主部署后部分调用一个“包装器”脚本,该脚本将遍历其余部分,以确定要运行哪个部分。

    对于较新版本的SQL server和Visual Studio,这仍然是最好的解决方案吗?目前正在尝试找出在VS2015上处理此问题的最佳方法,但没有看到任何新的内容。我还没有看到任何新的处理方法,尽管VS2015中有更精细的设置,可以忽略不同的对象类型。链接似乎是dead@sr28也许这会有帮助:可能会有杰米原帖的档案,但是我基于他的帖子可能会给你一些帮助。