加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL将登录映射到现有用户

发布时间:2020-12-12 16:33:20 所属栏目:MsSql教程 来源:网络整理
导读:我最近将我的开发环境从SQL 2000升级到SQL 2008 R2.我已经完成了我们的生产数据库的备份,并将其恢复为我们的新的开发服务器. 我已经在开发服务器上创建了一个登录名,这个镜像映射了我在生产服务器上使用的登录,但是我无法将其映射到数据库中的“dbo”用户.当
我最近将我的开发环境从SQL 2000升级到SQL 2008 R2.我已经完成了我们的生产数据库的备份,并将其恢复为我们的新的开发服务器.

我已经在开发服务器上创建了一个登录名,这个镜像映射了我在生产服务器上使用的登录,但是我无法将其映射到数据库中的“dbo”用户.当我在“用户映射”中编辑登录的属性时,我用’dbo’替换用户,并且我收到以下错误:

TITLE: Microsoft SQL Server Management Studio Create failed for User
‘dbo’. (Microsoft.SqlServer.Smo) An exception occurred while
executing a Transact-SQL statement or batch.
(Microsoft.SqlServer.ConnectionInfo) User,group,or role ‘dbo’
already exists in the current database. (Microsoft SQL Server,Error:
15023)

那么如何将登录映射到现有用户?

解决方法

要使用户与登录进行协调,可以使用系统存储过程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

这必须运行您需要用户修复的数据库的上下文.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读