当前位置:  数据库>javascript开源软件 iis7站长之家

动手操作Oracle细粒度访问控制(FGAC)一则

    来源: 互联网  发布时间:2017-05-10

    本文导语: 环境: sys@ORCL> select * from v$version where rownum=1;    BANNER  ----------------------------------------------------------------  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod    sys@ORCL> !uname -a  Linux localhost.localdomain 2.6.18-308.el5xen #1 SMP Fri Jan 27 17...

环境:

sys@ORCL> select * from v$version where rownum=1; 
 
BANNER 
---------------------------------------------------------------- 
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 
 
sys@ORCL> !uname -a 
Linux localhost.localdomain 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linux

实验过程如下:

scott@ORCL> create table tvpd (name varchar2(20),salary number(8,2),department_id number(5)); 
 
Table created. 
 
scott@ORCL> insert into tvpd values('张三',5000,10); 
 
1 row created. 
 
scott@ORCL> insert into tvpd values('李四',250,20); 
 
1 row created. 
 
scott@ORCL> commit; 
 
Commit complete. 
 
 
sys@ORCL> grant connect to zhangsan identified by zhangsan; 
 
Grant succeeded. 
 
sys@ORCL> grant select on scott.tvpd to zhangsan; 
 
Grant succeeded. 
 
sys@ORCL> grant connect to lisi identified by lisi; 
 
Grant succeeded. 
 
sys@ORCL> grant select on scott.tvpd to lisi; 
 
Grant succeeded. 
 
sys@ORCL> conn zhangsan/zhangsan 
Connected. 
zhangsan@ORCL> select * from scott.tvpd; 
 
NAME                    SALARY DEPARTMENT_ID 
-------------------- ---------- ------------- 
张三                      5000            10 
李四                        250            20 
 
zhangsan@ORCL> conn scott/tiger 
Connected. 
scott@ORCL> create or replace function func_vpd 
(owner varchar2,objname varchar2) 
return varchar2 
is 
  v_where_clause varchar2(2000); 
begin 
  v_where_clause :='name=initcap(sys_context(''userenv'',''session_user''))'; 
  return v_where_clause; 
end;  2    3    4    5    6    7    8    9   
 10  / 
 
Function created. 
 
scott@ORCL> conn / as sysdba 
Connected. 
sys@ORCL> select * from dba_policies where object_owner='SCOTT'; 
 
no rows selected 
 
sys@ORCL> BEGIN 
  dbms_rls.add_policy(object_schema => 'SCOTT', 
  object_name => 'TVPD', 
  policy_name => 'scott_policy123', 
  function_schema =>'SCOTT', 
  policy_function => 'func_vpd', 
  statement_types  =>'select', 
  sec_relevant_cols=>'salary'); 
END;  2    3    4    5    6    7    8    9   
 10  / 
 
PL/SQL procedure successfully completed. 
 
sys@ORCL> select * from dba_policies where object_owner='SCOTT'; 
 
OBJECT_OWNER                  OBJECT_NAME                    POLICY_GROUP 
------------------------------ ------------------------------ ------------------------------ 
POLICY_NAME                    PF_OWNER                      PACKAGE 
------------------------------ ------------------------------ ------------------------------ 
FUNCTION                      SEL INS UPD DEL IDX CHK ENA STA POLICY_TYPE              LON 
------------------------------ --- --- --- --- --- --- --- --- ------------------------ --- 
SCOTT                          TVPD                          SYS_DEFAULT 
SCOTT_POLICY123                SCOTT 
FUNC_VPD                      YES NO  NO  NO  NO  NO  YES NO  DYNAMIC                  NO 
scott@ORCL> conn zhangsan/zhangsan 
Connected. 
zhangsan@ORCL> select * from scott.tvpd; 
 
no rows selected 
 
zhangsan@ORCL> select name from scott.tvpd; 
 
NAME 
-------------------- 
张三 
李四 

在本测试中,我们只是对列salary作精细化控制,如果不查工资还是可以全部看到的,正如上面所示。

但是请注意,sys仍然不受影响,因为他有个权限叫“exempt access policy”,这个的性质和sysdba一样。

zhangsan@ORCL> conn / as sysdba 
Connected. 
sys@ORCL> grant exempt access policy to zhangsan; 
 
Grant succeeded. 
 
sys@ORCL> conn zhangsan/zhangsan 
Connected. 
zhangsan@ORCL> select * from scott.tvpd; 
 
NAME                    SALARY DEPARTMENT_ID 
-------------------- ---------- ------------- 
张三                      5000            10 
李四                        250            20 

同时,受策略保护的表若被drop是不进recyclebin,也就无法用flashback ... to before drop。

zhangsan@ORCL> conn scott/tiger 
Connected. 
scott@ORCL> show recyclebin 
scott@ORCL> drop table tvpd; 
 
Table dropped. 
 
scott@ORCL> show recyclebin 
scott@ORCL> flashback table tvpd to before drop; 
flashback table tvpd to before drop 

ERROR at line 1: 
ORA-38305: object not in RECYCLE BIN 


    
 
 

您可能感兴趣的文章:

  • 自己动手写操作系统 光盘绝对扇区读写
  • 自己动手写操作系统 实践疑问
  • 看过“自己动手写操作系统”朋友请进
  • 最近在看《自己动手写操作系统》,有同路者,大家结伴前行吧。请谁创建一个QQ群吧,100分奖励
  • 关于自己动手写操作系统的一点疑问
  • 请问谁能分析下《自己动手写操作系统》堆栈使用
  • 《自己动手写操作系统》开篇杂问
  • 关于自己动手写操作系统里面的问题
  • 关于《自己动手写操作系统》中的一个疑惑
  • 近来在看<自己动手写操作系统>
  • 《自己动手写操作系统》第三章第一个程序的问题。bochs加载后出现no bootable device.我在网上查了下,说是因为第一扇区最后2字节
  • 运行《自己动手写操作系统》中例子时的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎样动手做java程序
  • 高人们.动手点两下、(java)
  • 想通过自己动手学习Linux网络编程,做一个什么比较好呢?望有经验的高手指点~~
  • 升星散分!!!抢分的快动手!
  • 利用php下载xls文件(自己动手写的)
  • 自己动手做一个迷你 Linux 系统,问题多多(1)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,