请问怎么在oracle表中加如行的权限,不同的用户访问该表不同的行?最好有详细的例子

解决方案 »

  1.   

    我觉得这个应该是数据库设计的内容,而不是Oracle的设定内容,数据库设计可以针对自身的需求对需要的记录行作分类以达到权限控制的目的,关注中——
      

  2.   

    可以用VPD
    也不是很麻烦,google一下吧。
      

  3.   

    oracle自己带有这样的包,叫Oracle Label Security,你在网上找找。不过好像要单独买的。
      

  4.   

    如果是使用视图实现,可以这样做
    --以用户A登录
    create table t_test(
    c1 varchar2(10) not null,
    c2 date default sysdate,
    c3 varchar2(40) default user
    )
    /
    create index idx_test on t_test(c3)
    /
    create view v_test as select c1 from t_test where c3=user
    /
    create public synonym test for v_test
    /
    grant select, insert on test to public
    /
    insert into test values('1111')
    /
    commit
    /
    --以用户B登录
    insert into test values('2222')
    /
    commit
    /
    select * from test
    /
    --查询出来的只有2222。
    --再以用户A登录
    select * from test
    /
    --查询出来的只有1111。
    select * from t_test
    /
    --查询出来的是所有记录。
      

  5.   

    三楼的答案我以为最好,而且VPD是FREE的
      

  6.   

    创建按用户分类的视图虽是个好办法,能起到数据保密性的作用,但并不能完全实现楼主所想要的结果.举个例子: 如果A用户只能访问记录集R1,B用户只能访问记录集R2,但是C用户除了能访问记录集R3之外,他还要能访问R1中的一部份,如果是这样的话,那这个用户字段也就没有什么实质性的意义了.就目前来说,楼主还是使用专用的工具比较好(VPD)
      

  7.   

    还有,楼主问道:"怎么一个表让多个用户拥有?"在ORACLE中,表只能一个拥有者,这个拥有者就是表的创建者,但一个表可以有多个使用者,这些使用者必须已获得了该表上的相应的权限.