9

我已經在SQL Server 2008 R2中構建了一個數據庫,並且正在使用Visual Studio 2010 Ultimate爲它創建一個數據庫項目。如何在Visual Studio數據庫項目中處理用戶和登錄?

我已經創建了一個SQL Server項目和數據庫項目來代表我的環境基於此MSDN walkthrough。兩個項目的模式比較按預期工作,我可以將所有更改服務器複製到項目中。

但是,它似乎已經導入了一些環境特定的配置,例如登錄,用戶/登錄映射,本地服務帳戶(例如NT SERVICE \ MSSQL $ SQLEXPRESS2008)等等。這似乎並不理想,因爲我的印象是這個數據庫項目可以部署到另一臺服務器上,這些環境特定的細節可能會有所不同。例如,Dev,QA和Prod中的命名實例可能不同。用戶可以映射到不同的登錄名。

我正在做這個或者我應該採取額外的步驟,使數據庫項目可移植到所有環境?

我的目標是這個項目利用到

  1. Capture模式的版本控制
  2. 部署架構更改,如通過產生變化腳本
  3. 領帶單元測試上創建一個一次性的測試環境飛。

回答

7

之前我們不得不惹惱了這個,並最終使用了Jamie Thompson的想法,即創建部署後腳本來處理基於包含環境/配置名稱的變量的權限。你可以在這裏找到相應的文章: http://sqlblog.com/blogs/jamie_thomson/archive/2010/07/21/a-strategy-for-managing-security-for-different-environments-using-the-database-development-tools-in-visual-studio-2010.aspx

我也寫了一個腳本來處理權限的腳本:

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 

在一起,我設置的權限進入後期部署腳本和文件夾將重新創建用戶/基於環境的角色/權限。我們從主要的部署後部分調用一個「包裝器」腳本,通過其餘部分來確定要運行的部分。

+0

這仍然是最新版本的SQL Server和Visual Studio的最佳解決方案嗎?試圖找出現在在VS2015上處理這個問題的最佳方法,但沒有看到任何新東西。 – ngneema 2015-09-30 19:41:00

+1

雖然VS2015中有更多的粒度設置可以忽略不同的對象類型,但我還沒有看到有關如何執行此操作的新內容。 – 2015-09-30 20:09:06

相關問題