暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle VPD实例

原创 章芋文 2013-05-04
1066
1、创建相关表并初始化相关数据
SQL> create table enmo_emp (empno number(8),empname varchar2(50),deptname varchar2(20),empsal number,constraint pk_emp primary key (empno));

Table created.

SQL> desc enmo_emp
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(8)
EMPNAME VARCHAR2(50)
DEPTNAME VARCHAR2(20)
EMPSAL NUMBER

SQL> insert into enmo_emp values(00000001,'Eygle','BOSS',80000);

1 row created.

SQL> insert into enmo_emp values(00000002,'Kamus','BOSS',80000);

1 row created.

SQL> insert into enmo_emp values(00000003,'yangtingkun','BOSS',80000);

1 row created.

SQL> insert into enmo_emp values(00000004,'HongyeDBA','FRESHMAN',8000);

1 row created.

SQL> insert into enmo_emp values(00000005,'songchunfeng','FRESHMAN',8000);

1 row created.

SQL> insert into enmo_emp values(00000006,'Steven','FRESHMAN',8000);

1 row created.

SQL> COMMIT;

SQL> select empname,empsal from enmo_emp where deptname='BOSS';

EMPNAME EMPSAL
-------------------------------------------------- ----------
Eygle 80000
Kamus 80000
yangtingkun 80000

SQL> select empname,empsal from enmo_emp where deptname='FRESHMAN';

EMPNAME EMPSAL
-------------------------------------------------- ----------
HongyeDBA 8000
songchunfeng 8000
Steven 8000

2、创建类似视图
SQL> create view enmo_freshman as select empname,empsal from enmo_emp where deptname='FRESHMAN';

View created.
SQL> create view enmo_boss as SELECT EMPNAME,empsal FROM ENMO_EMP WHERE DEPTNAME='BOSS';

View created.
SQL> select * from enmo_boss;

EMPNAME EMPSAL
-------------------------------------------------- ----------
Eygle 80000
Kamus 80000
yangtingkun 80000

SQL> select * from enmo_freshman;

EMPNAME EMPSAL
-------------------------------------------------- ----------
HongyeDBA 8000
songchunfeng 8000
Steven 8000

3、创建函数
SQL> CREATE OR REPLACE FUNCTION F_ENMO_EMP(V_SCHEMA IN VARCHAR2,V_OBJECT IN VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
RETURN 'deptname=''FRESHMAN'' ';
END;
/

Function created.

4、添加策略
SQL> BEGIN
2 dbms_rls.add_policy ('AWEN','ENMO_EMP','POLICY_ENMO_EMP','AWEN','F_ENMO_EMP');
3 end;
4 /

PL/SQL procedure successfully completed.

5、验证数据
SQL> SELECT EMPNAME,EMPSAL FROM ENMO_EMP;


EMPNAME EMPSAL
-------------------------------------------------- ----------
HongyeDBA 8000
songchunfeng 8000
Steven 8000


SQL> CONN / AS SYSDBA
Connected.
SQL> SELECT EMPNAME,EMPSAL FROM AWEN.ENMO_EMP;


EMPNAME EMPSAL
-------------------------------------------------- ----------
Eygle 80000
Kamus 80000
yangtingkun 80000
HongyeDBA 8000
songchunfeng 8000
Steven 8000

6 rows selected.

6、查看策略
SQL> conn awen/oracle

Connected.
SQL> select object_name from user_policies;

OBJECT_NAME
------------------------------
ENMO_EMP

SQL> desc user_policies;
Name Null? Type
----------------------------------------- -------- ----------------------------
OBJECT_NAME NOT NULL VARCHAR2(30)
POLICY_GROUP NOT NULL VARCHAR2(30)
POLICY_NAME NOT NULL VARCHAR2(30)
PF_OWNER NOT NULL VARCHAR2(30)
PACKAGE VARCHAR2(30)
FUNCTION NOT NULL VARCHAR2(30)
SEL VARCHAR2(3)
INS VARCHAR2(3)
UPD VARCHAR2(3)
DEL VARCHAR2(3)
IDX VARCHAR2(3)
CHK_OPTION VARCHAR2(3)
ENABLE VARCHAR2(3)
STATIC_POLICY VARCHAR2(3)
POLICY_TYPE VARCHAR2(24)
LONG_PREDICATE VARCHAR2(3)

SQL> select OBJECT_NAME,POLICY_GROUP,POLICY_NAME from user_policies;

OBJECT_NAME POLICY_GROUP
------------------------------ ------------------------------
POLICY_NAME
------------------------------
ENMO_EMP SYS_DEFAULT
POLICY_ENMO_EMP

7、删除策略
SQL> exec dbms_rls.drop_grouped_policy('AWEN','ENMO_EMP','SYS_DEFAULT','POLICY_ENMO_EMP');

PL/SQL procedure successfully completed.

SQL> SELECT EMPNAME,EMPSAL FROM ENMO_EMP;

EMPNAME EMPSAL
-------------------------------------------------- ----------
Eygle 80000
Kamus 80000
yangtingkun 80000
HongyeDBA 8000
songchunfeng 8000
Steven 8000

6 rows selected.


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论