我試圖從不同服務器中的備份恢復數據庫(SQL SERVER 2008)。我遇到的問題是登錄,因爲用戶包含在備份中,但登錄不是。恢復數據庫用戶登錄錯誤
所以我嘗試在服務器中創建一個新的登錄名,但它似乎沒有工作。
任何人都知道這個解決方法?
我試圖從不同服務器中的備份恢復數據庫(SQL SERVER 2008)。我遇到的問題是登錄,因爲用戶包含在備份中,但登錄不是。恢復數據庫用戶登錄錯誤
所以我嘗試在服務器中創建一個新的登錄名,但它似乎沒有工作。
任何人都知道這個解決方法?
如果您發佈了實際的錯誤消息以及產生錯誤的步驟,它將會非常有用。
無論如何,我認爲你需要做的是從恢復的數據庫中刪除用戶。然後你就可以從頭開始設置用戶&對應的服務器登錄。
編輯:
如果用戶在數據庫中擁有一個模式,你將無法刪除的用戶。 There is Microsoft article on how to transfer SQL Logins.
這是恢復後非常常見的問題。用戶(數據庫特定)和登錄(服務器範圍)都有一個SID。問題可能是您創建的登錄名與生產數據庫中的登錄名具有不同的SID。每次備份後
select UserSid from sysusers where name = 'UserName'
select LoginSid from master.dbo.syslogins where name = 'UserName'
下面是我們運行一個腳本來修復登錄 - 數據庫鏈接:您可以檢查登錄名和用戶的SID像
declare user_cursor cursor forward_only read_only for
SELECT distinct u.name
FROM sysusers u
JOIN master.dbo.syslogins l ON u.name = l.name
WHERE u.issqluser <> 0
declare @user sysname;
open user_cursor
fetch next from user_cursor into @user;
while @@fetch_status = 0
begin
if @user <> 'dbo'
begin
print ''
print 'Updating user "' + @user + '"'
exec sp_change_users_login 'Auto_Fix', @user
end
fetch next from user_cursor into @user
end;
close user_cursor
deallocate user_cursor
像魅力一樣工作,謝謝!這個腳本節省了我浪費時間的時間...... – DaveN59 2016-06-23 19:26:00
我不是100%肯定的原因你錯誤,但恢復時,從另一臺服務器的數據庫,假設登錄和用戶已經在目標服務器上存在此腳本可以幫助我:
EXEC sp_change_users_login UPDATE_ONE, '[username]', '[loginname]'
(替代[用戶名]與您的數據庫用戶名一nd [登錄名]與服務器登錄)
我無法對上述帖子發表評論 - 但它的工作原理,我必須做出的唯一修正是在LINE 4中,我在該字段上指定了默認排序。
JOIN master.dbo.syslogins l ON u.name COLLATE DATABASE_DEFAULT = l.name COLLATE DATABASE_DEFAULT
好的,我設法通過更改模式來刪除用戶。所以我添加了一個新的登錄和用戶,但我仍然得到相同的錯誤:異常詳細信息:System.Data.SqlClient.SqlException:用戶'xx'的登錄失敗。 – user441365 2010-10-18 11:54:48
我檢查了事件查看器和錯誤編號:1309 – user441365 2010-10-18 11:55:33
@ user441365 - 查看此鏈接以獲取有關此錯誤的更多詳細信息。國家是什麼? http://msdn.microsoft.com/en-us/library/ms366351.aspx – codingbadger 2010-10-18 11:56:53