Availability-Groups
ALTER USER 語句修改離線節點上的使用者
我之前在這裡問過一個關於孤立使用者的問題,並被引導到這個連結以修復它,但這似乎沒有回答我的問題,所以我在進一步審查我的系統後重新提問。
我們發現輔助 AG 節點上的幾個數據庫使用者被孤立並設置為
SQL User Without Login
,因此我們無法執行成功的故障轉移。唯一的修復是ALTER USER 'user' with login = 'user';
在故障轉移後執行,它將數據庫登錄與第二個節點上的 SQL 登錄映射並允許應用程序連接。不幸的是,這從第一個節點上的使用者中刪除了配置並將它們設置為SQL User Without Login
. 我們顯然不希望這樣,因為這意味著手動干預和自動故障轉移中的額外停機時間。我的問題是:
- 如果在第一個節點上呼叫,為什麼一個節點上的
ALTER USER
語句會影響另一個節點?- 可用性組屬性中是否有需要檢查/添加的設置可能在我的設置中失去?
- 另一個部落格中有一條建議說刪除使用者,並使用 SQL 使用者的 SID 重新創建。這與執行
ALTER USER
語句有何不同,因為 DB 使用者的 SID 更改以與 SQL 使用者匹配?
這裡的問題是您在每個節點上的登錄名上都有不同的 SID。當您執行
ALTER USER
它時,它會更改數據庫使用者的 SID 以匹配該特定節點上的登錄,但在故障轉移後,數據庫使用者 SID 不再與 SQL 登錄 SID 匹配。解決方法是在一個節點上刪除 SQL 登錄,然後使用與另一個節點相同的 SID 重新創建它。這將確保 DB 使用者與兩個節點上的 SQL 登錄具有相同的 SID,因此在故障轉移後,DB 使用者將正確映射到登錄。
您可以使用dbatools Copy-DbaLogin命令將登錄從節點 B 刪除後從節點 A 複製到節點 B,這將帶來登錄的 SID 和密碼。