oracle策略,oracle策略POLICY学习-Oracle

oracle策略POLICY学习

01

-- 1、创建测试表

02

create table TEST_POLICY

03

(

04

USERNAME VARCHAR2(10),

05

PASSWORD NUMBER(10)

06

);

07

insert into t_policy values('a',30);

08

insert into t_policy values('b',20);

09

insert into t_policy values('c',40);

10

commit;

11

--2、创建策略约束函数,表只可输入密码为40的用户,其他用户将被删除

12

CREATE OR REPLACE Function Fn_GetPolicy(P_Schema in varchar2,

13

P_Object in varchar2)

14

return varchar2 is

15

L_PREDICATE VARCHAR2(1000) := '';

16

Begin

17

L_PREDICATE := 'password=40';

18

Return L_PREDICATE;

19

end Fn_GetPolicy;

20

--3、创建策略

21

declare

22

Begin

23

Dbms_Rls.Add_Policy(Object_Schema => 'SCOTT', --数据表(或视图)所在的Schema名称

24

Object_Name => 'TEST_Policy', --数据表(或视图)的名称

25

Policy_Name => 'T_TestPolicy', --POLICY的名称,主要用于将来对Policy的管理

26

Function_Schema => 'SCOTT', --返回Where子句的函数所在Schema名称

27

Policy_Function => 'Fn_GetPolicy', --返回Where子句的函数名称

28

Statement_Types => 'Select,Insert,Update,Delete', --要使用该Policy的DML类型,如'Select,Insert,Update,Delete'

29

Update_Check => True, --仅适用于Statement_Type为'Insert,Update',值为'True'或'False'

30

Enable => True --是否启用,值为'True'或'False'

31

);

32

end;

33

--注:如果Update_Check设为'True',则用户插入的值不符合Policy_Function返回条件时,该DML执行返回错误信息。

34

--现在就可以工作了: select * from t_policy; 看看结果怎样, 是不是少了password<>40的数据了.

35

--4、查看当前用户的策略

36

SELECT * FROM USER_POLICIES;

37

--5、删除策略

38

DECLARE

39

BEGIN

40

Dbms_Rls.drop_policy('SCOTT', --要删除的Policy所在的Schema

41

'TEST_Policy', --要删除Policy的数据表(或视图)名称

42

'T_TESTPOLICY' --要删除的Policy名称

43

);

44

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值