Sql-Server

使用此使用者還原後,將 SQL Server 使用者重新綁定到其登錄名

  • June 17, 2015

在執行 SQL Server (v12.0.2000) 數據庫的還原後,我認為需要將使用者重新映射到其登錄名(這個問題似乎被稱為孤兒使用者)。最簡單的方法之一是執行:

use [MyDatabase];
alter user MyUser with login = MyUser;

然而,就在實現還原之後,該USE命令失敗,因為我正在嘗試使用 執行上述命令'MyUser',這是孤立的…

因為它在腳本中,所以我想避免對restore一個使用者執行 a 和alter user對另一個使用者執行 a,以便將第一個使用者正確地重新映射到其登錄名。

有沒有辦法用’MyUser’(誰可以毫無問題地連接到master)來做到這一點?

我通過以下方式完全限定“MyUser”進行了嘗試,但沒有成功:

use master;
alter user MyDatabase.MyUser with login = MyUser;

知道這是否可能以及如何做到這一點?

很不幸的是,不行。請記住,數據庫主體和伺服器主體是兩個獨立的對象。在您修復孤兒之前,即使在數據庫中 呼叫了一個孤兒使用者,伺服器主體MyUser也無權訪問。MyDatabase``MyUser

修復孤兒的另一種方法是更改​​伺服器主體的 SID 以匹配數據庫主體的 SID。這確實有在其他數據庫中創建孤兒的風險,更重要的是,在這種情況下,您必須刪除主體並使用新的 SID 重新創建它。當然,使用該特定 ID 是不可能的。

您唯一的方法是使用具有適當權限的單獨 id 來解決此問題。這可能是具有 sysadmin 權限的 id(即使沒有關聯的數據庫主體,它也有權連接到數據庫)或對數據庫具有 DBO 訪問權限的 id。請注意,這些只是範例,還有其他幾個可用權限允許您修改伺服器/數據庫主體。

您可以使用 sp_change_users_login 更新數據庫使用者的 SID: https ://msdn.microsoft.com/en-us/library/ms174378.aspx

或者,您可以使用 sp_help_revlogin 從生產伺服器編寫登錄腳本,刪除 DR 使用者並使用腳本重新創建它:https: //support.microsoft.com/en-us/kb/918992

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