[转]例解Oracle Database Vault

在作者的试用过程中,Vault正确实现了本文中所有示例,运行稳定。Vault的GUI管理员工具非常容易使用,同样可以完成本文中所有示例,并且操作 简单。因此,Vault是可以在运营 数据库系统中使用的。
  数据库的安全性越来越受到重视,而其中主要的威胁往往来自内部,如何进行有效的内部控制,多年来一直没有很好的解决办法。其中一个突出的问题 就是限制DBA对应用数据的存取。DBA具有“至高无上”的权限,对他们而言数据库中的数据是没有任何秘密可言的。此外,为了保证运营系统的正常运行,某 些“危险”操作是应禁止执行的。Oracle公司新近推出的Oracle Database 10gR2安全组件Oracle Database Vault(以下简称Vault)就是数据库安全技术的一大进步,很好地解决了上述问题。Vault首先明确了数据库系统人员的职责:DBA只是 物理上 负责维护系统的正常运行:启动、关闭、备份、恢复、管理表空间和数据文件,调整系统性能等等;各个应用部门的负责人是表和应用程序的真正所有者,决定如何 存取数据,决定哪些用户可以使用数据。在此认识的基础上,把系统安全的职责从DBA中分离出来,引入了专门的系统安全管理员,负责系统安全方面的设计和操 作,并负责监控系统安全状况。
  Vault主要利用两个概念来实现其安全管理功能:领域(realm)和命令规则(command rule)。对于需要保护的数据库对象(表、程序、角色等),创建一个领域,将这些对象加入到此领域。此后,如果没有存取这些对象的对象权限,那么即便是 DBA用户也无法对这些对象进行操作。而所谓命令规则是指为一条SQL命令建立一个规则:是否允许执行,在何种条件下允许执行。Vault可以对包括 DDL、DML和系统控制命令的一百多条SQL命令建立命令规则。
  学习掌握一个软件最好的方法就是实际使用。本文用具体的例子详尽地介绍了Vault的功能和使用方法。
  例1 限制DBA对HR模式中对象的存取。
  DBA用户system由于具有SELECT ANY TABLE系统权限,可任意存取任一模式中的数据。Vault中使用领域(realm)来限制DBA的存取:创建一个领域,将需要保护的数据对象加入到这 一领域中,启用这一领域。需要时,可以授权某一用户加入此领域,从而可存取该领域的数据。在Vault管理页面中的操作步骤如下:
  1.创建领域HR_REALM
  Vault的不足之处
  与标准版本分开,单独发行、安装,不够方便;需要重新设计SYSDBA权限的作用,去掉RMAN等工具对SYSDBA的依赖。另外,预定义的 数据字典领域与Vault用户管理员的关系,定义因子中的操作符的实现等细节部分也需要进一步改进。
  在“Database Vault 功能管理”下单击“领域”,进入领域页面,列出了系统已创建的全部领域。单击“创建”按钮,进入创建领域页面。在此页面中,在“一般信息”下“名称”栏内 输入要创建领域的名字,如“HR_REALM”,在“说明”栏内可输入对此领域的说明信息,如“限制DBA存取HR模式”。“状态”和“审计选项”两项的 值使用缺省值,分别为“启用”和“出错时审计”。单击“确定”按钮,完成创建操作,返回领域页面。此时新建领域已出现在列表中。
  2.将HR模式对象加入到新建领域中
  在领域页面中,选择新建的领域“HR_REALM”,单击“编辑”按钮,进入领域编辑页面。单击“领域保护的对象”下“创建”按钮,进入创建 领域保护的对象页面。在“对象所有者”下拉式列表中选择模式HR。“对象类型”和“对象名”两栏保留缺省值“%”,表示全部对象类型和全部对象。单击“确 定”按钮,完成加入操作,返回编辑领域页面。新加入的保护对象已在页面中显示。
  3.授权某一用户,如SCOTT,存取领域HR_REALM
  在编辑领域页面中,单击“领域授权”下“创建”按钮,进入创建领域授权页面。在“被授权者”下拉式列表中,选择用户SCOTT。其余两项“授 权类型”和“授权规则集”使用缺省值。单击“确定”按钮,完成授权操作,返回编辑领域页面。被授权的用户SCOTT已出现在页面中。单击“确定”结束操作 返回领域页面。
  创建领域后,system用户再次存取HR模式数据时会被拒绝,同时在审计表中增加一条记录: 谁何时何处做了什么违反领域规定的失败操作。而被授权的SCOTT用户则可以 成功使 用他的系统权限存取HR模式的数据。另外,不论是否是HR模式的所有者,只要具有数据库对象上的对象权限(object privileges), 则存取数据不受领域的限制。需要记住的是领域的目的只是限制DBA滥用系统权限。
