我最近将我的开发环境从SQL 2000升级到SQL 2008 R2。我已经完成了生产数据库的备份,并将其恢复为新的开发服务器。
我在dev服务器上创建了一个登录,它反映了我在生产服务器上使用的登录,但我无法将其映射到数据库中的'dbo'用户。当我在“用户映射”中编辑登录属性时,我用'dbo'替换用户,我收到以下错误:
标题:用户的Microsoft SQL Server Management Studio创建失败 'DBO'。 (Microsoft.SqlServer.Smo)发生异常时 执行Transact-SQL语句或批处理。 (Microsoft.SqlServer.ConnectionInfo)用户,组或角色'dbo' 已存在于当前数据库中。 (Microsoft SQL Server,错误: 15023)
那么如何将登录映射到现有用户?
答案 0 :(得分:13)
要将用户与登录进行协调,您可以使用系统存储过程sp_change_users_login。
sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ]
[ , [ @LoginName = ] 'login' ]
[ , [ @Password = ] 'password' ];
例如:
EXEC sp_change_users_login 'Update_One','User123','User123'
如果您有许多不同步的用户,您可以使用游标提取所有用户并为他们运行此命令。针对不同步的用户运行此操作没有任何不利影响,它将修复所有孤立用户。
DECLARE @sql NVARCHAR(MAX);
DECLARE curSQL CURSOR
FOR
SELECT 'EXEC sp_change_users_login ''UPDATE_ONE'', ''' + name + ''', ''' + name + ''''
FROM sysusers
WHERE issqluser = 1
AND name NOT IN ( 'guest', 'dbo', 'sys', 'INFORMATION_SCHEMA' )
OPEN curSQL
FETCH curSQL INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC (
@sql
)
FETCH curSQL INTO @sql
END
CLOSE curSQL
DEALLOCATE curSQL
这必须运行用户需要修复的数据库的上下文。
答案 1 :(得分:11)
我认为NikolaMarkovinović对这篇文章的评论需要作为答案添加。使用Alter用户命令:
USE {database};
ALTER USER {user} WITH login = {login}
其中:
答案 2 :(得分:0)
在SQL Server 2012下,用户&#d;'不能改变。