Sql-Server
SQL Always on 可用性與故障轉移和混合身份驗證
我有 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>;
或使用包含的數據庫使用者:
CREATE USER user_name WITH PASSWORD = 'strong_password';