sql孤立用户解决方法

如图,无登录名,所属为孤立帐户

其表现可以为:同名在安全性中存在,但是没存在对某库的访问权限;访库安全性中有用户名,为上图所示。

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

孤立帐户的产生一般是一下两种:
1.将备份的数据库在其它机器上还原从另一个服务器恢复数据库,登录是独立的创建的(不是从其它服务器复制过来的),这个时候创建的就是孤儿用户。
2.重装系统或SQL SERVER之后只还原了用户库

解决方法是使用sp_change_users_login来修复。sp_change_users_login的用法有三种
用法1:
exec sp_change_users_login 'REPORT'
列出当前数据库的孤立用户
用法2:
exec sp_change_users_login 'AUTO_FIX','用户名'
可以自动将用户名所对应的同名登录添加到syslogins中
用法3:
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
将用户名映射为指定的登录名。
使用ALTER USER WITH LOGIN修复孤儿登录


/*
ALTER USER userName  
     WITH <set_item> [ ,...n ]

<set_item> ::= 
     NAME = newUserName 
     | DEFAULT_SCHEMA = schemaName
     | LOGIN = loginName

参数

userName

指定在此数据库中用于识别该用户的名称。

LOGIN = loginName

通过将用户的安全标识符 (SID) 更改为另一个登录名的 SID,使用户重新映射到该登录名。

NAME = newUserName

指定此用户的新名称。newUserName 不能已存在于当前数据库中。

DEFAULT_SCHEMA = schemaName

指定服务器在解析此用户的对象名时将搜索的第一个架构。


*/
从SQL Server 2005 SP2开始,T-SQL的ALTER USER命令就包含了WITH LOGIN子句,这个子句通过修改数据库用户的SID为服务器登录的安全标识符修复孤儿登录,它可以同时修复Windows和SQL Server登录的功能。

转自:http://www.cnblogs.com/shanyou/archive/2008/10/11/1308799.html

原文地址:https://www.cnblogs.com/zerocc/p/2391965.html