Sql-Server

將數據庫恢復到開發和測試環境,現在使用者無法登錄

  • December 4, 2016

我昨晚備份了我們的生產數據庫並將其恢復到測試和開發環境,但今天早上單個使用者無法登錄到測試/開發數據庫。我可以進入 SSMS 並與使用者連接到 SQL Server,但是當我嘗試連接到特定數據庫時,我收到 4064 login failed 錯誤。憑據應該是正確的,因為我可以轉身登錄到生產環境並毫無問題地執行查詢。我比較了兩個權限集,並沒有發現 prod 和 dev/test 之間有任何區別。它們都具有對數據庫模式的“連接”權限,並且它們都是“db_reader”和“db_executor”組的一部分。在阻止該使用者連接到數據庫的測試/開發系統中,我可能會忽略什麼?

您是否嘗試過執行EXEC sp_change_users_login @action='Report';以查看它們是否是該數據庫的孤兒?

如果有結果,您可以使用Auto_Fix 選項執行以重新映射使用者。

發生的事情是使用者 ID 存在兩個地方。一個在使用者數據庫中,另一個在主數據庫中。當您從生產恢復到測試時,使用者數據庫中的使用者 ID 和主使用者 ID 之間的連結被破壞。該連結稱為安全 ID (SID)。在已恢復的數據庫中執行以下腳本,它將自動修復該數據庫中所有損壞的 SID。

declare @counter int
declare @lastuser int
declare @sysuser varchar(100)
declare @execvariable varchar(200)

set @counter=3

select top 1 @lastuser=uid from sysusers where uid <16000 order by uid desc

while @counter <= @lastuser
begin
select  @sysuser=name from sys.sysusers where uid=@counter 
           if  exists(select name from master.sys.syslogins where name=@sysuser)
           begin
           exec sp_change_users_login 'auto_fix', @sysuser
           end
           else begin
           print 'The user '+@sysuser+' does not exist in the master.syslogins table'  
           end
set @counter=@counter+1
end

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