Answers:
我看到您已经找到了解决问题的方法,我在原始问题中注意到的一件事是您仍然可以访问旧服务器。
以下关于SO的问题有一个类似的问题,并且包含指向Microsoft文章的链接,该文章带有用于生成用户权限的脚本。
/programming/461385/restoring-a-backup-to-a-different-server-user-permissions
(针对该问题列出的资源http://support.microsoft.com/kb/918992)
听起来好像将服务器设置从Windows身份验证更改为混合模式身份验证可以解决您的问题,但是以防万一它不能完全解决问题,我认为这可能很有用。
这被称为“孤立用户”。这是2种修复方法
如果可以,请将原始主数据库还原为“ loginsource”,并且sys.server_principals具有足够的信息来生成所有SQL Server和Windows登录名。也就是说,SID和加密的密码
如果仅使用Windows登录名,则可以针对每个数据库运行此命令以生成脚本
脚本:
SELECT
'CREATE LOGIN [' + SUSER_SNAME(sid) + '] FROM WINDOWS'
FROM
sys.database_principals
WHERE
[type] IN ('G', 'U')
理想情况下,您将在执行还原之前将用户和权限脚本化。如果那没有发生,那么您需要在事实发生后再进行修复,并且可能会错过一些机会,但是您应该能够达到目标的90%。
您需要确定的第一件事是新服务器上是否存在相同的登录名。如果没有,则应该确定是否可以在新服务器上创建登录名。永远不要以为应该创建它们,原因很可能是为什么它们最初不存在。然后,您可以通过浏览sysusers表来创建它们。
您可以通过运行类似于以下内容的方式来修复孤立的用户:
DECLARE @username varchar(25), @loginsid varbinary(85)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name
FROM sysusers
WHERE issqluser = 1
and (sid is not null and sid <> 0x0)
and suser_sname(sid) is null
and name in (select name from master..syslogins)
ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_change_users_login 'update_one', @username, @username
FETCH NEXT FROM fixusers
INTO @username
END CLOSE fixusers
DEALLOCATE fixusers
该代码适用于SQL2008,但编写为与SQL2000向后兼容。
您可以引用以下URL来修复数据库用户权限