还原MS SQLServer数据库,新建登录名,给登录名做用户映射,出现下面类似提示
SQLServer 报错:用户、组或角色’XXX’ 在当前数据库中已存在
问题原因
将MS SQLServer数据库恢复到其他服务器时,数据库中已经包含一组用户和权限,但没有相应的登录名。
这种情况被称为存在“孤立用户”。此时是不能通过新建登录或者是对同名登录授予对应数据库的“用户”权限来解决登录问题,SQLServer会报出“错误15023:当前数据库中已存在用户或角色”。
可以把登录名与数据库用户看作两个不同的用户,虽然名字相同,却是两个性质不一样的用户账户。
解决办法
把孤立账户与登录名关联起来
Use [数据库名] go sp_change_users_login 'update_one', '用户名', '登录名'
举例说明
数据库Test,新建登录名u_test,原有孤立用户名u_test
关联孤立用户语句
Use [Test] go sp_change_users_login 'update_one', 'u_test', 'u_test'
补充
MS SQLServer 孤立帐户,是指某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。
孤立帐户的产生原因:
1.将备份的数据库在其它机器上还原;
2.重装系统或SQL SERVER之后只还原了用户库