以上使用GUI工具完成的操作,同样可以由以下PL/SQL程序完成。
  connect dvowner
  begin
  --1. 创建领域HR_REALM
  dvsys.dbms_macadm.CREATE_REALM(
  realm_name => 'HR_Realm', description => '限制DBA存取HR模式',
  enabled => 'Y', audit_options => 1);
  --2.将HR模式对象加入到新建领域中
  dvsys.dbms_macadm.add_object_to_realm (
  realm_name => 'HR_Realm', object_owner => 'HR',
  object_name => '%', object_type => '%');
  --3.授权某一用户,如scott,作为参与方存取领域HR_REALM
  dvsys.dbms_macadm.add_auth_to_realm (
  realm_name => 'HR_Realm', grantee => 'SCOTT', auth_options => 0);
  end;
  例2 禁止在运营数据库系统中删除表的操作。
  在Vault中定义一简单命令规则,禁止所有用户对所有表执行DROP TABLE操作。在Vault管理页面中的操作步骤如下:
  在“Database Vault 功能管理”下单击“命令规则”,进入命令规则页面,列出了系统已创建的全部命令规则。单击“创建”按钮,进入创建命令规则页面。在“一般信息”的“命令” 下拉式列表中选择命令DROP TABLE。“规则集”下拉式列表中选择“禁用”。其余项保留缺省值:“对象所有者”和“对象名”为“%”,表示规则应用于所有模式的所有对象;“状态” 值为“启用”。单击“确定”按钮,完成创建操作,返回命令规则页面。新创建的命令规则已在页面中显示。
  命令规则创建后,用户再执行DROP TABLE语句会被拒绝(如果启用规则集的审计选项,则会在审计表中留下一条违反命令规则的记录)。需要注意的是在命令规则中使用“%”指定对象时,不仅 包括了已存在的对象,也包括随后新创建的对象。
  以上使用GUI工具完成的操作,同样可以由以下PL/SQL程序包完成。
  connect dvowner
  begin
  dvsys.dbms_macadm.CREATE_COMMAND_RULE (command => 'DROP TABLE',
  
  rule_set_name => '禁用', object_owner => '%', object_name => '%', enabled => 'YES');
  end;
  只需简单的设置就解决了一直困扰我们的数据库安全问题,上面两个例子展示了Vault实用之处。然而Vault功能绝不仅限于此。在 Vault中,设计的粒度从模式到对象类型,到某一个特定的对象,可以充分满足应用的要求。此外,安全管理员只要简单改变领域或命令规则的状态(启用/禁 用),就可以在需要时,如系统维护期间允许某些SQL命令执行,而在系统维护结束后恢复原有安全设置,非常灵活方便。
  对于安全性而言,更为重要的是根据当时的情形做出判断:何人、何时、何地和何事。例如,对同一用户,允许他在公司的局域网内存取高敏感数据, 但是当他通过公共互联网登录时则应拒绝存取以防止在传输过程中泄密。换言之需要加入条件,这就引入了Vault的另外两个概念:规则集(rule set)和因子(factor)。
  顾名思义,规则集就是一组规则(rule),每一条规则是一个布尔表达式。根据规则的真假取值,规则集本身取值要么为“真”,要么为“假”, 有两种选择:ALL或ANY。在定义命令规则或授权一用户存取某一领域时,可以设定某一规则集做为条件。当用户执行命令规则中限定的SQL命令 时,Vault首先计算相关联的规则集,如果规则集取值为“真”,允许命令执行,为“假”拒绝执行 (例2中,设定的规则集是一个永假式规则集“禁用”,即无条件拒绝执行)。同理,只在规则集取值为“真”时才允许用户存取领域数据。
  一个因子是一个命名变量,主要描述当前会话(session)的各种环境(context)属性,如用户名、客户IP地址等(会话的基础属性 可以从V$SESSION中找到,引入因子的目的在于从系统安全的角度去划分定义,在基础信息的基础上构造定义“高级”概念:如源自公司内网的联接等,方 便安全管理人员使用)。因子有一个或多个标识(identity), 这里标识可以通俗地理解就是变量的值。因子可用于定义规则,也可用于OLS标签集成。
