我在数据库上新建了一个登陆账户,但在SSMS中连接数据库实例时,却报:拒绝对对象'configurations'(数据库msqlsystemresource',架构'sys')的select权限没有,我已经执行下面的语句了、
GRANT SELECT ON sys.configurations TO public;
GO但还是存在这个问题,新建查询窗口,然后在窗口内连接数据库实例,是可以的。但直接连就不行,当然给这个登陆账户sysadmin服务器角色可以正常连接了,但我需要的是普通登陆账户也可以通过SSMS连接,左侧可以看到数据库资源管理器的各个对象
网上查了查,说是SQL目录树没有权限查看或者什么配置文件类,但都没说怎么解决大家帮帮忙,看怎么解决呢谢谢Resource 数据库库的问题

解决方案 »

  1.   

    Resource数据库是一个特殊的数据库,无法直接访问的.
    参考 http://msdn.microsoft.com/zh-cn/library/ms190940(v=sql.105).aspx
      

  2.   

    我知道是无法访问的,但现在报错就是这个库里的configratiions表或视图没有select权限,所以普通账户不能用ssms直接登录,也就是打不开ssms中的资源管理器,单个查询窗口是可以登录的,这个问题怎么解决啊
      

  3.   

    我记得直接给一个用户pulice就可以看到左边的目录的的
      

  4.   

    普通账户只有有public角色,就可以登录并访问sys.configurations的.错误画面截图来看看? 
      

  5.   

    大小才几十K,jpg 格式应该没问题吧
      

  6.   


    看看这个:--1.建立登录名 ggg
    use master
    goif exists(select * from sys.server_principals 
              where name ='ggg')
       drop login ggg
    gocreate login ggg   
    with password = 'ggg',  
         default_database = [master],  
         check_expiration = off,  
         check_policy = off
    go
    /*
    2.注意这里的ggg是登录名,授予服务器级别的查看定义权限
      这样,你用ggg登录后,可以看到左边的目录树,
      但是当你点击任意用户数据库,比如下面的 wcc数据库,
      就会报错!
    */
    grant view any definition to ggg/*
    3.上面的登录名,那么如果你要查看某个数据库下面的目录树,
      那么必须要创建挂到这个登录名上的,数据库用户名,
      这里是数据库用户 ggg  
    */
    use wcc
    goif exists(select * from sys.database_principals
              where name = 'ggg')
       drop user ggg
    go
     
         
    create user ggg for login ggg
    /*
    4.这里的ggg是数据库用户,
      给这个数据库用户ggg,授予查看数据库wcc中的任何定义信息,
      这个时候,你可以点击wcc数据库左边的加号,展开目录树,
      你可以看到表,视图等等,点击表,你可以看到有很多表*/
    grant view definition on database::wcc to ggg
    /*
    5.需要特别注意的是,上面的权限只能是让你看看定义,
      你说,我能:select * from 某个表
      
      由于没有:
      grant select on 某个表 to ggg
      
      所以会报没有权限的
    */
      

  7.   

    你需要按照你自己的要求,来修改一下代码就可以了:--1.建立登录名 ggg
    use master
    goif exists(select * from sys.server_principals 
              where name ='你的登录名')
       drop login 你的登录名
    gocreate login 你的登录名   
    with password = '你的登录名',  
         default_database = [master],  
         check_expiration = off,  
         check_policy = off
    go
    /*
    3.上面的登录名,那么如果你要查看某个数据库下面的目录树,
      那么必须要创建挂到这个登录名上的,数据库用户名,
      这里是数据库用户 ggg  
    */
    use 你希望登录名能查看定义的数据库
    goif exists(select * from sys.database_principals
              where name = '数据库用户名一般同登录名')
       drop user 数据库用户名一般同登录名
    go
     
         
    create user 数据库用户名一般同登录名 for login 你的登录名
    /*
    4.这里的ggg是数据库用户,
      给这个数据库用户ggg,授予查看数据库wcc中的任何定义信息,
      这个时候,你可以点击wcc数据库左边的加号,展开目录树,
      你可以看到表,视图等等,点击表,你可以看到有很多表*/
    grant view definition on database::你希望登录名能查看定义的数据库 to 数据库用户名
    /*
    5.需要特别注意的是,上面的权限只能是让你看看定义,
      你说,我能:select * from 某个表
      
      由于没有:
      grant select on 某个表 to ggg
      
      所以会报没有权限的
    */