Sql-Server

SQL Always on 可用性與故障轉移和混合身份驗證

  • February 3, 2018

我有 2 個執行 SQL Server 2016 的機器,並使用 Always On Availability 進行設置。我設置了一個偵聽器來選擇在發生故障轉移時與哪個伺服器通信,這似乎工作正常,除了我使用混合身份驗證,我的連接字元串使用 SQL Server 身份驗證使用者而不是一個窗戶。

例如,我的應用程序中的連接字元串是:

Database=MySQLServer;Server=AGListener;User Id=sqluser;Password=XXXXXXX;

當我與主要工作對抗時,這很好用。當我故障轉移到輔助伺服器時,我收到一條錯誤消息“sqluser 對數據庫沒有任何權限”。如果我在輔助伺服器上執行以下腳本:

EXEC sp_change_users_login 'Update_One', 'sqluser', 'sqluser'

然後它再次正常工作,但是當我故障轉移回原始主伺服器時,我再次收到錯誤。看起來在每次故障轉移時,我都必須執行更新使用者腳本才能使連接字元串正常工作。

在 AG 環境中對連接字元串使用 SQL Server 身份驗證不是一個好主意嗎?還是我缺少一個步驟?我希望我的故障轉移是自動的,而不是每次都需要記住執行腳本。

在託管副本的實例上創建登錄,指定與託管主實例相同的 SID:

解決孤立使用者

在 master 數據庫中,使用帶有 SID 選項的 CREATE LOGIN 語句重新創建失去的登錄名,提供在上一節中獲得的數據庫使用者的 SID:

CREATE LOGIN <login_name>   
WITH PASSWORD = '<use_a_strong_password_here>',  
SID = <SID>;

來自:對孤立使用者進行故障排除 (SQL Server)

或使用包含的數據庫使用者

CREATE USER user_name WITH PASSWORD = 'strong_password';

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