我有一个SQL 2005 Express数据库,其安全性配置为在我的开发机器上进行Windows身份验证。有时我需要将其复制到使用SQL身份验证的SQL 2008 R2测试服务器。我尝试在测试服务器上分离和附加开发副本,以及在测试服务器上恢复开发备份,但在这两种情况下,我之前配置的SQL帐户的角色成员资格和权限都丢失了,我必须重新配置它们。
有没有办法将数据库复制到测试服务器并在恢复/附加后保持现有的SQL用户安全配置不变?
谢谢!
答案 0 :(得分:4)
您可能遇到称为“孤儿用户”的问题,which is discussed in this Mircosoft article。
基本上,用户存在于数据库中,并且登录存在于服务器上,但SPID不匹配,因此在数据库还原或连接到服务器时,用户与登录无关。 / p>
正如文章中所讨论的,sp_change_users_login
存储过程可用于解析单个登录,以下脚本将尝试自动修复数据库中的所有用户:
IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id('tempdb..#t_users'))
drop table #t_users
CREATE TABLE #t_users ( [name] SYSNAME)
INSERT #t_users ( [name] )
SELECT [name]
FROM sysusers
WHERE
islogin = 1
AND name NOT IN ('dbo', 'public', 'guest', 'sys', 'INFORMATION_SCHEMA')
order by name
DECLARE @lc_name SYSNAME
SET @lc_name = (SELECT MIN([name]) FROM #t_users)
WHILE @lc_name IS NOT NULL
BEGIN
IF EXISTS(SELECT * FROM master..syslogins WHERE [name] = @lc_name)
BEGIN
EXEC sp_change_users_login 'AUTO_FIX', @lc_name
PRINT 'fixing ' + @lc_name
END
ELSE
PRINT '*** not fixing ' + @lc_name
SET @lc_name = (SELECT MIN([name]) FROM #t_users WHERE [name] > @lc_name )
END
答案 1 :(得分:2)
不确定: SSMS GUI有一个快速复制用户的方法:,任务,生成脚本....,选择“用户”。
这是另一种选择:
http://support.microsoft.com/default.aspx?scid=kb;en-us;246133