use*_*322 17 sql sql-server-2008
我最近将我的开发环境从SQL 2000升级到SQL 2008 R2.我已经完成了生产数据库的备份,并将其恢复为新的开发服务器.
我在开发服务器上创建了一个登录,它反映了我在生产服务器上使用的登录,但我无法将其映射到数据库中的'dbo'用户.当我在'用户映射'中编辑登录属性时,我用'dbo'替换用户,我收到以下错误:
标题:用户'dbo'的Microsoft SQL Server Management Studio创建失败.(Microsoft.SqlServer.Smo)执行Transact-SQL语句或批处理时发生异常.(Microsoft.SqlServer.ConnectionInfo)用户,组或角色"dbo"已存在于当前数据库中.(Microsoft SQL Server,错误:15023)
那么如何将登录映射到现有用户?
jwh*_*y58 13
要使用户与登录进行协调,可以使用系统存储过程sp_change_users_login.
sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ]
[ , [ @LoginName = ] 'login' ]
[ , [ @Password = ] 'password' ];
Run Code Online (Sandbox Code Playgroud)
例如:
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
Run Code Online (Sandbox Code Playgroud)
这必须运行您需要用户修复的数据库的上下文.
Zac*_*son 12
我认为NikolaMarkovinović对这篇文章的评论需要作为答案添加.使用Alter用户命令:
USE {database};
ALTER USER {user} WITH login = {login}
Run Code Online (Sandbox Code Playgroud)
哪里:
我在http://www.aip.im/2010/05/re-map-database-user-to-login-in-sql-server-after-restoring-or-attaching-database/#sthash找到了这个答案. fbazv94Z.dpuf