回答

收藏

SQL将登录名映射到现有用户

技术问答 技术问答 250 人阅读 | 0 人回复 | 2023-09-14

我最近将开发环境SQL 2000升级到了SQL 2008 R2.我已经完成了生产数据库的备份,并将其还原为新的开发服务器。% g% _9 e% r3 n3 a
我在开发服务器上创建了一个登录名,反映了我在生产服务器上使用的登录名,但无法映射到数据库中。' O/ L9 n% p( V9 a) F0 p
dbo用户。当我在用户映射中编辑登录名的属性时,用户被 取代dbo还有以下错误:4 b2 Z( p5 m" y, p) z( z5 w
标题:用户’dbo’的Microsoft SQL Server Management3 V- E- N( Z! n. t+ C
Studio创建失败。(Microsoft.SqlServer.Smo)执行Transact-, d$ K5 p5 t  V( C5 t4 B
SQL异常发生在语句或批处理中。(Microsoft.SqlServer.ConnectionInfo)用户、组或角色’dbo’它已经存在于当前的数据库中。(Microsoft
9 K0 V* d2 ~- m1 w* B- V4 [SQL Server,错误:15023)
% S7 {/ S  M2 E) {% r
那登录名如何映射到现有用户呢?
  W+ ^- A0 t  ?                                                               
/ C* C6 W/ Q4 S* R) [! T9 i    解决方案:                                                               
- H# ]1 D/ _& V                                                                如果用户与登录名一致,可以使用系统存储过程sp_change_users_login。
2 d3 r% y4 x! v7 j3 |$ dsp_change_users_login [ @Action = ] 'action[ ,[ @UserNamePattern = ] 'user @LoginName = ] 'login @Password = ] 'password' ];例如:
3 u: N2 R/ m. }" T9 ^0 j) EEXEC sp_change_users_login 'Update_One','User123','User123'6 u) V- W+ ~% }" O/ P/ b( @
如果您有许多不同步用户,您可以使用光标拉出所有用户并为他们操作此命令。它不会对不同步用户的操作产生任何不利影响。它将修复所有孤立用户。
; W3 q  m- x8 ?DECLARE @sql NVARCHAR(MAX);DECLARE curSQL CURSORFOR       SELECT   'EXEC sp_change_users_login ''UPDATE_ONE'''''   name   ''''''   name    FROM     sysusers       WHERE    issqluser =              AND name NOT IN ( 'guest','dbo','sys','INFORMATION_SCHEMA' )OPEN curSQLFETCH curSQL INTO @sqlWHILE @@FETCH_STATUS = 0       BEGIN           EXEC (         @sql          FETCH curSQL INTO @sql     ENDCLOSE curSQLDEALLOCATE curSQL这必须在用户需要固定的数据库上下文中运行。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则