有A 和 B两个DB 其中 A中有 视图 view_test  定义为:SELECT * FROM A.dbo.tbl_test
tbl_test为表,且在A数据库
问题:需要创建一个登录帐号 只能有 view_test的Select权限,无访问和操作 A.dbo.tbl_test的权限之前设置过,肯定有办法设置,具体方法我忘记了。!!貌似是靠权限映射之类的方法

解决方案 »

  1.   

    你对指定账号使用
    GRANT select  ON OBJECT::架构名.试图名 TO 账号
      

  2.   

    先把这个账号设为public权限。2005的public不具有查看定义的权限,应该连执行都没有了,但是我没装,不清楚。如果其他版本public有执行权限,那么先deny掉。
      

  3.   

    GRANT select  ON OBJECT::dbo.view_test TO (登录名) ??
    需要创建架构吗?还是用DBO?
    DBO的话貌似没用还是报拒绝了对对象 'tbl_test' (数据库 'B',架构 'dbo')的 SELECT 权限。补充一下tbl_test是在B库。。上面写错了。
      

  4.   

    我还是没有听明白我是纯后台的连接,所以不牵涉到程序与创建的架构。。都是默认DBO,
    还是无法不开放tbl_test的SELECT权限否则无法查询view_test。
      

  5.   

    额但是登录后的数据库列表中会显示所有的数据库而且知道表名就能SELECT。因为最终设置的视图我不希望能让他看到表中的所有字段 只希望显示部分。
      

  6.   

    这是在折腾啥呢? A库里的表 为啥要在B库里做视图去访问 ,为啥不是在A库里做视图是访问呢?
      

  7.   

    1、SQLServer无法隐藏数据库。
    2、deny这个登录名对表的select。
    3、grant给这个登录名对视图的select权限。试试
      

  8.   


    因为我也不想给对方知道我的DB名称而且。实际上我的视图由2个DB的 12张表组成。
      

  9.   


    问题是为了视图。是有权限SELECT表的啊。。知道表名能查我表里的所有数据啊。
      

  10.   

    视图 是有权限select表? 这是谁告诉你的? 
      

  11.   


    那如果我视图中引用了tbl_1的表。。那么我登录的帐号是否需要有对tbl_1的SELECT权限?
      

  12.   

    不需要 只需要对视图分select权限就可以了 ,当然这个前提是基表和视图在同一库中。
      

  13.   

    在每个库中创建自己表的视图 ,然后如果要在其他库中用此视图 就在其他库中引用这个视图再创建一个新的视图。这样就无需基表的select 。 A基表(无需select)-->A视图(select)-->B视图(select)  这样就可以跨库隐藏基表。