Sql-Server
使用 STANDBY 還原後重新映射數據庫使用者/登錄
這和我之前的文章有關。。
基本上,我現在遇到的問題是,在我的恢復過程中(作為 ETL 的一部分),有一些任務可以將 db 使用者重新映射到登錄名(因為他們是伺服器 A 中的 SQL Auth 使用者,所以在伺服器上恢復時會失去映射乙)。由於使用 STANDBY 進行還原將不允許這樣做,因為它將是只讀數據庫 .. 我怎樣才能解決這個問題..?
您從伺服器 A 上的 db 中的使用者將通過備份移動到伺服器 B 上的數據庫。然後,您只需要使用相同的 sid 重新創建登錄名。您可以使用以下
WITH SID
選項執行此操作:CREATE LOGIN My_login WITH SID = 0x14585E90117152449347750164BA00A7
sid 顯然是您可以在以下位置找到的使用者 sid
sys.database_principals
:select name, sid from sys.database_principals where type_desc = 'SQL_USER';
如果 PowerShell 是一個選項,我發現通過dbatools.io Copy-SQLLogin cmdlet傳輸登錄更容易,如果不是,則使用sp_help_revlogin。
Copy-SQLLogin cmdlet 是一種更簡單的方法,該連結甚至有一個影片可以幫助您逐步完成該過程,但同樣,如果 PowerShell 不是一個選項並且您需要使用 sp_help_revlogin 路線,請確保執行儲存的ServerA 上的過程(通過連結文章創建後),將登錄語句複製到 ServerB 並在那裡執行語句。
如果您收到錯誤,您可能需要先從 ServerB 中刪除現有使用者,以便您可以同步 SID。
最後,如果您執行的是 SQL 2012 或更高版本,則可以將數據庫配置為部分包含的數據庫。這將使事情短路,因此安全性與備份一起傳輸,因為安全性是在數據庫級別而不是在實例級別處理的。使用部分包含的數據庫有一些限制,因此如果您覺得這可能是您希望採用的方法,請先查看這些限制。