Sql-Server

遷移標記為特定數據庫使用者的登錄

  • May 21, 2021

我們正在將 2008R2 到 2014 上託管的一些數據庫以及剩餘的數據庫遷移到其他伺服器上,從 SQL2008R2 遷移到 SQL 2014。

我知道使用 dbatoo 或使用 sp_helprevlogin 遷移登錄。

但是使用它會將所有登錄名從 2008R2 實例移動到 2014 年。

由於我們只移動一些數據庫,我們只需要移動它們各自的登錄名,或者我應該說只有那些在數據庫中的使用者下存在的登錄名被遷移到 2014 實例。

我們如何通過腳本智能地實現這一點,因為手動操作會花費大量時間,因為我們有數百個登錄名和大約 40 個數據庫

我有一個名為sp_SrvPermissions的過程,它有一個@DBName專門用於此的參數。你可以這樣做:

EXEC sp_SrvPermissions @DBName = '<DBName>', @Output = 'CreateOnly'

這不僅會為您提供創建LOGIN與該數據庫相關聯的腳本,還會為您提供它們所屬的任何伺服器級別角色以及它們可能擁有的任何伺服器特定權限。

我有點著急,但這會做你需要的一部分。這將為所有 SQL 登錄創建一個 CREATE LOGIN 語句,如果要提取與特定數據庫關聯的登錄,則需要加入 sys.database_principals。如果您需要處理 Window 登錄,您還需要對其進行調整。

select 'CREATE LOGIN ' + QUOTENAME(name) + 
' WITH PASSWORD = 0x' + CONVERT(VARCHAR(MAX), LOGINPROPERTY(name,'PasswordHash'), 2) + ' HASHED, ' + 
' SID = 0x' + CONVERT(VARCHAR(MAX), sid, 2)
FROM sys.server_principals

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