孤立用户和对象名无效问题的解决方法
A. 显示登录映射的当前用户的报告
以下示例生成当前数据库中未链接到任何登录名的用户及其安全标识符 (SID) 的报告。
EXEC sp_change_users_login 'Report';
B. 将数据库用户映射到新的 SQL Server 登录名
在以下示例中,数据库用户与新的 SQL Server 登录名关联。数据库用户 MB-Sales
首先映射到另一个登录名,然后重新映射到登录名 MaryB
。
--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. 自动将用户映射到登录名(必要时新建一个登录名)
以下示例显示如何使用 Auto_Fix
将现有用户映射到同名的登录名,以及如何在不存在登录名 Mary
的情况下,创建密码为 B3r12-3x$098f6
的 SQL Server 登录名 Mary
。
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO
------------结束--------------------
一、孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的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中
如果没有建立testuser的登录用户,还可以用
sp_change_users_login 'Auto_Fix', 'testuser', NULL, 'testpass'
用法3:
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
将用户名映射为指定的登录名。
二、对象名'xxxx’无效的问题
这里可能会有人遇到对象名 ‘xxxx’无效的问题。系统表却不会产生这个问题,而用户表还要加上用户名,然后是表明才能访问,比如select * from author,会说对象名 author 无效,而用select * from test.author就可以访问,这个是用户首选身份的问题。
解决很简单,就是察看test登录用户是否具有dba的权限或者系统管理的权限,有的话去掉就行了。
因为如果用户有dba身份,那么它登陆后的默认表空间是dbo的系统表空间,所以去掉了之后,就会以正常的test表空间访问数据表了
posted on 2012-07-08 12:13
Ke 阅读(1129)
评论(0) 编辑 收藏 所属分类:
sql server