2009-06-29 77 views
1

在多個環境中的多個數據庫之間管理和維護SQL Server登錄,服務器角色和單獨訪問權限的好方法是什麼?你最好的做法是什麼?SQL Server登錄配置和自動化

我的情況有些信息:

  • SQL Server 2005的
  • 我們擁有具有相同模式的「客戶」數據庫施氮量(理論上至少)
  • 我們有一箇中央「管理「數據庫引用的每個客戶端的數據庫,並且可以保持配置值
  • 該‘管理/客戶端’模式在多種環境(DEV/QA /級/ PROD)
  • 一些用戶,如測試者複製,NE編基於環境現狀不同的權利
  • 我們經常要拉客戶數據庫備份從一個環境到另一個恢復用於開發或測試目的
  • 我們保持我們的存儲過程和腳本源控制和構建循環部署

現在我的組織很混亂,我們沒有遵循良好的安全實踐。我們沒有正式的DBA。但是,如果我們有更復雜的情況,那麼始終保持它始終是一件麻煩事。我可以看到遷移到新服務器或從災難中恢復非常耗時,如果我們在哪裏嘗試直接通過Management Studio IDE進行配置。

回答

2

首先,爲了使數據庫恢復到不同的服務器更容易,請確保您的所有服務器上的登錄都具有相同的SID,方法是使用Microsoft的sp_help_revlogin stored procedure在您創建的第一臺服務器上編寫登錄腳本然後使用該腳本在其他服務器上創建登錄。當您還原數據庫時,這會使數據庫用戶正確映射到登錄名。

根據環境的不同,在數據庫級別擁有不同的權限將會成爲一個麻煩,無論您如何角色化。我在主服務器上有一個存儲過程,作爲我的恢復過程的一部分,在我的開發服務器上調用,在數據庫上執行額外的GRANT,以便開發人員進行更改。這是我能夠想出來解決類似問題的最佳選擇。

2

使權利更容易的一種方法是在數據庫中創建名爲Dev,QA,Test,Prod的卷並授予這些角色的正確權限。然後,當您將數據庫還原到每個環境時,只需將開發人員放在正確的角色中即可。

1

我們使用活動目錄組並強制Windows驗證登錄。在SQL Server中,我們可以通過爲每個AD組創建一個SQL Server登錄來基於用戶所在的AD組來定義訪問。不知道這是否比數據庫角色更好或更差,但這意味着角色在每個數據庫之外進行管理。

傳播對數據庫的訪問是然後要麼手動操作或短SQL腳本,以確保數據庫中的點登錄到一個有效的SQL Server登錄(這又是一個AD組)。

一般情況下,這適用於一般情況。我們可以使用數據庫角色,然後爲每個AD組分配內置角色(例如,db_datareader)

很少有人需要對此模型之外的數據庫進行某些特定訪問。如果它不會成爲侵入性或關鍵性的問題,我們最終可能會向整個組織開放,否則我們最終會創建必須單獨管理的每個用戶帳戶。我們努力將這些保持在最低限度,並且時不時地清理它們,以免它們被濫用/遺忘。