恢复数据库用户登录错误

use*_*365 9 sql-server

我正在尝试从其他服务器中的备份还原数据库(SQL SERVER 2008).我遇到的问题是登录,因为用户包含在备份中,但登录不包括在内.

所以我尝试在服务器中创建一个新的登录,但它似乎没有工作.

有人知道解决方法吗?

And*_*mar 14

恢复后这是一个非常常见的问题.用户(特定于数据库)和登录(服务器范围)都具有SID.问题可能是您创建的登录与生产数据库上的登录具有不同的SID.您可以检查登录和用户SID,如:

select UserSid from sysusers where name = 'UserName'
select LoginSid from master.dbo.syslogins where name = 'UserName'
Run Code Online (Sandbox Code Playgroud)

这是我们在每次备份后运行的脚本,用于修复登录 - 数据库链接:

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
Run Code Online (Sandbox Code Playgroud)


小智 13

我不是100%确定你的错误的原因但是这个脚本在从另一台服务器恢复数据库时帮助我,假设登录和用户已经存在于目标服务器中:

EXEC sp_change_users_login UPDATE_ONE, '[username]', '[loginname]'
Run Code Online (Sandbox Code Playgroud)

(用您的数据库用户名替换[username],用服务器登录替换[loginname])


cod*_*ger 4

如果您发布实际的错误消息以及产生错误所采取的步骤,将会很有用。

无论如何,我认为您需要做的是从恢复的数据库中删除用户。然后您将能够从头开始设置用户和相应的服务器登录。

编辑:

如果用户在数据库中拥有架构,您将无法删除该用户。 Microsoft 有一篇关于如何传输 SQL 登录名的文章。