Vault中根据需要可以定义自己的规则集和因子,事实上大多数的管理任务都可以利用系统已经定义的规则集和因子完成。在下面的例子中将演示如何定义复杂 规则集和因子。
  例3 在运营系统中禁止删除表(DROP TABLE)操作,但是在数据库维护窗口(每周五晚上10时到11时)内允许SYSTEM或SYS用户执行该操作。
  对例2中命令规则进行修改,把永假式的规则集替换为一新建的规则集,可命名为“DB Maintaining W”,这一规则集包含三条规则,分别检查登录用户、日期和时间。这三条规则同时为真,则规则集取值为真,此时可执行DROP TABLE命令。检查登录用户是否SYSTEM或SYS存在系统预定义的规则,规则名为“是SYS或SYSTEM用户”。另外两条规则需要自己定义,规则 表达式分别为:
  to_char(sysdate,'D')=6 和 to_char(sysdate,'HH24') between 22 and 23。
  在PL/SQL程序中,定义规则集“DB Maintaining W”的处理步骤为:创建两条新规则;创建规则集;将三条规则加入到规则集中。而在GUI管理员工具页面内,步骤略有不同:创建规则集,在规则集中选择已有 规则,或新建规则(GUI中没有单独的创建规则的入口)。
  而完成本例,需要删除例2中创建的命令规则后重建,将“禁用”规则集替换为“DB Maintaining W”。重新生成DROP TABLE命令规则后,仅在指定时间内只有SYSTEM用户可执行DROP TABLE命令。
  
  正确的认识
  
  数据库的安全是一个系统工程,涉及到技术、设计和管理多个方面,Vault只是其中一个环节一个工具。如果没有一个良好的数据库用户设 计,system用户是数据库中所有表的所有者,则Vault只能是英雄无用武之地。
  例4 设计由Vault保护的安全应用程序角色。
  通常的安全应用程序角色是由某一特定过程启用角色,而“Vault保护”指的是为这一角色指定一规则集,如果规则集取值为真则可以启用角色。 本例中,要求只有来自某一特定的IP地址的联接才允许启用应用程序角色。
  定义由Vault保护的安全应用程序角色的步骤为:(1)定义规则集;(2)定义角色,并指定规则集;(3)为角色授需要的权限;(4)在应 用中执行SQL命令启用应用程序角色。
  定义规则集。本例中要求客户的IP地址特定,如192.168.2.3。由于Vault已经预定义了一个因子Client_IP来返回客户 IP地址,所以在规则表达式中可以直接使用因子函数dvf.f$Client_IP = '192.168.2.3'。定义此规则名为:来自192.168.2.3,规则集名为:可靠联接。
  定义角色,假设角色名为'VAULT_APROLE'。创建语句为:
  dvsys.dbms_macadm. CREATE_ROLE( role_name => 'VAULT_APROLE', rule_set_name =>'可靠联接', enabled => 'YES');
  创建角色后,可对此角色授权,如执行某一程序包的执行权限,某些管理权限等。这些权限只能在角色启用时才能利用。本例中省略。在程序中执行如 下语句启用Vault保护的安全应用程序角色:
  execute DVSYS.DBMS_MACSEC_ROLES.SET_ROLE('VAULT_APROLE');
  在创建角色后,可以分别从192.168.2.3和其他IP建立联接,检查是否可以启用角色。以下语句显示当前会话已启用的角色:
  select * from session_roles where role;
  需要注意的是,Vault内部执行的SQL语句可以视做是 SET ROLE VAULT_APROLE,也就是说,在启用了VAULT_APROLE角色的同时,禁用了所有其他角色。
  例5 设计一个因子Clientnetwork,当会话联接来自公司局域网(例如,从192.168.2.2到192.168.2.7)时,因子标识 (Identity)为'Intranet',而来自其他IP地址时,因子标识为'Public'。
  Vault已经预定义一个标准因子Client_IP,一个会话建立后,这一因子的值为客户端IP地址。因此,因子 Clientnetwork与Client_IP有如下关系:当“192.168.2.2 < = Client_IP < = 192.168.2.7”时,有“Clientnetwork = 'Intranet'”;当Client_IP取其他值时,有“Clientnetwork = 'Public'”。
