Sql-Server

SQL Server 2016 - 可用性組 - 如何將權限複製到輔助節點

  • June 23, 2020
  • SQL 伺服器 2016
  • SSMS v18.4

我想創建相同的登錄名並在兩個節點上賦予相同的權限。

在主節點中,我對此操作沒有任何問題。

但是當我在輔助節點上創建相同的登錄並想要使用者映射時,它會給出以下錯誤:

登錄“登錄名”創建失敗。

附加資訊:

執行 Transact-SQL 語句或批處理時發生異常。(Microsoft.SqlServer.ConnectionInfo)

無法更新數據庫“dbname”,因為數據庫是只讀的。(Microsoft SQL Server,錯誤:3906)

但是我的數據庫不是只讀的。

我正在嘗試這樣的授予權限:

Node 2 (Secondary) -> Security -> Logins -> Right click on MyLogin-> Properties -> User Mapping -> Select database and choose dbo for default schema -> Select public and db_owner -> OK.

它為輔助節點的所有數據庫提供此錯誤。

我如何在不進行故障轉移的情況下解決這個問題(故障轉移可以解決這個問題,因為它將主節點連接到 Node-2 但我不想進行故障轉移)?

如果可以使用 PowerShell,我該如何在 PowerShell for Node-2 上執行此操作?

謝謝你。

最好的祝福,

  1. 使用sp_help_revlogin過程安全地編寫 SQL 登錄及其密碼(以及 Windows 身份驗證登錄)的腳本,因此您可以在具有完全相同 SID 的輔助副本上重新創建所有這些登錄,就像它們在主副本上一樣

https://support.microsoft.com/en-us/help/918992/how-to-transfer-logins-and-passwords-between-instances-of-sql-server

  1. 在與主副本具有相同 SID 的輔助副本上創建所有必要的登錄後,您需要使用ScriptLoginPermissions過程,確定您在主副本上的登錄是否具有任何伺服器級權限。

這些是儲存在主數據庫中的權限。如果您的任何登錄名在主要副本上具有任何伺服器級權限,則您需要將輔助副本上的這些權限授予這些登錄名。ScriptLoginPermissions過程可以幫助您為此生成 T-SQL,它可以在這裡找到:

https://github.com/aleksey-vitsko/Database-Administrator-Tools

  1. 在使用者數據庫級別授予的數據庫級別權限,您不需要在輔助副本授予這些權限。而且您不需要在輔助副本上登錄到使用者映射。因為主節點的任何權限或使用者更改都會自動複製到可用性組中的輔助節點。

您不需要進行任何故障轉移,主副本上的所有數據庫級權限也同步到輔助副本。您不能對輔助副本的權限進行任何更改,因為那裡的使用者數據庫處於只讀狀態

ps 在具有匹配 SID(安全標識符,可在 sys.server_principals 中查看)的主副本和輔助副本上登錄很重要

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