如图,无登录名,所属为孤立帐户
其表现可以为:同名在安全性中存在,但是没存在对某库的访问权限;访库安全性中有用户名,为上图所示。
孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的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