2015-04-24 130 views
1

我有一個SQL Server 2008災難恢復數據庫,每晚都會從我們的生產服務器恢復。每次發生這種情況時,具有隻讀數據庫訪問權限的特定用戶/登錄都會中斷。在SQL Server 2008數據庫恢復後恢復用戶映射以登錄

在數據庫恢復完成後,重新創建用戶/登錄名或映射到數據庫的db_datareader用戶的最佳方式是什麼?

回答

2

這是由於SQL登錄名和SQL用戶使用SID作爲實際標識而導致的,SID不匹配,因爲它們是由每個服務器分別生成的。 Windows用戶和登錄使用來自域的SID,因此它們工作得很好。像sa這樣的登錄和像dbo這樣的用戶使用已知的SID。

你應該與ALTER USER修復:

ALTER USER <UserName> WITH LOGIN <LoginName>; 

但是,IMX,大多數人仍然使用sp_change_users_login,即使它否決。它更方便一些,因爲它不需要您手動指定所有內容,並且可以使用一個命令重新映射多個登錄。

--List orphaned users 
EXEC sp_change_users_login @Action = 'Report'; 

--Auto remap users to logins that have the same name 
EXEC sp_change_users_login @Action = 'Auto_Fix'; 

--Manual remap 
EXEC sp_change_users_login @Action = 'Update_One', @UserNamePattern = <UserName>, @LoginName = <LoginName>; 
+0

如果我這樣做,我的數據庫的用戶映射/角色成員身份(特別是db_datareader)是否保持不變,還是必須重新建立? – Aleks

+0

@Aleks它應該保持不變。該模型是將登錄映射到主數據庫中的服務器角色。用戶映射到用戶數據庫中的數據庫角色。然後通過匹配SID將用戶映射到登錄。就帳戶而言,這是服務器安全和數據庫安全之間唯一的映射。如果您的第二臺服務器具有相同的服務器角色和登錄配置,則只需運行'ALTER USER'命令重新映射它們即可。 –

相關問題