如何解决引用对象时,必须加所有者(owner)的问题

问题描述 :
从别处 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'
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值