`

采用oracle的dbms_rls包实现数据访问控制

阅读更多

在大部份系统中,权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如:某某人可以进入某个控制,仓库不充许查看有关部门的字段等等)
  但在某些系统中,权限控制又必须定义到数据行访问权限的控制,此需求一般出现在同一系统,不同的相对独立机构使用的情况。(如:集团下属多个子公司,所有子公司使用同一套数据表,但不同子公司的数据相对隔离), 绝大多数人会选择在View加上Where子句来进行数据隔离。此方法编码工作量大、系统适应用户管理体系的弹性空间较小,一旦权限逻辑发生变动,就可能需要修改权限体系,导致所有的View都必须修改。
  本文探讨的使用Oracle提供的Policy管理方法来实现数据行的隔离
注意:这里的policy是在9i上测试,8ipolicy是不同9i,但是原理是一样的.

 

(1)建立测试数据表(t_policy):

CREATE TABLE T_POLICY
(
  T1  VARCHAR2(10 BYTE),
  T2  NUMBER(10)
);

insert into t_policy values('a',10);
insert into t_policy values('b',20);
insert into t_policy values('c',30);
commit;

 

(2)建立测试policy的函数:

CREATE OR REPLACE function Fn_GetPolicy(P_Schema In Varchar2,P_Object In Varchar2) return varchar2 is
  Result varchar2(1000);
begin
  Result:='t2 not in (10)';
  return(Result);
end Fn_GetPolicy;
/


(3)加入policy:

declare
Begin
Dbms_Rls.Add_Policy(
Object_Schema =>'niegc',  --
数据表(或视图)所在的Schema名称
Object_Name =>'T_Policy', --
数据表(或视图)的名称
Policy_Name =>'T_TestPolicy', --POLICY
的名称,主要用于将来对Policy的管理
Function_Schema =>'NIEGC',  --
返回Where子句的函数所在Schema名称
Policy_Function =>'Fn_GetPolicy', --
返回Where子句的函数名称
Statement_Types =>'Select,Insert,Update,Delete', --
要使用该PolicyDML类型,如'Select,Insert,Update,Delete'
Update_Check =>True, --
仅适用于Statement_Type'Insert,Update',值为'True''False'
Enable =>True    --
是否启用,值为'True''False'
);
end;


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

现在就可以工作了:
select * from t_policy;
看看结果怎样, 是不是少了t2=10这项了.

 

 

(4)删除policy

declare
begin
 dbms_rls.drop_policy('niegc','T_POLICY','T_TESTPOLICY');
end;

 

 

(5)设置policy的状态
declare
begin
 dbms_rls.enable_policy('niegc','t_policy','t_testpolicy',false);
end;

 

 

(6)查看policy可以通过user_policies这个表看到.

 

 

分享到:
评论

相关推荐

    Oracle系统包详细使用方法

    dbms_rls(Row-Level Security)实现行级安全,用于限制用户对特定行的访问。dbms_ddl包处理DDL语句,如创建、修改或删除数据库对象。dbms_shared_pool管理共享池,存储解析过的PL/SQL代码和数据字典信息。dbms_...

    Oracle PL/SQL常用47个工具包

    21. **DBMS_RLS**: 实现行级安全性,控制用户对特定行的访问。 22. **DBMS_AQ**: 队列服务,支持发布/订阅消息模型,实现异步处理。 23. **DBMS_XSL_PROCESSOR**: 处理XML文档,转换XSLT样式表。 24. **DBMS_...

    oracle子程序和程序包

    2. **安全性**:通过权限控制,可以限制对数据的直接访问,只允许通过存储过程进行操作。 3. **性能提升**:预编译的代码在执行时比解释执行的SQL更快。 4. **减少网络流量**:一次调用存储过程,可以执行多个SQL...

    Oracle内置包的使用方法.rar

    10. **DBMS_RLS**: 用于实现行级安全(Row-Level Security),通过定义访问策略限制用户对数据的访问。`DBMS_RLS.ADD_POLICY`添加访问策略,`DBMS_RLS.DROP_POLICY`删除策略。 11. **DBMS_REDEFINITION**: 用于在线...

    Oralce11g数据库常见内置程序包

    2. **DBMS_RLS**:实现行级安全性控制。 3. **DBMS_DATA_SAFE**:提供数据安全性评估和管理功能。 4. **DBMS_CRYPTO**:加密和解密数据。 5. **DBMS_PDB**:多租户环境中数据库容器(PDB)的管理。 #### 六、特定于...

    DM7_System_Packages.pdf

    DBMS_JOB包允许用户安排Oracle数据库中的作业。用户可以提交、延迟、重新提交、删除或修改作业。这对于定期执行任务,如数据清洗、备份等十分有用。 #### DBMS_LOCK DBMS_LOCK包提供了数据库锁定相关的方法,包括...

    oracle 权限控制

    本文档主要探讨了如何在Oracle环境中实施权限控制,包括对历史SQL语句的保存、登录IP地址的限制以及通过DBMS_RLS包实现细粒度的访问控制。 1. **保存和备份历史SQL语句** 为了监控和审计用户对数据库的访问,可以...

    用Oracle 10g列值掩码技术隐藏敏感数据

    这意味着 Oracle 可以根据用户的上下文背景和权限来控制对数据的访问。 2. PL/SQL 策略函数:PL/SQL 策略函数可以检查当前用户的上下文背景并添加查询中 WHERE 语句的条件(断言)。这样,用户或者应用可以根据需要...

    关于采用Oralce行级安全策略解决应用系统数据权限的论述

    通过利用Oracle数据库提供的Policy对象和相关的DBMS_RLS包功能,可以在不修改应用程序代码的情况下灵活地调整数据访问规则。 #### 二、Oracle行级安全策略概述 **Oracle行级安全策略**(Row Level Security)是一种...

    Oracle中虚拟私有数据库的安全保护方式.pdf

    VPD允许根据用户的权限控制对数据行的访问,使得不同级别的用户只能看到他们被授权的数据子集。这种透明的保护方式确保了数据的安全性,同时避免了用户绕过安全措施。 行级安全,即Row-Level Security (RLS),是VPD...

    oracle精细访问控制(初级)

    最后,通过 `dbms_rls` 包实现了对表 `EMP` 的访问策略的添加与删除。 1. **添加策略** - 对于 SELECT 操作,添加了一个名为 `select_policy` 的策略,指定了策略函数为 `emp_security.select_Imt`,只允许执行 ...

    ORACLE中一个基于角色访问控制的VPD设计方案.pdf

    【Oracle中的基于角色访问控制(Role-Based Access Control, RBAC)与VPD技术】 Oracle数据库是一种广泛使用的大型关系型数据库管理系统,它提供了多种安全机制来保护数据,包括基于角色的访问控制(RBAC)和虚拟...

    ORACLE_SQL性能优化(这个很全的)

    8. **SQL重写**:通过DBMS_RLS、DBMS_REWRITE等包,可以实现SQL语句的动态或静态重写,以提高性能或满足安全需求。 9. **内存管理**:PGA(程序全局区)和SGA(系统全局区)的大小调整对性能有很大影响。理解如何...

    Oracle_11gR2_concepts.zip

    8. **并发控制**:Oracle使用多版本并发控制(MVCC)和锁定机制来处理多个用户同时访问同一数据的情况,避免了数据的不一致。 9. **备份与恢复**:Oracle提供了多种备份策略,如物理备份、逻辑备份、RMAN(恢复管理...

    精通oracle 10g的管理

    学习如何使用DBMS_RLS和DBMS_ACL进行行级安全和网络访问控制。 8. **数据迁移**:了解数据泵(expdp和impdp)工具进行数据导出导入,以及使用DBMS_METADATA进行元数据的导出和导入。 9. **高可用性**:Oracle 10g...

    oracle系统自带角色说明

    EXECUTE_CATALOG_ROLE角色提供了执行某些系统包(如`DBMS_FGA`和`DBMS_RLS`)的权限。这些系统包主要用于实现细粒度审计和其他安全功能。 #### 6. SELECT_CATALOG_ROLE SELECT_CATALOG_ROLE角色则包含了对多种系统...

    oracle DBA宝典和教程.rar

    Oracle DBA,全称Oracle Database Administrator,是Oracle数据库管理员的简称,主要负责Oracle数据库系统的安装、配置、性能优化、安全管理和故障排除等工作。本压缩包“oracle DBA宝典和教程”显然是一份全面的...

Global site tag (gtag.js) - Google Analytics