阿水的世界。

标签 数据库 下的文章

05月 07

数据库还原造成的孤立用户没有登陆名的修复办法

这几天给一个网站更换服务器,旧服务器是windows server2008,网站使用的是asp.net开发,使用的数据库是Mssql2008,因为winserver2008已经停止更新了,所以新的服务器安装的是Windows Server 2022 Datacenter系统,数据库安装的是Mssql2012。对应用和数据库进行迁移,数据库还原以后,访问网站时出现了问题,提示无法登陆。

经检查,因为我在旧的服务器上对数据库做的是备份操作,生成的文件在新的服务器上做的是还原数据库操作,这样回复数据库的结果是只将数据库本身还原了,但是系统数据库中没有这个数据库中的用户信息,造成了数据库中的用户成为了孤立用户,系统中没有该用户的登陆名,所以不具备登陆权限。

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。

查到原因后,自己进行了修复尝试,在mssql的“安全性”-“登陆名”下,增加一个和原数据库中的登陆名一致的用户,这个时候就出现了问题,显示已经存在该用户,无法新增,但是经过此操作后在“登陆名”项目下出现了准备新增的用户。经过尝试,仍然无法登陆,并且无法赋上对数据库的各项的权限。

经过搜索,找到了如下的修复方法:

首先将在需要修复的数据库中新建查询,执行下边命令即可:

  1. 列出当前数据库的孤立用户(这步不是必须)

    exec sp_change_users_login 'REPORT'

  2. 将孤立用户所对应的同名登录名添加到syslogins中

    exec sp_change_users_login 'AUTO_FIX','用户名'

  3. 也可以使用这个命令,将用户名映射为指定的登录名

    exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'

这里边的用户名和登陆名应根据实际情况修改。

执行完后,数据库访问就正常了。