Sql-Server

在日誌傳送的輔助伺服器上創建使用者

  • February 9, 2020

我有一個生產伺服器說ServerA我已經設置了日誌傳送,ServerB它處於只讀模式。此日誌傳送的目的是降低生產伺服器上一些昂貴查詢(痛苦報告)的負載。

現在,如果我必須使用我們的域帳戶創建一些登錄名。我不能這樣做,因為輔助數據庫位於standby mode.

我想如果我在主伺服器上創建這些登錄名,它將被複製到輔助伺服器,然後日誌會在那裡恢復,但事實並非如此。

我在網上做了很多研究,找到了解決這個問題的方法。我為此找到了以下資源。我嘗試了本文中建議的所有方法,但似乎都不起作用。

1)Log Shipping in SQL Server 2008 R2 for set BI on replicated database

2)How to transfer logins and passwords between instances of SQL Server

3)Orphaned Users with Database Mirroring and Log Shipping

有人遇到過同樣的問題嗎?你做了什麼?有沒有辦法解決這個問題?任何建議請任何指針。

兩種選擇:

  • 在您的日誌傳送主伺服器上,在該數據庫中找到一個具有您想要的權限的使用者(或創建一個)。如果您創建一個,那麼日誌傳送將把它傳輸過來(因為這是一個數據庫級對象)。然後,在主伺服器上找到您想要的使用者的 SID:select sid from sys.database_principals dp where type = 'S' and name = '<<YourUserNameHere>>'. (SID 基本上是一個唯一的 ID - 它完全不可讀)然後,在輔助伺服器上,使用指定的 SID 創建一個登錄:CREATE LOGIN [<YourLoginNameHere>>] WITH PASSWORD ='<<YourPasswordHere>>', SID = <<the SID from primary server>>。通過指定 SID,該登錄名將與您的登錄數據庫中的使用者具有相同的 SID - 然後您應該能夠登錄該使用者。
  • 在您的日誌傳送目的地創建一個具有伺服器級權限(即係統管理員)的登錄名。出於多種原因,這是一個非常糟糕的主意(特別是如果您在該伺服器上有其他數據庫)。

創建使用者的工作範例:我有一個名為 LogShippingTest 的數據庫,我想在 logshipped 副本上的輔助伺服器 db_datareader 上登錄,以便 Marketing 可以讀取內容。

在主伺服器上:

USE [LogShippingTest];
CREATE USER [DataReaderForMarketing] WITHOUT LOGIN;
ALTER ROLE [db_datareader] ADD MEMBER [DataReaderForMarketing];
SELECT sid FROM sys.database_principals dp WHERE type = 'S' AND name = 'DataReaderForMarketing'

假設 SID 是 0x70DD0D59ADF3FD4ABB000037826A2888(我只是編造的,但我們將從那裡開始)。現在,要麼強制執行日誌傳送,要麼等到它自己執行並且使用者存在於輔助端。然後,在二級:

USE [master];
CREATE LOGIN [DataReaderForMarketing] WITH 
  PASSWORD = 'ThisIsAVerySecurePassword', 
  SID = 0x70DD0D59ADF3FD4ABB000037826A2888 

然後,您應該能夠在輔助伺服器上以 DataReaderForMarketing 登錄名登錄,並在 logshipped 輔助數據庫上擁有 db_datareader。(您可以更改主數據庫使用者的權限,他們也會登錄以應用到輔助數據庫!)

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