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

2021-07-19 22:11徐正雄李思琳雷姣惠李捷波肖文博
电脑知识与技术 2021年13期
关键词:实现应用

徐正雄 李思琳 雷姣惠 李捷波 肖文博

摘要:Oracle数据库的虚拟专用数据库VPD(Virtual Private Database)能从数据库层面对数据库实现细粒度访问控制及安全应用策略实现。本文通过Oracle虚拟专用数据库的实现及应用场景介绍,为数据库管理员提供多途径的数据管理手段,解决前端应用对数据不同访问控制的安全管理及具体需求,提高数据库的安全性及可用性。

关键词:Oracle;虚拟专用数据库;实现;应用

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2021)13-0039-02

Abstract: VPD (virtual private database) of Oracle database can realize fine-grained access control and security application strategy from the database layer. This paper introduces the implementation and application scenarios of Oracle virtual private database, provides database administrators with multi-channel data management means, solves the security management and specific requirements of front-end applications for different data access control, and improves the security and availability of database.

Key words: Oracle, virtual private database, implementation, application

1 概述

Oracle数据库在实际应用中可能会遇到不同级别的数据查询权限划分或不同种类的数据查询需求, Oracle数据库的虚拟专用数据库VPD(Virtual Private Database)能从数据库层面对数据库实现细粒度访问控制及安全应用策略实现,数据库管理员(DBA)可以用少量的VPD策略维护一个较大的数据库,针对不同用户制定不同的访问控制策略,而不必针对不同用户建立不同或单独的数据库,降低系统开销,提高数据库精细化管理及安全访问控制功能,从数据库层面实现数据管理的高可用及高安全。

2 应用场景分析

Oracle数据库管理过程中,某些数据信息涉及保密及特殊要求只能由特定权限的用户进行访问查询及修改,或者同一个数据表内的不同数据,有不同权限用户访问控制需求,用数据库普通用户权限管理功能无法实现。Oracle虚拟专用数据库将服务器实施的细粒度访问控制和安全应用程序上下文结合起来,支持上下文的函数范围一个谓语,即where子句,该子句自动附加到所有的select子句或其他DML语句。换句话,由VPD控制的表、视图、同义词上的select语句将根据where子句返回行的子集,该子集由通过应用程序上下文生效的安全策略函数自动生成。VPD的主要组成部分是行级别的安全性(RLS),也称为“细粒度访问控制”(FGAC)。细粒度访问控制,能很好实现以上管理控制,在用户端完全透明无访问障碍。具体应用例如在医院信息管理系统中,患者数据存放于同一数据库中,某些重点及特殊患者医疗涉及隐私及保密需要,需要对不同身份类别患者进行不同权限数据访问控制,Oracle数据库细粒度访问控制就能在用户完全透明的前提下,有效实现不同类别用户查询、修改、删除不同类别数据的权限需求,而不需要单独建立特殊患者数据库,提高了实际应用中的高可用性及高安全性。

3 虚拟专用数据库(VPD)的安全管理策略实现

应用场景假设一收治特殊患者科室,只允许特殊用户访问该科室患者信息数据 ,其他用户严格控制访问。

1)首先创建程序包DEPT_SELECT,程序包中的过程是可以设置上下文变量的唯一过程,程序包主体如下:

create or replace package body dept_select as

function select_lmt(object_schema Varchar2,object_name Varchar2) Return  Varchar2  is

rtn_predicate Varchar2(500);

begin

if user='XZX' then

rtn_predicate := 'Dept_code ='||'092801';

else

rtn_predicate := 'Dept_code<>'||'092801';

end if;

return rtn_predicate;

end;

end;

其中設置条件为“当数据库用户(User)等于xzx时,变量rtn_predicate赋值为Dept_code='092801',否则为Dept_code <>'092801'  ”。

2)利用oracle内置程序包DBMS_RLS,其含有大量子程序,DBA可以使用这些子程序维护与表、视图、同义词关联的VDP策略。本文介绍最常用的子程序ADD_POLICE和DROP_POLICE。

(1)子程序ADD_POLICE实现将细粒度的访问控制策略添加到对象 。接上面示例,我们利用ADD_POLICE将程序包DEPT_SELECT的策略应用于表inpadm.bed_rec:

BEGIN

DBMS_RLS.ADD_POLICY(

object_schema=> 'inpadm',

object_name=> 'bed_rec',

policy_name=> 'dept_audit',

function_schema => 'sys',

policy_function=> 'dept_select.select_lmt',

statement_types=> 'select'

);

end;

其中object_schema是包含由策略保護的表、视图或同义词的模式,如果该值为空,则使用调用过程的用户的模式;object_name是由策略保护的表、视图和同义词的名称;statement_types是应用策略的语句类型,允许的值(以逗号分隔)可以是select、insert、update、delete和index的任意组合。默认条件下,除了index之外的所有类型适用;policy_name是添加到对象的策略名称,对于受保护的每个对象,该策略名必须唯一;policy_function是函数名称,该函数为针对object_name的策略生成谓语,如果函数是程序包的一部分,则在此处必须指定程序包名,用于限定策略函数名。

以上名称为dept_audit细粒度访问控制策略实现:当对表inpadm.bed_rec进行select查询操作时,当查询用户不为xzx时,查询结果不返回表bed_rec字段dept_code值为092801的数据 ,只有查询用户为xzx时,才能返回相应数据记录。在实际应用中结合实例,假设某医院莫特殊科室在医院床位记录表bed_rec中,科室代码字段值为092801,应用以上程序,就能实现当用户名为xzx的数据库用户执行查询语句时,可以返回该床位代码为该科室的患者信息 ,其他用户查询该科室患者数据信息返回值为0。

(2)子程序DROP_POLICE实现删除对象中的细粒度访问控制策略。如删除名称为dept_audit的策略,命令如下:

BEGIN

DBMS_RLS.DROP_POLICY(

object_schema=> ' inpadm ',

object_name=> ' bed_rec ',

policy_name=> 'dept_audit');

END;

命令执行后,对对象表inpadm.bed_rec的细粒度访问控制策略失效 。

4 总结

Oracle数据库的虚拟专用数据库VPD的应用,能解决很多应用场景中对数据访问控制的特殊需求。只需要极低的系统开销,就能对相同数据库的相同数据实现不同权限管理,减少单独建库的软、硬件资源配置需求,方便管理及维护,且前端应用透明无痕,充分体现Oracle数据库的高安全及高可用。通过Oracle虚拟专用数据库的应用,我们能对在用系统数据库基础上对新的数据管理需求做深层次的数据统筹规划及管理,为数据管理提供更安全、精细、科学的技术手段支撑。

参考文献:

[1] 许杰,鲁慧哲,左翼.如何建立基于虚拟数据库的Oracle数据安全防护体系[J].中国数字医学,2016,11(9):106-108.

[2] 牛承志,赵丹.虚拟数据库技术在集成化医院信息系统中的应用研究[J].河南职工医学院学报,2011,23(2):248-250.

[3] 杜威,邹先霞,潘久辉.虚拟数据库的实现方法[J].计算机工程与设计,2010,31(14):3201-3206.

【通联编辑:王力】

猜你喜欢
实现应用
办公室人员尚需制定个人发展规划
浅析铁路通信传输的构成及实现方法