Sql server错误15023:用户或角色已经存在于当前数据库中。
将远程服务器上的数据库备份还原到本地计算机后,当将“用户”与“登录”(用户映射)相关联时,会出现错误:“错误15023:用户或角色已存在于当前数据库中”。
原因:
sql server中“登录”和“用户”的区别在于“登录”用于用户认证,而数据库“用户”账户用于数据库访问和权限验证。登录通过安全标识符(SID)与用户相关联。将数据库还原到另一台服务器时,
数据库包含一组用户和权限,但是可能没有相应的登录,或者与登录相关联的用户可能不是相同的用户。这种情况被称为“孤儿用户”的存在。
此时,通过创建新的登录或授予“用户”对相应数据库的权限以进行同名登录是无法解决登录问题的,因为SQL Server会报告“错误15023:当前数据库中已经存在用户或角色”。
求解:
要解决这个问题,需要调用系统存储过程sp_change_users_login,具体用法如下:
Use northwindgossp _ change _ users _ login' update _ one'' test'' test' where the northwind is the database with isolated users,
Update_one是存储过程的一个参数,表示只处理一个用户,前面的测试是“user”,后面的测试是“login”。
上述SQL意味着将服务器登录“test”与Northwind数据库用户“test”重新连接。所以可以正常使用数据库。