DBMS_RLS
功能描述
Vastbase G100在Oracle兼容模式下支持内置包DBMS_RLS,该内置包包含细粒度的访问控制管理接口,用于实现虚拟专用数据库(VPD)。
注意事项
该功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。
子程序
Vastbase G100支持该内置包的如下函数:
函数 | 描述 |
---|---|
add_policy | 添加VPD策略。通过添加管理策略可针对某个模式schema中的某个对象(包括table、view)添加管理策略。 |
drop_policy | 删除已存在的VPD策略。 |
enable_policy | 禁用VPD策略或启用VPD策略。 |
add_policy
语法格式
dbms_rls.add_policy(
Object_name text,
policy_name text,
policy_function text,
object_schema text DEFAULT NULL::text,
function_schema text DEFAULT NULL::text,
statement_types text DEFAULT 'insert,update,delete,select'::text,
update_check boolean DEFAULT false,
enable boolean DEFAULT true,
sec_relevant_cols text DEFAULT NULL:text
) RETURN VOID
参数说明
Object_name text
对象名称,类型为text。
policy_name
策略名称,类型为text。
policy_function
策略函数名称,类型为text。
Vastbase G100 V2.2 Build 13及以后支持调用package函数。
object_schema
对象模式。类型为text,默认为空。
function_schema
函数模式。类型为text,默认为空。
statement_types
策略作用的语句类型,类型为text,语句使用英文逗号分隔,默认为
insert,update,delete,select
。update_check
是否启动更新检查。类型为boolean,默认为false。
enable
是否启用策略。类型为boolean,默认为true。
sec_relevant_cols
敏感列,敏感列使用英文逗号分隔。类型为text,默认值为空。
1、修改策略参数。
alter system set oracle_vpd_enabled=true;
2、创建schema和搜索路径。
create schema SCOTT_1145109; set search_path=SCOTT_1145109;
3、创建表EG_1145168。
CREATE TABLE EG_1145109( ID NUMBER, NAME VARCHAR2(20), SALARY NUMBER );
4、创建策略存储过程auth_pkg_1145109。
CREATE OR REPLACE PACKAGE auth_pkg_1145109 IS FUNCTION auth_eg(p_schema IN VARCHAR2, p_object IN VARCHAR2) RETURN VARCHAR2; END auth_pkg_1145109; / CREATE OR REPLACE PACKAGE BODY auth_pkg_1145109 IS FUNCTION auth_eg(p_schema IN VARCHAR2, p_object IN VARCHAR2) RETURN VARCHAR2 IS predict VARCHAR(100); BEGIN predict := 'ID > 10'; RETURN predict; -- 只过滤ID>10的行 END; END auth_pkg_1145109; /
5、调用ADD_POLICY应用策略。
SELECT DBMS_RLS.ADD_POLICY(object_schema=>'SCOTT_1145109', object_name=>'EG_1145109', policy_name=>'EG_1145109_POLICY', function_schema=>'SCOTT_1145109', policy_function=>'auth_pkg_1145109.auth_eg', statement_types=>'SELECT,UPDATE,DELETE,INSERT', enable => TRUE);
6、查询DBA_POLICIES检查策略是否已添加。
\x
表示列式显示查询结果。\x SELECT * FROM DBA_POLICIES A WHERE A.POLICY_NAME='EG_1145109_POLICY';
结果返回为如下,表示已添加策略:
Expanded display is on. -[ RECORD 1 ]----+------------------ object_owner | VASTBASE object_namespace | SCOTT_1145109 object_name | EG_1145109 policy_group | SYS_DEFAULT policy_name | EG_1145109_POLICY pf_owner | VASTBASE pf_namespace | SCOTT_1145109 package | AUTH_PKG_1145109 function | AUTH_EG sel | YES ins | YES upd | YES del | YES idx | NO chk_option | NO enable | YES static_policy | NO policy_type | DYNAMIC long_predicate | YES common | NO inherited | NO
7、向EG_1145109表表中插入数据并查询。
INSERT INTO EG_1145109 VALUES(1,'ALPHA',1000); INSERT INTO EG_1145109 VALUES(2,'BETA',2000); INSERT INTO EG_1145109 VALUES(101,'GAMA',3000); INSERT INTO EG_1145109 VALUES(102,'THETA',4000); \x SELECT * FROM EG_1145109;
查询结果显示为如下:
id | name | salary -----+-------+-------- 101 | GAMA | 3000 102 | THETA | 4000 (2 rows)
8、删除策略。
select DBMS_RLS.drop_policy('EG_1145109',policy_name=>'EG_1145109_POLICY',object_schema=>'SCOTT_1145109');
drop_policy
语法格式
dbms_rls.drop_policy( object_name text, policy_name text, object_schema text DEFAULT NULL:text ) RETURN VOID
参数说明
object_name
对象名称,类型为text。
policy_name
策略名称,类型为text。
object_schema
对象模式。类型为text,默认为空。
示例
参见DBMS_RLS.add_policy的示例。
enable_policy
语法格式
dbms_rls.enable_policy( object_name text, policy_name text, enable boolean, object_schema text DEFAULT NULL:text ) RETURN VOID
参数说明
object_name
对象名称,类型为text。
policy_name。
策略名称,类型为text。
enable boolean
是否启用策略,类型为boolean。
object_schema
对象模式。类型为text,默认为空。
示例
参见VPD功能的示例。