首页 > 代码库 > VPD
VPD
虚拟专用数据库 (VPD) 提供了角色和视图无法提供的行级访问控制。
将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。
对带安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数。策略函数返回一个访问条件(WHERE 子句),即谓词。应用程序将它附加到用户的 SQL 语句,从而动态修改用户的数据访问权限。
eg1:
--管理员用户进行授权
grant execute on dbms_rls to scott;
--创建测试表
create table t (id number);
insert into t values (1);
insert into t values (2);
insert into t values (3);
insert into t values (4);
commit;
--创建策略函数(返回值作为where条件 ,同下:select * from t where id<=3 )
CREATE OR REPLACE FUNCTION f_limited_query_t (s_schema IN VARCHAR2, s_object IN VARCHAR2) RETURN VARCHAR2
AS
BEGIN
RETURN ‘ID <= 3‘;
END;
--将策略函数与表相关联
BEGIN
DBMS_RLS.add_policy (object_schema => ‘SCOTT‘, -- 数据表(或视图)所在的Schema名称
object_name => ‘T‘, -- 数据表(或视图)的名称
policy_name => ‘POLICY_LIMITED_QUERY_T‘, -- 政策名称
function_schema => ‘SCOTT‘, --返回Where子句的函数所在Schema名称
policy_function => ‘F_LIMITED_QUERY_T‘); --返回Where子句的函数名称
END;
--测试
分别用管理员和SCOTT账户登录查询:
select * from scott.t;
--查询策略
SELECT * FROM User_Policies
--删除策略
BEGIN
DBMS_RLS.drop_policy (object_schema => ‘SCOTT‘,
object_name => ‘T‘,
policy_name => ‘POLICY_LIMITED_QUERY_T‘);
END;
--再测试
分别用管理员和SCOTT账户登录查询:
select * from scott.t;