定义一个简单因子如同定义一个函数,需要给出因子名,给出计算因子标识的计算语句,Vault中称为“检索方法”。本例中定义的因子不需要给出检索方法, 却需要指定与另一因子Client_IP的映射关系。具体操作步骤为:定义因子的一般属性;给出因子可能的标识;定义与另一因子的映射关系;给出每一标识 的具体映射表达式。
  
  从192.168.2.2到192.168.2.7范围的IP被定义为公司内网“Intranet”,而从数据库服务器直接登录 当然也是公司内网,但此时因子Client_IP取空值,所有增加一条判断为空的映射条件。完成因子定义后,可以通过DVF的因子函数进行测试,函数名就 是因子名。以下语句显示当前会话中因子的标识:
  select dvf.f$client_ip, dvf.f$clientnetwork from dual;
  分别从不同IP建立联接,执行上述语句,检查因子定义是否正确。
  例6 与Oracle Label Security集成的例子。Vault通过使用与Oracle Label Security策略关联的Vault因子,可以控制会话的最大允许数据标签。
  OLS是一种基于标签(Label)的强制存取控制(MAC)方法的数据库组件,它的前身可追溯到Trusted Oracle7,当时是一个与标准DBMS独立的高安全DBMS。所谓基于标签是指为那些高度机密的数据每一条记录加一个标签,如秘密、机密、绝密等,另 外对存取数据的每一用户也相应赋予一个标签,如机密。用户只能存取与其标签相同或级别之下的数据(MAC方法和基于对象分配权限的DAC是并存的,如果不 具有对象的存取权限,自然无法存取数据,具有对象权限还要检查其标签是否允许)。例如,两个用户hr和hr_clerk,都具有对表employees的 SELECT权限,但由于被赋予的标签不同,能够存取的数据也不同。
  而所谓OLS标签与Vault因子集成,是指用户拥有的标签需要根据会话的环境调整,在某些情形中(如通过公共网登录,工作时间之外等)要降 低用户标签的等级以保证安全性。本例中假设 人力资源部门的数据分为三个等级,由低到高为:开放P、敏感S、高度敏感HS。人力资 源部门经理hr被赋予最高级别的标签HS。但是当hr通过公共网(由例5定义的因子Clientnetwork的标识Public决定)登录时,只能存取 敏感级别S的数据。示例表hr.employees中全部记录数为107条,其中敏感及以下级别数据为95条。
  为验证与OLS集成的功能,需要建立示例策略HRPOLI。假设已创建一个用户hr_clerk,并被赋予对表hr.employees和 hr.departments操作的全部权限。
  在创建示例策略后,用户hr存取employees表,返回107条记录;用户hr_clerk只能看到95条记录。而当DBA用户 system存取表employees时,返回0条记录,因为system没有被赋予HRPOLI策略的任何级别的标签。
  在定义了需要的因子Clientnetwork和OLS的策略HRPOLI后,完成集成工作相对比较简单:
  1. 在已经定义的OLS策略中选择一个(本例中为HRPOLI),并给出标签合并算法。
  标签合并指如何从两个标签中决定最终的标签: OLS事先赋予用户的标签与根据会话因子标识决定的标签。通常取较低的级别(level)、区域(Compartment)和机构(Group)的交集, 简写为LII。
  2. 建立策略与因子的关联,指定影响用户标签的因子。本例中,影响用户在策略HRPOLI中标签的是Clientnetwork因子。
  3. 具体指定如何根据因子标识对用户标签赋值。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11893231/viewspace-667367/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11893231/viewspace-667367/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值