SQL 2000数据库进行迁移或者还原时,新建相同用户名或指定数据库登录用户时,会出现错误提示“错误21002:【SQL-DMO】用户XXX已经存在”。
产生错误的原因:
这就是我们通常所说的“孤立用户”,所谓孤立用户,就是某个数据库的账户只有用户名而名优登录名,这样的用户咋用户库的sysusers系统表中存在,而在master数据库的syslogins中没有对应的记录。
我们建立了同名数据库登录用户后,数据库中的表我们照样不能使用,因为sid不同,就是系统登录表和数据用户表中的用户名相同,但是sid字段不同,数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的,数据库靠sid来识别用户。
1、将备份的数据库在其他机器上还原;
2、重装系统或SQL SERVER之后,只还原了用户库,原来的备份还原时保留了原用户的信息,导致了孤立用户。
解决办法1: 使用sp_change_users_login来修复
sp_change_users_login的动作有三种,分别是report、update_one、auto_fix;
a)打开查询分析器,链接该数据库,输入以下语句:
use datebase_name
exec sp_change_users_login 'REPORT' //列出当前数据库的孤立用户
b) exec sp_change_user_login 'AUTO_Fix','test',NULL,'testpassword'
创建一个登录用户名称为test,密码为testpassword的用户与之对应(或者在企业管理器-安全性下,新建一个同名的登录用户,但不要赋予它热河数据库访问权限);
c)exec sp_change_users_login‘UPDATE_ONE’,'用户名',‘登录名’//将用户名映射为指定的登录名,系统会提示修复了孤立用户,重新启动一下服务局可以了。
解决办法2: 删除原数据库用户名,重新创建登录名
a)打开企业管理器-数据库-展开出问题的数据库,如'mydb'-‘用户’-在右侧窗口中选择出问题的用户名-鼠标右键-删除;
b)企业管理器-安全性-登录-在右侧窗口中选择出问题的用户-属性-数据库访问-点选‘mydb’-勾选下方的‘public’和‘db_owner’-确定;