原文:http://www.ixdba.com/html/ycategory/database-oracle/page/2/
http://yangtingkun.itpub.net/post/468/476185
database vault可通过下列方法解决一些最为常见的安全问题和内部威胁:
·限制特权DBA,如sysdab以及有select any table的授权用户访问应用程序数据。
·防止应用程序 DBA 操纵数据库和访问其他应用程序。
·更好的控制何人、何时、何地可以访问应用程序。
Oracle Database Vault体现出来的三权为:
管理dba:通常是sysdba,如果安装并激活了database vault,sysdba的权限将大大减少,操作系统认证也将失效,没有alter user等等特权,不能查看由Oracle Database Vault保护起来的业务数据。举一个例子,你有一个业务用户叫HR,已经被database vault给保护起来了,你就是有再大的查看权限,如select any table,你也查看不了HR用户下的数据。所以,管理dba的作用就是启动关闭数据库,管理数据文件,管理表空间等等。
应用或者是开发dba:因为不能通过OS认证登陆数据库,所以,他们在没有sys等特权用户的密码的情况下,是不能管理数据库的。但是,他们知道应用用户的密码,如能登陆HR用户,看到HR用户下的数据。但是,每个用户也是分割的,如HR用户可以看到HR下面的数据,但是不能看到finance用户下的数据。
审计用户/管理员:这个用户可以配置database vault策略,也拥有一些alter user之类的特权命令的执行权,他们还可以查看管理dba与开发dba的一些违规操作。但是,最主要的是,他们要指定好策略,实现上面所说的,更好的控制何人、何时、何地可以访问应用程序。如,可以规定,这个数据库的某个用户数据,只能在特定的IP地址的机器上能访问;也可以规定,比如财务数据,只能从早上8点到晚上18点能接受访问,其它时间任何人都不能访问到该数据。
Oracle Database Vault是甲骨文公司安全产品系列的一个组成部分,可与Oracle标记安全(OracleLabel Security)、Oracle透明数据加密(Oracle Transparent Data Encryption)、Oracle虚拟专有数据库(Oracle Virtual Private Database)、Oracle安全备份(Oracle Secure Backup)等其他Oracle数据库安全产品一起使用,以实现更高级别的信息保护。
现在database vault遭遇到的最大的困难可能还是可靠度方面以及性能方面的问题,到底有多少人用到了这个东西,是否有bug,性能影响到底有多大等等。在性能方面,因为它会改变select语句的行为(权限),我怀疑一个策略的改变将引发众多语句的重新编译,这个情况在高可用的OLTP环境中则是比较恐怖的。
实例:
ORACLE DATABASE VAULT组件就具备这样的功能:
SQL> CONN SYS@YTK111 AS SYSDBA输入口令: ****已连接。
SQL> SHOW USER
USER 为 "SYS"
SQL> SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';
PARAMETER VALUE
---------------------------------------- -------------------------
Oracle Database Vault TRUE
SQL> CREATE USER TEST IDENTIFIED BY TEST;
CREATE USER TEST IDENTIFIED BY TEST
*第 1 行出现错误:
ORA-01031: 权限不足
SQL> GRANT CONNECT, RESOURCE TO YANGTK;
GRANT CONNECT, RESOURCE TO YANGTK
*第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-47401: grant role privilege (在 CONNECT. 上) 的领域违规
ORA-06512: 在 "DVSYS.AUTHORIZE_EVENT", line 55
ORA-06512: 在 line 31
可以看到,在ORACLE DATABASE VAULT的默认情况下,SYS用户甚至连创建用户和授权的权限都没有了。
当前SYS还是可以做一些数据库级或实例级的维护和管理操作的:
SQL> SHOW PARAMETER OPEN_CURSORS
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 300
SQL> ALTER SYSTEM SET OPEN_CURSORS = 500;
系统已更改。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> CREATE TABLESPACE TEST DATAFILE 'E:ORACLEORADATAYTK111TEST01.DBF' SIZE 100M;
表空间已创建。
只是和用户创建、授权等相关的权限从SYS和SYSTEM等DBA用户中被移除。在VAULT中,有了一个新增的用户DVSYS专门负责这部分权限的管理:
SQL> CONN DVSYS@YTK111输入口令: ****已连接。
SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE TEST;
用户已创建。
SQL> GRANT CONNECT TO TEST;
授权成功。
SQL> CONN SYS@YTK111 AS SYSDBA输入口令: ****已连接。
SQL> GRANT RESOURCE TO TEST;
授权成功。
SYS和DVSYS二者各司其职,SYS没有创建用户、赋予CONNECT角色的权限,而DVSYS则没有权限授予UNLIMITED TABLESPACE和CREATE TABLE等系统权限。
SQL> CONN TEST@YTK111输入口令: ****已连接。
SQL> CREATE TABLE T (ID NUMBER);
表已创建。
SQL> INSERT INTO T VALUES (1);
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> CONN SYS@YTK111 AS SYSDBA输入口令: ****已连接。
SQL> SELECT * FROM TEST.T;
ID
----------
1
默认情况下SYS是可以访问其他用户下对象的。下面通过建立REALM,使得用户数据得到保护:
SQL> CONN DVSYS@YTK111输入口令: ****已连接。
SQL> EXEC DBMS_MACADM.CREATE_REALM('TEST_REALM', 'REAML FOR TEST', 'Y', 0)
PL/SQL 过程已成功完成。
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM('TEST_REALM', 'TEST', '%', '%')
PL/SQL 过程已成功完成。
创建了一个名为TEST_REALM的REALM,然后将TEST用户的所有对象放到这个REALM中,下面再次尝试利用SYS访问TEST用户下的对象:
SQL> CONN SYS@YTK111 AS SYSDBA输入口令: ****已连接。
SQL> SELECT * FROM TEST.T;
SELECT * FROM TEST.T
*第 1 行出现错误:
ORA-01031: 权限不足
可以看到,这时SYS已经没有权限去访问TEST用户下的对象了。这说明通过VAULT中REALM的保护,DBA已经没有权限看到业务用户下的敏感数据了。
这里展示的只是VAULT包含敏感数据的一个小例子,VAULT在安全性方面的功能远不止这些,比如VAULT可以限制访问为本地访问、可以限制访问的时间区域,可以限制访问的IP范围等等。