百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

APEX应用数据安全访问方案 / Oracle VPD

mhr18 2024-10-16 10:03 21 浏览 0 评论

VPD介绍

Oracle VPD(Virtual Private Database,虚拟私有数据库)是一个Oracle数据库的安全特性,它允许数据库管理员定义和实施细粒度的数据访问控制策略。通过使用VPD,管理员可以定义行级别和列级别的安全策略,以控制用户对数据库中数据的访问。

Oracle VPD可以为不同的用户提供不同的数据视图,以控制对敏感数据的访问,具有如下优势:

? 数据安全性:VPD可以控制不同用户对数据库中数据的访问权限,从而保证数据的安全性。只有被授权的用户可以访问数据,从而减少了因非授权用户访问敏感数据而导致的数据泄露或滥用的风险。

? 简化开发:VPD可以让开发人员在不改变应用程序代码的情况下实现数据权限控制。这样可以节省开发时间和开发成本,并且更加灵活地调整数据权限。

? 提高性能:VPD在数据库查询中应用了一些优化技术,例如谓词下推,可以在保证数据安全性的前提下提高查询性能。

? 简化管理:VPD可以为管理员提供一种集中管理和控制数据库访问权限的方式。管理员可以通过配置VPD规则来实现数据权限控制,而无需为每个用户单独配置访问权限。

? 降低风险:VPD可以控制用户对敏感数据的访问权限,从而降低了数据泄露和滥用的风险。此外,VPD还可以记录数据库访问日志,帮助管理员跟踪数据库访问情况并发现潜在的安全威胁。

权限控制简介

权限控制主要包括两方面:功能控制和数据控制。APEX可以很方便的实现各种粒度的功能控制,从功能模块、菜单、页面到单个输入框、按钮等都可以通过配置的方式很方便的实现;本文将重点讲述在APEX应用中如何结合Oracle数据库的VPD特性方便灵活地实现数据层面的权限控制。

VPD策略配置

实例策略描述

作为实例,我们将实现一个这样的策略:

【登录用户能查看他自己以及下属(包括下属的下属…)所有销售代表的订单数据,不能查看同一级其他员工的数据或上级的其它数据】

这里涉及到两个表:

? 员工表:定义了员工登录应用的信息,以及员工的层级关系

OEHR_EMPLOYEES


EMPLOYEE_ID员工ID

EMAIL作为APEX应用的登录名

MANAGER_ID员工的上级经理

… …


? 订单表:定义了与员工相关联的订单

OEHR_ORDERS


ORDER_ID订单号

SALES_REP_ID销售代表,对应员工表中的EMPLOYEE_ID

… …


要实现这样一个策略,我们的目标其实就是 从OEHR_ORDERS表中找到所有属于自己以及下属(包括下属的下属…)的所有订单,也就类似:

Select * from OEHR_ORDERS where SALES_REP_ID IN (‘自己’, ‘下属’, ‘下属的下属…’);

策略实现

策略以Function的方式实现,灵活方便。请查看以下样例及注解。这只是一个样例实现,实际场景中可以根据具体情况定义逻辑。

create or replace function "F_POLICY_ORDERS_BY_MANAGER" (
  schema in VARCHAR2,
  tab in VARCHAR2
) return VARCHAR2
is
  v_login     varchar2(256);
  v_conn_user varchar2(256);
  predicate   varchar2(400);
begin
  -- 从APEX会话中获取当前登录用户.
  v_login := V('APP_USER');

  -- 从数据库连接会话中获取当前数据库用户
  v_conn_user := SYS_CONTEXT('USERENV','SESSION_USER'); 

  if v_login IN ('HYSUN') OR v_conn_user IN ('SYS') then 
    -- 允许APEX工作区管理员(这里是HYSUN)和SYS DBA能够查看所有数据
    predicate := '1=1';
  else
    -- 除了APEX工作区管理员和SYS DBA,限制其它所有人只能查看自己及下属的订单数据
    predicate := 'SALES_REP_ID IN (
      SELECT employee_id
      FROM OEHR_EMPLOYEES
      START WITH EMAIL=''' || v_login || '''
      CONNECT BY PRIOR employee_id = manager_id
    )';
  end if;
 
  return predicate;
 exception 
    when no_data_found then 
      null;
end;
/

策略绑定

将策略绑定到具体的数据库对象上去。数据库对象可以是表,也可以是视图,同义词。

执行策略绑定需要有DBMS_RLS包的执行权限,如果报没权限错误,需要先授予权限:

GRANT EXECUTE ON DBMS_RLS TO <db_user>;
BEGIN
 DBMS_RLS.ADD_POLICY(
  object_schema   => 'poc',
  object_name     => 'OEHR_ORDERS',
  policy_name     => 'query_orders_by_manager',
  policy_function => 'F_POLICY_ORDERS_BY_MANAGER',
  statement_types => 'SELECT');
END;
/

以上”statement_types”指定了在查询语句上应用策略,同样,我们也可以指定为”update”, “delete”等情形。


简单演示

订单查询页的报表SQL句没加任何的where条件,如下:



然后用公司最高领导人SKING登录,能看到所有订单(70条):



再用一个经理 KPARTNER登录,他只能看到属于他及下属的订单(38条):



说明我们定义的策略根据登录用户动态的应用到了数据层面,从而有效控制了数据的安全访问。


总结

Oracle VPD能细粒度的控制数据的安全访问,能够达到行级别。其实通过简单的增加指定列的策略参数,还能达到列级别的控制(这里没作演示,可以查看具体资料)。

通过 VPD安全控制的对象,不管用什么渠道访问(sqlplus, sql developer, apex, 其它sql客户端…),得到的结果都是一样,从而避免了 “应用层面作了数据安全控制,但如果绕过应用层面用其它客户端访问数据,就没有数据安全控制“ 的情况,有效增加了数据的安全性。


更多参考资料

https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/using-oracle-vpd-to-control-data-access.html

相关推荐

【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报

近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...

医院信息系统突发应急演练记录(医院信息化应急演练)

信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...

一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序

简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...

docker搭建系统环境(docker搭建centos)

Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...

基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)

SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...

Java21杀手级新特性!3行代码性能翻倍

导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...

一文读懂JDK21的虚拟线程(java虚拟线程)

概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...

效率!MacOS下超级好用的Linux虚拟工具:Lima

对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...

所谓SaaS(所谓三维目标一般都应包括)

2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...

ORA-00600 「25027」 「x」报错(报错0xc0000001)

问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...

安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

编译安卓源码(编译安卓源码 电脑配置)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“

2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...

Syslog 日志分析与异常检测技巧(syslog发送日志配置)

系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...

从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)

数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...

取消回复欢迎 发表评论: