SQL用户“xxx”已经存在的解决方法
MSSQL2000迁移数据库或者还原数据库后,新建相同用户名的时候或者指定数据库登录用户时出现错误提示“错误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。。
修复方法:
步骤1:
打开查询分析器,进入对应数据库
use 数据库名
exec sp_change_users_login 'REPORT' //列出当前数据库的孤立用户数
步骤2:
exec sp_change_users_login 'AUTO_FIX','用户名' //自动将用户名所对应的同名登录添加到syslogins中。
如果没有登录名,可以sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassword'
来创建一个登录用户名为test,密码为testpassword的用户与之对应。再执行步骤3。或者在企业管理器的安全性新建一个同名的登录,但是不要赋予它任何数据库的访问权限。
步骤3:
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名' //将用户名映射为指定的登录名。系统就会提示修复了孤立用户,重新启动一下服务就可以了。
运行完以上三个命令,你再试试看,用户就能正常登录了。
解决办法2:删除掉该数据库的用户名,重新创建登录名。
1.打开mssql企业管理器→数据库→展开出问题的数据库如"mydb"→"用户"→在右侧窗口中选择出问题的用户名如:"***"→右击鼠标→删除
2.企业管理器→安全性→登录→在右侧窗口中选择出问题的用户名如:"***"→属性→数据库访问→点选"mydb"→勾选下方的"public"和"db-owner"→确定
哥用的第二种解决办法,点开数据库,在用户里把原来的用户名删除即可,然后自己再重新建一个帐号,赋给权限就可以了。