Sql-Server

使用可用性組管理登錄

  • January 23, 2018

我在我的主節點上創建了一個使用者,該使用者可以訪問可用性組 AG1 中的所有數據庫。如何確保同一使用者對 AG1 中的所有其他副本具有相同的權限?

根據這篇 MSDN 文章(http://msdn.microsoft.com/en-us/library/hh270282(v=sql.110).aspx),我需要先確定它們是否包含數據庫,但我不完全確定我已經包含數據庫。當我嘗試將他添加到 AG1 數據庫時,我在另一個副本的 get 上創建的使用者出錯。該錯誤表明它們是可用性組的一部分並且不可訪問。

假設這些不包含數據庫,您需要擔心登錄(伺服器級別),而不是使用者(數據庫級別)。包含的使用者將毫無困難地自動轉移。

在另一台伺服器上手動創建同名登錄是不夠的 - SID 將不匹配。

Robert Davis 寫了一篇文章,描述瞭如何使用正確的 SID 和正確的密碼雜湊生成登錄腳本。這是您需要在每個副本上執行的內容:

(另請參閱此答案的評論執行緒。)

為了僅編寫本地伺服器上的所有登錄腳本,請通過註釋掉此部分(以及隨之而來的)來更改儲存過程End

--If Not Exists (Select 1 From sys.server_principals
--          Where name = @LoginName)
--  Begin

IF NOT EXISTS(為了獲得角色和權限,您需要註釋掉其他類似的部分。)

然後使用硬編碼@@SERVERNAME和呼叫儲存過程@debug = 1。這將列印出CREATE LOGIN帶有密碼雜湊的命令,您可以選擇所需的命令並在副本上執行這些命令。

Jonathan Kehayias 編寫了一個 SSMS 外掛來處理所有未包含的對象(不要忘記諸如作業之類的事情),但我不知道它是否已針對較新版本的 SSMS 進行維護:

引用自:https://dba.stackexchange.com/questions/81849