首页 > 开发 > 综合 > 正文

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

2024-07-21 02:13:51
字体:
来源:转载
供稿:网友
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 问题描述:
    从别处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'
     
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表