SQL 2005迁移数据库后出现错误15023:当前数据库中已存在用户或角色

     在给客户安装sql server2005后附加数据库,然后创建同名登录用户后出现“错误15023:当前数据库中已存在用户或角色”,经分析是由于附加的数据库中用户已经存在,但并没有与登录名关联,就是所谓的“孤立用户”。下面就有关概念解释一下

      登录名:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中
      用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。
      SQLSERVER把登录名与用户名的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库。

      一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。

     将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。这种情况被称为存在“孤立用户”。此时是不能通过新建登录或者是对同名登录授予对应数据库的“用户”权限来解决登录问题,因为SQL Server会报出“错误15023:当前数据库中已存在用户或角色”,为了解决这个问题,需要调用系统存储过程

use dims
go
sp_change_users_login 'update_one', 'dims', 'dims'

其中dims为存在孤立用户的数据库,update_one是存储过程的参数,表示只处理一个用户,前一个dims是“用户”,后一个dims是“登录”,以上这个SQL表示将服务器登录“dims”与 dims数据库用户“dims”重新连接起来。这样就可以正常使用数据库了

或者

可以使用

DROP   USER   user_name 删除已经存在的用户后再做处理

你可能感兴趣的:(sql,sql,数据库,server,服务器,存储,sqlserver)