`
yangfanchao
  • 浏览: 6188 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

使用Oracle VPD实现行级权限

阅读更多
VPD全称Virtual Private Database,这个技术提供了对数据库信息的细粒度访问控制。关于VPD的更多描述性信息可通过Oracle官方文档获得:http://download.oracle.com/docs/cd/B19306_01/network.102/b14266/apdvpoli.htm#i1009600
通过一个具体案例,体验一下VPD带给我们的功能特点。

1.初始化环境
构造表T,其中包含一个字段X。
sec@ora10g> create table t (x number);
sec@ora10g> insert into t values (1);
sec@ora10g> insert into t values (2);
sec@ora10g> insert into t values (10001);
sec@ora10g> insert into t values (10002);
sec@ora10g> commit;
sec@ora10g> select * from t;

         X
----------
         1
         2
     10001
     10002

2.问题场景描述
禁止查询T表中X列值大于10000的数据。

3.实现方法一:使用视图
这种方法可能是大家都很容易想到的,实现起来相对简单。但无法真正做到禁止访问基础表。
sec@ora10g> create view v_t as select * from t where x <=10000;

View created.

sec@ora10g> select * from v_t;

         X
----------
         1
         2

此时如果直接查询基础表t,仍然可以获得说有的数据。
sec@ora10g> select * from t;

         X
----------
         1
         2
     10001
     10002

4.实现方法二:使用VPD
1)创建VPD需要的函数,这里给出的名字是f_limited_query_t。
CREATE OR REPLACE FUNCTION f_limited_query_t (s_schema IN VARCHAR2,
                                              s_object IN VARCHAR2)
   RETURN VARCHAR2
AS
BEGIN
   RETURN 'X <= 10000';
END;
/

Function created.

2)将函数与需要保护的表进行关联
BEGIN
   DBMS_RLS.add_policy (object_schema   => 'SEC',
                        object_name     => 'T',
                        policy_name     => 'POLICY_LIMITED_QUERY_T',
                        function_schema => 'SEC',
                        policy_function => 'F_LIMITED_QUERY_T');
END;
/

PL/SQL procedure successfully completed.

3)验证VPD效果
此时在sec用户下直接查询t表,获得的也仅仅是我们要求的数据范围
sec@ora10g> select * from t;

         X
----------
         1
         2

即便是连接到其他用户依然无法获得sec用户下t表隐藏掉的数据。
sec@ora10g> conn secooler/secooler
Connected.
secooler@ora10g> select * from sec.t;

         X
----------
         1
         2

只有sys用户有权查看到sec用户下t表的全部数据
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> select * from sec.t;

         X
----------
         1
         2
     10001
     10002

4)去掉VPD对数据访问的限制
我们可以使用DBMS_RLS.drop_policy来完成这个任务。
secooler@ora10g> conn sec/sec
Connected.

BEGIN
   DBMS_RLS.drop_policy (object_schema   => 'SEC',
                         object_name     => 'T',
                         policy_name     => 'POLICY_LIMITED_QUERY_T');
END;
/

PL/SQL procedure successfully completed.

此时可获得T表的全部数据
sec@ora10g> select * from t;

         X
----------
         1
         2
     10001
     10002

5.小结
这里给出的是VPD最简单的一种使用方法,在实际应用中需求可能会比较复杂,但通过分析并仔细定制,VPD都可以胜任。
欢迎大家分享关于VPD技术的具体应用案例。
分享到:
评论
2 楼 tomfish88 2012-05-14  
JPA中能使用么
1 楼 月下狼~图腾~ 2011-11-18  
写的不错~

相关推荐

    基于Oracle VPD技术实现系统可配置数据屏蔽.pdf

    Oracle VPD(Virtual Private Database)技术是Oracle数据库提供的一种安全机制,它允许数据库根据用户的上下文信息动态地修改SQL查询,实现数据的行级访问控制。这种技术的主要目的是确保敏感数据的安全,同时简化...

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

    VPD是Oracle数据库提供的一种高级安全特性,用于实现数据的行级安全。VPD允许数据库根据用户的上下文信息动态过滤查询结果,即在用户尝试访问数据时,VPD会附加额外的访问条件,从而实现数据的隔离。这些附加条件...

    关于Oracle的虚拟专有数据库特性探讨

    Oracle8i中引入的Oracle行级安全性特性提供了细粒度的访问控制--细粒度意味着是在行一级上...使用Oracle的VPD功能不仅确保了企业能够构建安全的数据库来执行隐私政策,而且提供了应用程序开发的一个更加可管理的方法。

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

    Oracle中的虚拟私有数据库(Virtual Private Database,VPD)是一种强大的安全机制,它提供了行级安全保护,确保数据的敏感性得到妥善管理。VPD允许根据用户的权限控制对数据行的访问,使得不同级别的用户只能看到...

    oracle-security.rar_Oracle 11G_Oracle Security_oracle_oracle 11

    6. **安全标签和多层安全**:Oracle 11g引入了Secure Application Roles和Virtual Private Database (VPD)等特性,允许基于用户、时间、地点等条件进行访问控制,实现数据的多层隔离。 7. **实时应用监控**:Oracle...

    Oracle虚拟专用数据库的实现及应用.pdf

    5. **安全增强**:VPD 结合了Oracle的其他安全特性,如行级安全性(RLS)和细粒度访问控制(FGAC),提供了更强大的安全层,防止非法访问和数据泄露。 在医院信息管理系统中,VPD 可以确保医生、护士、行政人员等...

    oracle database value

    2. **行级安全性**(Row-Level Security):使用虚拟私有数据库(Virtual Private Database, VPD)策略,可以基于用户的身份或会话属性限制对数据行的访问。这样,即使DBA登录,也只能看到他们有权查看的数据。 3. ...

    Oracle数据库安全解决方案探讨.pdf

    这种方法可以实现行级安全,确保数据隐私。 2. **标签安全(Label Security)**:此特性允许根据数据的敏感程度进行分类和控制,确保只有具备相应安全级别的用户才能访问相应标签的数据。 3. **数据库加密(Database ...

    将Oracle 10g内置的安全特性用于PHP

    除了角色和权限,Oracle还提供了行级和列级的访问控制,如虚拟私有数据库(Virtual Private Database, VPD)和列加密等特性,可以进一步增强数据安全性。VPD允许设置基于行的访问策略,使得不同用户只能看到他们有权...

    oracle9i数据库高级管理

    Oracle9i引入了Fine-Grained Access Control (FGAC) 提供更细致的数据访问控制,以及Virtual Private Database (VPD) 实现基于行级的安全策略。 另外,Oracle9i的并行执行是提升大规模数据处理能力的关键。通过并行...

    Oracle 11g2官方内部资料

    - **精细权限管理**:Oracle 11g2提供精细的权限控制,如行级安全性、列级安全性,以及虚拟私有数据库(VPD)策略。 - **审计功能**:系统审计跟踪数据库活动,为合规性和安全性提供保障。 5. **备份与恢复**: ...

    Oracle 11g教程

    7. **Virtual Private Database (VPD)**:VPD提供了一种行级的安全机制,可以根据用户的访问权限动态过滤数据,增强了数据的安全性。 8. **内置Java虚拟机(Built-in Java VM)**:Oracle 11g内置了Java虚拟机,使得...

    oracle_11gR23

    例如,虚拟私有数据库(Virtual Private Database, VPD)允许根据用户角色或安全策略对数据进行行级访问控制,而透明数据加密(Transparent Data Encryption, TDE)则可以在不改变应用程序的情况下对表空间进行加密...

    Oracle方法

    通过Fine-grained Access Control(FGAC)和Virtual Private Database(VPD),可以实现更高级别的数据安全。 8. **并行执行**:Oracle的并行执行机制将大任务分解为多个子任务,通过并行服务器(PGA和AGG)进行...

    Oracle数据库系统的安全策略.pdf

    在数据库安全机理方面,Oracle支持多种安全机制,如行级和列级的权限控制,以及对象和系统级别的权限管理。此外,Oracle的虚拟私有数据库(VPD)功能允许创建基于用户、时间或其他条件的动态安全策略,进一步细化了...

    有关Oracle中虚拟专用数据库的探讨

    Oracle中的虚拟专用数据库(VPD,Virtual Private Database)是一种强大的行级安全机制,它首次出现在Oracle8i中,被广泛应用于各种行业,如教育软件和金融服务。VPD的核心原理是通过对数据请求的透明修改,根据预...

    oracle 11i 实用大全7

    虚拟私有数据库通过定义行级安全性策略限制用户访问权限,确保只有特定条件下的记录才可被查看或操作,增强了数据访问控制机制。 ### 总结 “Oracle 11i 实用大全第七部分”旨在帮助用户深入了解 Oracle 11i 的核心...

Global site tag (gtag.js) - Google Analytics