Sql-Server
將數據庫恢復到開發和測試環境,現在使用者無法登錄
我昨晚備份了我們的生產數據庫並將其恢復到測試和開發環境,但今天早上單個使用者無法登錄到測試/開發數據庫。我可以進入 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