ORACLE database vault
Oracle Database Vault
TOC \o "1-3" \h \z \u Oracle Database Vault PAGEREF _Toc518292867 \h 1
1. 参考... PAGEREF _Toc518292868 \h 1
2. 简介... PAGEREF _Toc518292869 \h 1
3. Vault组成部分... PAGEREF _Toc518292870 \h 2
3.1. Oracle Database Vault访问控制组件... PAGEREF _Toc518292871 \h 2
3.2. Oracle Database Vault管理员(DVA) PAGEREF _Toc518292872 \h 3
3.3. Oracle Database Vault 配置助手 (DVCA) PAGEREF _Toc518292873 \h 3
3.4. Oracle Database Vault DVSYS and DVF Schemas. PAGEREF _Toc518292874 \h 3
3.5. Oracle Database Vault PL/SQL 接口和包... PAGEREF _Toc518292875 \h 4
3.6. Oracle Database Vault 和Oracle Label Security PL/SQL APIs. PAGEREF _Toc518292876 \h 4
3.7. Oracle Database Vault 报告和监控工具... PAGEREF _Toc518292877 \h 4
4. Vault安装... PAGEREF _Toc518292878 \h 4
4.1. 检查是否已安装... PAGEREF _Toc518292879 \h 4
4.2. 关闭数据库及相关服务... PAGEREF _Toc518292880 \h 5
4.3. 组件编译... PAGEREF _Toc518292881 \h 5
4.4. 调用dbca部署... PAGEREF _Toc518292882 \h 5
4.5. 启动DBV配置界面... PAGEREF _Toc518292883 \h 6
4.6. 结论... PAGEREF _Toc518292884 \h 6
5. 案例介绍... PAGEREF _Toc518292885 \h 7
5.1. 示例1:只允许在非业务时间执行drop命令... PAGEREF _Toc518292886 \h 7
5.2. 实例2:只允许用户使用特定工具(应用)登录数据库... PAGEREF _Toc518292887 \h 8
5.3. 实例3:使用Dual Key安全功能... PAGEREF _Toc518292888 \h 9
6. 详说Oracle Vault--使用数据泵工具... PAGEREF _Toc518292889 \h 10
6.1. Data Pump与Vault PAGEREF _Toc518292890 \h 11
6.2. 默认行为配置... PAGEREF _Toc518292891 \h 11
6.3. 额外授权... PAGEREF _Toc518292892 \h 11
6.4. 导入敏感数据动作... PAGEREF _Toc518292893 \h 12
6.5. 结论与讨论... PAGEREF _Toc518292894 \h 12
7. Vault卸载... PAGEREF _Toc518292895 \h 13
7.1. 卸载前准备... PAGEREF _Toc518292896 \h 13
7.2. Disable Vault PAGEREF _Toc518292897 \h 13
7.3. 数据库中操作... PAGEREF _Toc518292898 \h 14
7.4. 结论... PAGEREF _Toc518292899 \h 15
1. 参考
详说Oracle Vault--原理、安装与配置
https://www.linuxidc.com/Linux/2014-05/101108.htm
使用技术手段限制DBA的危险操作-Oracle Database Vault
https://www.cnblogs.com/raobing/p/6174551.html
官方文档
http://www.oracle.com/technetwork/cn/tutorials/datavault-094096-zhs.html
Oracle数据安全解决方案
https://www.linuxidc.com/Linux/2011-12/48689p2.htm
2. 简介
Oracle数据库作为目前最成熟的商业数据库,在稳定其核心功能的同时也针对数量众多的用户群提出了很多安全运维工具解决方案。在数据层面,Oracle有三个代表新的技术:Virtual Private Database(VPD)、Label Security和Oracle Vault。
VPD主要是针对解决应用层面的数据访问需求添加数据访问权限,对SYS无效,
Label Security是VPD某种程度的拓展升级。
Oracle Database Vault(DV)主要是对Oracle数据库保护敏感数据和职责分离。将数据安全责任从用户甚至sys身上剥离出去,进行细粒度的安全责任分配。作为Oracle数据库的一个可选组件,Vault是需要额外的文件链接、注册和安装的。安装vault之后,Oracle会去创建一个全新的用户dbvowner,原有的sys对一些数据的操作和访问权限,也都有进行控制的可能。
Vault中的三个核心要素:Realm(领域)、Factor(因素)和规则(Rule)。从数据对象、操作s命令等多个方面来限制或者保护特定的对象。
DV保护敏感数据主要通过Realm(安全域),Realm可以简单理解为敏感数据的集合,DV通过realm的配置来指定用户是否可以访问Realm保护的数据,如果在DV中没有给访问权限,即使是sysdba也无权访问受Realm保护的数据,这是DV的核心功能.
DV还有一个很重要的功能,Command Rules,就是可以按一定的判断条件,允许或阻止数据库用户执行DDL、DML以及DCL命令,而且对特权用户,包括sysdba都有效。这个功能正好可以满足我们限制dba的需求。
Factor(认证因子)就是可以用于进行条件判断的因素,比如客户端主机名,客户端IP等等,Oracle内置了一些常用的Factor,用户也可以自己创建Factor,Factor可以是一个表达式,也可以是一个存储过程的返回值。
Rule Sets简单说就是判断条件的集合,类似SQL的where之后的判断条件,当规则集的判断条件返回为true时,DV允许用户访问数据或执行特定的命令。Rule sets中的Rule可以引用Factor做判断。
3. Vault组成部分
Oracle Database Vault包含如下部分:
1) Oracle Database Vault 访问控制组件
2) Oracle Database Vault 管理员组件(DVA)
3) Oracle Database Vault配置助手(DVCA)
4) Oracle Database Vault DVSYS和 DVF Schemas
5) Oracle Database Vault PL/SQL接口和开发包
6) Oracle Database Vault和Oracle Label Security PL/SQL APIs
7) Oracle Database Vault 监控和报告工具
3.1. Oracle Database Vault访问控制组件
Oracle Database Vault使你能够创建如下组件来保护你的数据库实例的安全:
域:域是需要被保护的数据库schemal、对象、角色的一个功能上的集合。例如:你可以将和账户、销售、或者人力资源相关的数据库schemal、对象、角色组成一个域。当你将这些组成一个域后,你可以使用域来控制赋给特定账户或者角色的系统权限的使用。这样你就可以给任何想使用这些数据库schemal、对象、角色的用户提供细粒度的访问控制。Chapter 4, "Configuring Realms"详细讨论了域。.
命令规则:命令规则是一个特殊的规则,通过这个规则,你可以控制用户如何执行他们能够执行的几乎所有的SQL语句,包括SELECT, ALTER SYSTEM, database definition language (DDL), 和data manipulation language (DML)语句.命令规则必须和规则集一起决定某个语句是否允许执行。Chapter 6, "Configuring Command Rules"详细讨论了规则集.
因素:因素是一个命名变量或者属性,例如用户位置、数据库IP地址、会话用户,这些因素是Oracle Database Vault能够识别和保护的。你可以针对用户活动使用这些因素,例如授权数据库账户链接到数据库,或者创建过滤逻辑条件来限制数据的可见性和可管理性。每个因素可以包含一个或者多个标识,标识是因素的具体的值。一个因素可以包含多个标识,这取决于因素的检索方法或者它的映射逻辑。Chapter 7, "Configuring Factors"详细讨论了因素.
规则集:规则集是一个或者多个规则的集合,你可以将规则集和一个域的授权、命令规则、因素指派、或者安全应用角色关联起来。规则集基于其中的每个规则的计算值以及规则的计算方式(所有为真或者任意为真)。规则集中的规则是一个结果为"true"或"false"的PL/SQL表达式。Chapter 5, "Configuring Rule Sets"详细讨论了规则集。
安全应用角色:一个安全应用角色是一个特殊的Oracle数据库角色,它可以基于Oracle database vault规则集的计算结果激活。Chapter 8, "Configuring Secure Application Roles for Oracle Database Vault"详细讨论了安全应用角色。
为了加强这些组件的功能,Oracle Database vault提供了一系列的PL/SQL接口和包。"Oracle Database Vault PL/SQL Interfaces and Packages"提供了一个概括的介绍.
通常情况下,你要做的第一步是创建一个包含你想保护的schema或者数据库对象的域,然后你就可以通过创建规则、命令规则、因素、标识、规则集、安全应用角色来保护你的域。除此以外,你可以运行报告工具来报告这些组件监控和保护的活动。Chapter 3, "Getting Started with Oracle Database Vault"提供了一个简单的指南,可以使你熟悉Oracle Database Vault的功能,Chapter 16, "Oracle Database Vault Reports"提供了更多关于如何运行报告来检查配置和其它Oracle Database Vault 完成的活动。
3.2. Oracle Database Vault管理员(DVA)
Oracle Database Vault 管理员是一个基于Oracle Database Vault的PL/SQL API构建的Java程序。这个程序可以让不熟悉PL/SQL接口的安全管理者通过友好的用户界面来配置访问控制策略。Oracle Database Vault管理员程序提供了众多的安全相关的报告,这些报告可以帮助了解基准的安全配置。这些报告同时也有助于指出与基准配置相比,当前配置有哪些变化。
Chapter 4到 Chapter 9解释了如何通过Oracle database Vault管理员程序来配置访问策略, 以及如何将Oracle Database Vault与其它Oracle产品集成起来. Chapter 16, "Oracle Database Vault Reports"解释了Oracle Database Vault报告.
3.3. Oracle Database Vault 配置助手 (DVCA)
为了执行维护任务,可以使用命令行工具Oracle Database Vault配置助手(DVCA).更多信息请参考Appendix C, "Postinstallation Oracle Database Vault Procedures".
3.4. Oracle Database Vault DVSYS and DVF Schemas
Oracle Database Vault 提供了DVSYS这个schema来存储所有需要Oracle Database Vault保护的数据库对象。DVSYS schema包含角色、视图、账户、函数、以及其它Oracle Database Vault使用的数据库对象。DVF schema包含一些公共函数,这些函数用于从Oracle Database Vault访问控制配置中读取因素值的集合。
Chapter 10, "Oracle Database Vault Objects"详细描述了这两个schema.
3.5. Oracle Database Vault PL/SQL 接口和包
Oracle Database Vault提供了一个PL/SQL接口和包,让安全管理员或者应用程序开发者按需配置访问控制策略。PL/SQL存储过程和函数使得普通的数据库账户能够在一个数据库会话上下文中在访问控制策略边界里进行操作。
参考Chapter 14, "Using the Oracle Database Vault PL/SQL Interfaces" and Chapter 11, "Using the DVSYS.DBMS_MACADM Package"获取更多信息.
3.6. Oracle Database Vault 和Oracle Label Security PL/SQL APIs
Oracle Database Vault提供了能够和Oracle Label Security集成的访问控制能力。Oracle Label Security是和Oracle Enterprise Manager Database Control集成的,Oracle Enterprise Manager Database Control能够让安全管理员定义应用到数据库对象的标签安全策略。Oracle Label Security同样提供了一组可以供数据库应用程序开发者用来提供标签安全策略的PL/SQL API
参考 "Integrating Oracle Database Vault with Oracle Label Security"获取更多关于Oracle Database Vault和Oracle Label Security如何配合的信息. 参考 Oracle Label Security Administrator's Guide获取更多关于Oracle Policy Manager的信息.
3.7. Oracle Database Vault 报告和监控工具
你可以根据Oracle Database Vault监控的不同的活动来生成报告,你可以监控策略的改变、异常的安全尝试、数据库配置和结构的变化。
参考 Chapter 16, "Oracle Database Vault Reports"获取更多关于你可以生成的报告的信息. Chapter 15, "Monitoring Oracle Database Vault"解释了如何监控Oracle Database Vault.
4. Vault安装
4.1. 检查是否已安装
默认企业版中,Vault是不会安装的。我们需要手工的进行编译、安装,才能使用。
我们采用Oracle 11gR2进行测试,版本号为11.2.0.4。
SQL> select * from v$version;
判断当前vault是否安装,查看v$option视图。
SQL> select * from v$option where parameter like '%Vault%';
PARAMETER VALUE
------------------------- ----------
Oracle Database Vault FALSE
在本版本中,查看均已安装,但随后配置塑件提示没有安装。
select * from v$option where parameter like '%Vault%';
select * from v$option where parameter like '%Security%';
4.2. 关闭数据库及相关服务
安装配置之前,要将数据库、监听程序、DB Console关闭。
--监听程序
[oracle@SimpleLinux ~]$ lsnrctl stop
--Console
[oracle@SimpleLinux ~]$ emctl stop dbconsole
--Database Server
SQL> shutdown immediate;
4.3. 组件编译
Oracle Vault是依赖Label Security,需要在操作系统层面上启动配置。在Linux/Unix环境下,使用make进行配置链接。
[oracle@SimpleLinux lib]$ cd $ORACLE_HOME/rdbms/lib
[oracle@SimpleLinux lib]$ make -f ins_rdbms.mk dv_on lbac_on ioracle
注意:如果在Exadata中需要使用IPC协议访问存储,则需要加入ipc_rds协议模块。另外如果Windows平台,则是将$ORACLE_HOME/bin目录中oradv11.dll.dbl改名为oradv11.dll命令。
之后,重新启动监听器和服务器。
[oracle@SimpleLinux lib]$ lsnrctl start
SQL> conn / as sysdba
SQL> startup
4.4. 调用dbca部署
在支持GUI的界面方式下,调用dbca启动编译。
点击下一步Next,选择Configure Database Options项目。之后选择目标数据库。
从选项中,选择上Label Security和Vault选项。
Oracle Label Security 用户未system
Oracle Database Vault 为SYSAUX
配置项目中,包括了Oracle Vault用户owner的名称和管理员密码。注意:这个配置密码环节是很严格的,要求长度是8-30位、不出现重复字符和包括至少一个标点符号。
database vault owner: dbvowner password:Abcd_1234
创建单独的账户管理员,已区分账户管理和安全策略管理。
database vault account manager: dbvmgr password:Abcd_1234
选择连接方法,包括独占方式和共享连接方式。最后安装选项。
最后安装成功,结束GUI界面。
4.5. 启动DBV配置界面
和很多Oracle组件一样,Oracle Vault是可以通过一系列的API接口调用来进行配置管理的。但是,由于复杂性,Oracle并不推荐直接使用API接口命令进行管理,而是通过提供的dbv应用进行配置。使用dbv的方法和em很像,而且避免了出现错误的几率。
调用dbv的方法,首先是启动emctl。之后调用https://192.0.2.20:1158/dva
端口号和em是一样的。
用户名:dbvowner
口令:Abcd_1234
HOST:192.0.2.20
PORT:1521
SID/服务:SID:orcl
点击登录,就可以看到配置项目。
4.6. 结论
Oracle Vault是目前Oracle官方推荐的运维安全策略。在实际应用中,主要便于进行sys等管理员帐号权限限制,保护核心业务数据。
5. 案例介绍
5.1. 示例1:只允许在非业务时间执行drop命令
这个例子是最简单的,不需要使用Factor,只使用Rule Sets和Command Rules就可以完成。我们用数据库用户test来示范:
1) 登录DV的管理页面:
2) 创建一个Rule Set,名字叫"Can not drop table in business time",选择Any True,意思是说规则集中的规则(判断条件)任何一个为True,规则集判断结果就为True。其实All True就相当于and,Any True就相当于or。审计选型:成功或失败的审计。错误处理页面:处理时出错:show error message,失败代码:-20001,失败消息:Can not drop table in business time
3) 要与规则集关联的规则,创建两个规则:
规则名:RULE1 规则表达式:to_char(sysdate,'HH24MM')<'1145'
规则名:RULE2 规则表达式:to_char(sysdate,'HH24MM')>'1155'
这两个RULE也很好理解,就是判断当前时间是否为业务时间,在这里,为了便于做实验,把业务时间定义为11:45~11:55,这个规则集判断当前时间,如果当前时间不在业务时间内,规则集返回True。
4) 然后创建Command Rule
在主页,点击规则>创建,命令了类型选择DROP TABLE,状态:启用,用户所有者:SCOTT,命令集:Can not drop table in business time
这个Command Rule的意思就是指定的Rule Set 返回True时,允许drop test用户下的表,否则即使是sysdba或表的owner也无权drop table。
5) 效果:
23:50:48 SCOTT@orcl >create table dept3 as select * from dept;
23:51:09 SCOTT@orcl >drop table dept3;
drop table dept3
*
ERROR at line 1:
ORA-47306: 20001: Can not drop table in business time
23:51:59 @ >conn sys/oracle@s11 as sysdba
23:52:12 SYS@s11 >drop table scott.dept2;
drop table scott.dept2
ERROR at line 1:
ORA-47306: 20001: Can not drop table in business time
其他我们想控制的Alter Table等Command Rule的设置方法类似。
5.2. 实例2:只允许用户使用特定工具(应用)登录数据库
实际工作中,我们经常遇到这样的情况:应用开发人员都有应用用户的口令,他们可以随意用SQL*PLUS或PL/SQL Developer这样的工具连接到生产库上,如果一时搞混了生产库和测试库,就可能有悲剧发生。最好的解决方法就是限制应用用户所用的工具,应该只允许中间件以这个用户连接,其他工具都不允许连接。
这个例子会用到Factor,首先我们创建一个Factor,取用户会话的Module:
1) 创建因子:
名称:Module
因子类型:Application
因子标识:By Method ,
因子赋值:By Access,
因子标签:By Self
检索方法:UPPER(SYS_CONTEXT('USERENV','MODULE'))
点击"创建"。
2) 用SQL*PLUS登录数据库,验证这个Factor取出的值:
SYS@orcl >select dvf.f$module from dual;
F$MODULE
-----------------------------
SQLPLUS@S11 (TNS V1-V3)
引用Factor的方法就是DVF.F$+Factor name,在Linux本机登录,Module就是上面显示的那样,在windows上远程登录,Module的值是"SQLPLUS.EXE"。
3) 下面创建Rule Set,名字叫"Limit SQL*PLUS",
创建规则集:
名称:Limit SQL*PLUS
状态:启用
赋值选项:Any True
错误处理选项:-20002
失败消息:can't login
定制事件处理程序选项:禁用处理程序
4) 创建规则:
RULE3: DVF.F$MODULE like 'SQLPLUS%' AND DVF.F$SESSION_USER IN ('SYS','SYSTEM','DV_MANAGER')
RULE4: DVF.F$MODULE NOT LIKE 'SQLPLUS%'
5) 创建Command Rule:
创建命令规则:
命令:CONNECT
状态:启用
对象所有者:%
对象名:%
规则集:Limit SQL*PLUS
6) 效果
按照这种规则,除了SYS,SYSTEM,DV_MANAGER之外的用户,不管是本地还是远程,都不能用SQL*PLUS登录。
23:58:44 SYS@orcl >conn / as sysdba
Connected.
00:12:28 SYS@orcl >conn scott/tiger@s11
ERROR:
ORA-47306: 20002: can't login
Warning: You are no longer connected to ORACLE.
用SQL Developer登录正常:
5.3. 实例3:使用Dual Key安全功能
现实场景中,我们希望DBA遵守制度,比如在修改表结构之前,通知OGG相关人。或者为了增加安全性,要求DBA做的重大操作,必须得到老板的批准。DV可以利用Dual Key功能满足这种需求。
简单说,我们可以写一个存储过程,判断流程中需要通知的人是否在线,如果在线,才允许执行相应的操作。而那个需要被通知的人,只要拥有connect数据库的权限就行,他(她)的登录动作就变成了一种授权或被通知后的确认。
具体步骤:
1) 首先给DV的管理员授权,让用户可以访问字典视图和编写存储过程:
SQL>
GRANT CREATE PROCEDURE TO DBVOWNER;
GRANT SELECT ON V_$SESSION TO DBVOWNER;
2) 创建存储过程
我们假设授权的用户是"system",而执行操作的用户是"scott",相应的判断system是否在线的存储过程如下:
CREATE OR REPLACE FUNCTION check_boss_logged_in
return varchar2
authid definer as
v_session_number number := 0;
v_allow varchar2(10) := 'TRUE';
v_deny varchar2(10) := 'FALSE';
BEGIN
SELECT COUNT(*) INTO v_session_number
FROM SYS.V_$SESSION
WHERE USERNAME = 'SYSTEM';
IF v_session_number > 0
THEN RETURN v_allow;
ELSE
RETURN v_deny;
END IF;
END check_boss_logged_in;
/
使用DV管理员创建这个Function,然后授权给DVSYS:
SQL>
conn dbvowner/Abcd_1234
GRANT EXECUTE ON check_boss_logged_in to DVSYS;
3) 创建Rule Set:
名称:Dual Key
赋值选项:Any True
规则如下:
RULE5:SYS_CONTEXT('USERENV','SESSION_USER')='SCOTT' AND DBVOWNER.CHECK_BOSS_LOGGED_IN='TRUE'
RULE6: SYS_CONTEXT('USERENV','SESSION_USER') !='SCOTT'
4) 创建Command Rule:
命令规则:
类型:ALTER TABLE
对象所有者:SCOTT
RULE SET: dual key
5) 效果(失败)
这个Command Rule达到的效果是,如果SCOTT用户想alter owner为scott的table,必须boss用户同时在线,否则报错,无权限。如果是其他人修改SCOTT用户下的表,不受这个限制。
最后的效果:
SYSTEM用户没有在线,那么SCOTT用户alter table报错
只有在SCOTT用户通知了SYSTEM用户,或者按照流程,得到了SYSTEM用户的批准,SYSTEM用户用登录数据库这个动作来代表确认,SCOTT用户才可以修改表结构:
6. 详说Oracle Vault--使用数据泵工具
Oracle Vault的原则是安全职责的拆分保护。从原来数据库管理员sys承担安全职责这个假设,转变为单独安全人员dbvowner和dbvaccount manager为安全配置中心。之后,从行为、领域等多个层面设定了很多安全区,对安全区采用额外的保护策略,将管理员屏蔽住。
数据库管理员虽然可以进行管理工作,但是却不能访问特定敏感区域。而安全员虽然有安全授权能力,但是没有管理员数据授权(系统权限和数据权限),安全员也不能访问敏感数据。
这个过程中是有一些漏洞的,比如管理员存在修改安全员密码,夺取安全员权限的可能,所以Oracle Vault在安装之后,有一些默认的领域和命令规则,将管理员严格的进行束缚。
此外,管理员有一些日常操作,如使用DB Control、Datapump和Recovery Manager,都有触动安全领域规则的风险。这样的情况Oracle是如何处理呢?本篇从Data Pump操作入手,进行简单讨论。
6.1. Data Pump与Vault
Oracle Data Pump(数据泵)是Oracle10g以后推出的数据备份管理工具。作为Exp/Imp的进化版,Data Pump对于各种Oracle新特性、功能支持力度是比较好的,在海量数据操作的时候,Data Pump也是有独特的优势。
如果我们仔细研究过Data Pump操作过程,就可以得知,Oracle Data Pump进行数据导入的过程并不是一个整体,而是一系列动作的集合。比如:当进行数据导入Schema模式的时候,如果目标数据库没有这个用户,Data Pump时会创建出这个用户。这个过程其实就是一般的create user xxx语句执行。
所以,进行export和import数据的过程,是一个多种权限(系统权限)综合的过程。这也就是为什么Oracle中导入导出数据库的权限是两个角色权限(Import/Export Full Database)。
那么,如果管理员(备份操作员)需要进行数据导入导出敏感数据的时候,是要触动到敏感信息的。Oracle Vault环境下我们是怎么配置呢?
6.2. 默认行为配置
当前我们实验选择Oracle 11gR2版本,数据库已经配置Vault组件。对scott数据进行保护,即使sys管理员也是无法访问的。
Oracle中创建directory对象dumps。尝试进行导出。
$ expdp \"/ as sysdba\" directory=dumps schemas=scott dumpfile=scottvault_%U.dmp
从报错信息中,我们看到Data Pump本质就是调用一系列的包方法,来将数据导出。Sys用户是有导出数据权限的,但是默认情况如果碰触敏感信息,也是报错失败。
6.3. 额外授权
在设置Vault情况下,Oracle对于一些管理操作时需要额外授权的。Dbms_macadm包就是用于进行特定管理操作授权的。
在sys下,执行授权操作因无权限会报错。
在Oracle Vault中,所有对于敏感区域的授权动作,都是要通过dvowner管理对象。
SQL>
conn dbvowner/Abcd_1234.@ora11g
exec dbms_macadm.authorize_datapump_user('SYS');
再次调用expdp程序。
expdp \"/ as sysdba\" directory=dumps schemas=scott dumpfile=scottvault.dmp
导出成功。
6.4. 导入敏感数据动作
此时,我们设想一个场景。如果一个位于安全领域的数据对象,被导出为dmp文件(或者备份到其他介质中)。还原到一个环境之后,安全原则是否还存在?
我们进行试验测试,导入刚刚导出的dmp文件到数据库中。
--导入相同数据库,不同schema
impdp \"/ as sysdba\" dumpfile=scottvault.dmp directory=dumps remap_schema=scott:test
导入成功,查看Vault约束是否存在。
SQL>
conn sys/oracle@ora11g as sysdba
select * from scott.emp;
select * from test.bonus;
到一个新的环境之后,数据约束消失。
6.5. 结论与讨论
发现导入敏感vault失效之后,一些朋友是有疑惑的,认为这样是Oracle的一个问题缺陷。在这个问题上,笔者是和Oracle站在相同的立场的。
首先,Vault的本质是一种系统级别的控制技术。而不是一种数据加密技术。如果寻求加密,可以考虑TDE或者应用端加密技术。Vault是在访问层面的一种控制机制。所以,当数据被合法的读取留存之后,被解密是合理的想法。
第二,在进行Export的时候,Oracle Vault是要求额外授权的。Oracle认为:既然已经让安全管理员允许特定用户导出敏感数据,那么安全责任就转移出系统了,担负在特定用户的身上。所以,这样也是合理的。
最后,Vault的本质是"防范自己人"。这也就是限制了Oracle Vault发挥作用的层面。安全是一个多层面考虑的问题。没有单独的一种技术手段可以避免问题出现。在什么都不可信的时候,我们总需要相信一些什么。
注意:在11gR2版本中,已经取消了对于Exp/Imp在Vault环境的使用。Data Pump已经成为唯一选择。
7. Vault卸载
转:https://www.linuxidc.com/Linux/2014-05/101102.htm
Oracle Vault是安全三个技术策略的重要组成部分。相对于其他两种,Label Security和VPD(Virtual Private Database),Oracle Vault更加体现运维体系管理建设和安全规则配置。安装配置Vault之后,Oracle原有的sys超级用户安全角色被剥离,数据、操作和资源以规则的方式进行安全限制。应该说,使用Vault之后,才能真正实现对于数据管理员行为的管制。
本篇主要介绍如何对Vault进行卸载操作,依据的版本是11gR2。注意:Oracle Vault不同版本下进行卸载的方法有一定差异,特别是在relink的过程。
7.1. 卸载前准备
Oracle Vault在数据库中涉及几个部分:dva组件以Web App的方式绑定在OEM中、内部的dbowner和manager管理对象和角色权限调整。在正式的卸载操作之前,我们需要将数据库和各种组件进行关闭。
数据库完全关闭。
SQL>
conn / as sysdba
shutdown immediate;
监听程序关闭。
[oracle@SimpleLinux ~]$ lsnrctl stop
DB Console Web应用关闭。
[oracle@SimpleLinux ~]$ emctl stop dbconsole
[oracle@SimpleLinux ~]$ emctl status dbconsole
7.2. Disable Vault
Vault是一个默认情况下未激活的组件。我们进行安装Vault的过程,实际上就是将其重新打包如Oracle执行程序。进行卸载的过程,也需要重新relink Oracle应用程序。
首先进行Disable过程。
[oracle@SimpleLinux ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@SimpleLinux lib]$ make -f ins_rdbms.mk dv_off ioracle
注意:如果是在11gR2中,可以选择chopt方式进行dv的卸载。
[oracle@SimpleLinux lib]$ chopt disable dv
Writing to /u01/app/oracle/install/disable_dv.log...
/usr/bin/make -f /u01/app/oracle/rdbms/lib/ins_rdbms.mk dv_off ORACLE_HOME=/u01/app/oracle
/usr/bin/make -f /u01/app/oracle/rdbms/lib/ins_rdbms.mk ioracle ORACLE_HOME=/u01/app/oracle
启动监听器,此时Oracle通常已经自动启动。
[oracle@SimpleLinux lib]$ lsnrctl start
检查数据库,确保已启动。
7.3. 数据库中操作
结束link过程后,还需要进行数据库中一些对象的手工操作。在一些版本下,是需要将若干trigger手工禁用。笔者使用的版本不需要这样操作。
SQL>
alter trigger dvsys.dv_before_ddl_trg disable;
alter trigger dvsys.dv_after_ddl_trg disable;
确定自定义owner和manager的用户名称。
SQL> conn sys/oracle@ora11g as sysdba
SQL> select unique GRANTEE from dba_role_privs where GRANTED_ROLE in ('DV_ACCTMGR','DV_OWNER') and grantee <> 'DVSYS';
GRANTEE
------------------------------
DBVOWNER
DBVACCTMGR
在11gR1版本中,需要进行更新。
SQL>
update dvsys.config$ set status=0;
commit;
操作之前,确认recyclebin已经关闭,并且重新启动数据库。
SQL>
alter system set recyclebin=off scope=spfile;
shutdown immediate;
startup
执行vault卸载脚本,删除数据。
SQL> @?/rdbms/admin/dvremov.sql
作用:DVSYS and DVF users and DV roles are removed
删除自定义管理员和owner的用户数据。
SQL>
drop user dbvowner cascade;
drop user dbvacctmgr cascade;
如果在11gR1版本,需要手工执行网络ACL授权取消动作。在11gR2版本,这个过程已经纳入到脚本中不需要执行了。
SQL>
conn / as sysdba
exec DBMS_NETWORK_ACL_ADMIN.DROP_ACL ('/sys/acls/dvsys-network-privileges.xml');
commit;
开启recyclebin功能,重启动数据库。
SQL>
alter system set recyclebin=on scope=spfile;
startup force;
测试删除成功。
SQL> col parameter for a30;
SQL> select * from v$option where parameter='Oracle Database Vault';
PARAMETER VALUE
------------------------------ ------------
Oracle Database Vault FALSE
7.4. 结论
Oracle Vault是比较完备的数据权限、功能权限解决方案。在实际中是有很大的作用的。记录下卸载方法,留需要的朋友待查。