问题描述
:
从别处
copy
来一个数据库
DB
,附加后,对象的所有者不是
Admini
,每次查询时必需写
select * from Admini.***
才能查到。有什么方法不用前面的
Admini
吗(在不修改所有者的前提下)?注:
已经在“安全性
-
登陆”下面也新建了一个
Admini
用户,默认数据库设置为
DB
,权限足够,但在查询分析器下用
Admini
登陆,查询时还是要写
Admini
前缀,否则就提示对象名无效
问题解决方法:
如果是用的是
sql 2000
的话,用某个用户登录
,
不指定所有者的话
,
访问对象的时候
,
默认的所有者就是当前登录用户
如果是
2005
的话
,
在数据的安全性
--
用户
--
右键你的用户
admin--
属性
,
看看默认构架是什么
,
这个默认架构决定当你访问对象时
,
不指定所有者的话
,
使用那个所有者
(sql 2005
中
, owner
变成构架了
)
会导致与上面的说法不匹配的异常情况:
如果在数据库
DB
中,
Admini
是孤立用户的话,则情况会与上面描述的有出入(附加或者恢复数据库很容易出现孤立用户),即引用对象时必须指定所有者。孤立用户的表现是:只能创建
Admini
登录
,
并通过服务器角色给其分配对
DB
的权限,或者是在
DB
中建立名称不是
Admini
的用户与登录关联。
要查询
DB
中的孤立用户情况,执行下面的语句:
USE
DB
GO
EXEC
sp_change_users_login 'Report'
解决孤立用户的方法:
解决这种异常只要解决掉孤立用户,在确定了
Admini
是孤立用户后,可以执行下面的语句来解决:
USE
DB
GO
--
修复孤立用户
EXEC
sp_change_users_login 'Auto_Fix', 'Admin', NULL, '
密码
'
;
--
这个密码是指
,
如果没有事先建立
admin
这个登录的话
, sql
自动创建登录时
,
为该登录分配的密码
--
授予在
DB
中的相关权限
EXEC
sp_addrolemember 'db_owner', 'Admin'