Sql-Server

SQL Server 2012 AlwaysOn 可用性組在節點之間切換時伺服器登錄失敗

  • July 9, 2015

我正在設置一個 3 節點集群作為可用性組的一部分。

最初,我使用 SQL Management Studio 測試了節點之間的故障轉移,當我停止一個節點時,一切都成功地進行了故障轉移,我仍然能夠編寫查詢。

我開始使用一個使用 SQL 使用者連接的應用程序進行測試,每當我切換節點時,我都會登錄失敗。

我相信這個問題的原因是因為與數據庫綁定的伺服器登錄 SID 與導致登錄失敗的其他節點上的伺服器登錄不同。如果我沒有正確理解這一點,請糾正我。

如果我理解正確,如何確保節點之間的伺服器登錄 SID 相同?有沒有辦法複製這個或者這應該怎麼做?

我讀了一些關於包含數據庫的內容,我可以在數據庫本身上設置登錄名而不是創建伺服器登錄名,但我寧願不走那條路。

你的直覺可能是正確的。您可以通過執行以下命令來驗證節點之間的 SID 是否不同:

select name, sid from sys.server_principals

在每個節點上並比較它們。

至於您應該如何使它們保持同步,請在創建時這樣做(不幸的是,我不知道事後更改 SID)。也就是說,該create login語句有一個可選子句來提供 SID。所以我會這樣做:

-- on node 1
create login [foobar] with password = 'str0ngp@ssword!';
select sid from sys.server_principals where name = 'foobar';

-- on subsequent nodes
create login [foobar] with password = 'str0ngp@ssword!', sid = <the sid you obtained from node 1>;

我已經這樣做了,以便生成自己的 SID 並將其傳遞給節點 1(以便在所有伺服器上執行相同的腳本),但我將其作為練習留給讀者。:)

引用自:https://serverfault.com/questions/704649