Oracle AdvancedSecurity新功能 =>Oracle Data Redaction
Oracle Data Redaction
对应用户权限的实时访问控制
根据用户的权限以及客户端信息,Redaction实时数据
修正应用代码代表在不必要的数据库中完成列访问的控制
根据客服中心以及技术支持的职责不同,对访问客户信息进行控制,以及控制表示对应PCIDSS的信用卡编号、控制应用开发者的直接访问等
受支持的Redaction的种类
根据用途定义数据的参考范围
Oracle Database的访问控制的特徴
Data Redaction
Virtual Private Database
Database Vault
功能概要
列的访问控制 &Redaction
行・列的访问控制
表的访问控制
特权用户管理
必要许可证
Advanced Security Option
Enterprise Edition
Database Vault Option
版本
12c~
8i~(列在10gR1)
10gR2~
对象访问
列(SELECT)
列・行(DML)
对象・SQL命令
説明
根据表中定义的Redaction对策的条件,不在列中展示,或者Redaction到任意值
根据表中定义的VPD对策的条件,自动追加WHERE语句,不表示出行。
这时还可以将特定的列表示为NULL
使用Realm、规则、命令规则等各种要素,访问对象(表、视图以及PL/SQL等),可以控制,并强制访问AQL命令自身的执行
特权用户
对策不适用
对策不适用
对任何用户都适用对策
设定
DBMS_REDACTpackage
或者、Oracle Enterprise Manager
DBMS_RLSpackage
或者、Oracle Enterprise Manager
DVSYS.DBMS_MACADMpackage
或者、Oracle Enterprise Manager
与Oracle Data Masking的差异
Oracle Data Masking
Oracle Data Redaction
安装方法
Oracle Enterprise Manager
DBMS_REDACTpackage
或者、Oracle Enterprise Manager
目的
直接对表masking,正式制成相近的测试数据
根据用户权限不同Redaction表以及视图的访问控制
执行时机
online
制成表、数据库的拷贝后,执行masking
online
实时理解查询结果
执行mask处理
存储数据的影响
永久变更数据
没有影响
Oracle Data Redaction的架构
对于表以及视图的Redaction对策,通过DBMS_REDACT procedure进行定义
对象中可以做到的列为CHAR/VARCHAR2、 NUMBER、 DATE、 BLOB/CLOB型
根据Redaction对策的条件将列Redaction到任意值
Redaction对策的制成
DBMS_REDACT.ADD_POLICY procedure
DBMS_REDACT.ADD_POLICY
object_schema
应用Redaction对策的schema名
object_name
应用Redaction对策的表或者视图名
policy_name
想制成的Redaction对策名
column_name
应用Redaction对策的列名
※想指定多个的话,请另外追加DBMS_REDACT.ADD_POLICY
function_type
DBMS_REDACT.FULL
DBMS_REDACT.RANDOMDBMS_REDACT.PARTIAL
DBMS_REDACT.REGEXP
expression
基于SYS_CONTEXT的值,定义Boolean型的条件式。
仅限条件的结果值为“True”时可以执行Redaction
function_parameters
使用DBMS_REDACT.PARTIAL时数据的IN与OUT的定义
regexp…….
function_type为DBMS_REDACT.REGEXP时的选项群
Expression(条件式)的制成方法
DB用户名为SCOTT的情况
SYS_CONTEXT(‘USERENV’,’SESSION_USER’) = ‘SCOTT’
IP地址为NULL的情况
SYS_CONTEXT(’SERENV’,’IP_ADRESS’) IS NULL
客户端信息中不包含MGR的用户名的情况
SYS_CONTEXT(’USERENV’, CLIENT_IDENTIFIER’) not like ‘MGR%’
用户没有MGR 角色的情况
SYS_CONTEXT(‘SYS_SESSION_ROLES’,’MGR’) = FALSE
Full Redaction (full・Redaction)
除HR用户之外在访问EMPLOYEES表的SALARY列时执行Redaction
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => ‘HR',
object_name => ‘EMPLOYEES',
policy_name => ‘EMPLOYEE _POLICY_SAL’,
expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ‘’HR''',
column_name => ‘SALARY',
function_type => DBMS_REDACT.FULL);
END;
执行结果
SELECT SALARY FROM EMPOYEES;
SALARY
--------------
0
根据数据型,用固定值来执行Redaction以下为初始值。可以变更为任意值
文字列: 单一空间
数值: 零(0)
日期: 01-JAN-01
LOB: [redacted]
Random Redaction(随机・Redaction)
除HR用户之外在访问EMPLOYEES表的SALARY列时执行Redaction
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema=> ‘HR',
object_name=> ‘EMPLOYEES',
policy_name=> ‘EMPLOYEE _ POLICY_EMPID’,
expression=> 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ‘’HR''',
column_name=> ‘EMPLOYEE_ID ',
function_type=> DBMS_REDACT.RANDOM);
END;
执行结果
SELECT EMPLOYEE_ID FROM EMPOYEES;
EMPLOYEE_ID
-----------------------
167
根据不同数据型,根据各自的形式来Redaction
文字列: 随机文字
数值: 随机数值
日期: 随机日期
LOB: 无法使用
Partial Redaction (部分Redaction)
通过SQL*PLUS访问EMPLOYEES表的PHONE_NUMBER列时使其Redaction
BEGIN
DBMS_REDACT.ADD_POLICY (
object_schema=> ‘HR',
object_name => ‘EMPLOYEE ',
policy_name => ‘EMPLOYEE _ POLICY_PHONE',
expression => 'UPPER(SYS_CONTEXT(''USERENV'',''MODULE'')) like ''%SQL*PLUS%''',
column_name => ' PHONE_NUMBER ',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => ‘VVVFVVVFVVVV,VVV-VVV-VVVV,*,1,6 ');
END;
执行结果
SELECT PHONE_NUMBER FROM EMPOYEES;
PHONE_NUMBER
----------------------------
***-***-8080
根据数据型以及各自的不同形式来Redaction
文字列: Redaction为一部分任意字符串
数值: 将一部分Redaction为任意值
日期: 将一份Redaction为任意日期
LOB : 无法使用
Function_parameters的设定方法
3528 3589 1231 0001=》****-****-****-0001
部分Redaction字符串的情况
function_parameters => ‘VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,*,1,12’,
– Input format –> 定义现在的格式。V是Redaction可能、F为固定格式
– Output format –> Redaction后的格式定义。 V为可以Redaction hyphen等固定化的字符
-Mask Character –> 表示Redaction结果的字符
— Starting digit position –> Redaction的开始位置
– Ending digit position –> Redaction终止位置。Input中包含F的话无法计数
部分Redaction数字的情况
0123456789 =》9999456789
function_parameters => ‘9,1,4’
-Mask Character –> 表示Redaction结果的字符
— Starting digit position –> Redaction的开始位置
– Ending digit position –> Redaction终止位置。Input中包含F的话无法计数
Regular Expression-based Redaction(正式表现Redaction)
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema=> ‘HR',
object_name => ‘'EMPLOYEES',
policy_name => ‘'EMPLOYEE _POLICY_REG',
expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ‘HR''',
column_name => ‘'PHONE_NUMBER',
function_type => DBMS_REDACT.REGEXP,
regexp_pattern => '([0-3][0-3][0-3])',
regexp_replace_string=> ‘***',
regexp_position => 1,
regexp_occurrence => DBMS_REDACT.RE_ALL,
regexp_match_parameter => 'i');
END;
执行结果
SELECT PHONE_NUMBER FROM EMPOYEES
PHONE_NUMBER
------------------------
650.###.5234
650.124.###4
EMPLOYEES表的PHONE_NUMBER列的值中如果存在0-3,3行连续数字的话,就会对那个值进行Redaction
正则表现的指定方法
仅仅Redaction特定数值的情况
603.123.6666=》603.###.6666
– regexp_pattern => ‘([0-3][0-3][0-3])’
定义合适数据的搜索模式。意味着0-3的数字是连续排列的
– regexp_replace_string => ‘#’
定义适合情况的Redaction字符
– regexp_position => 1
指定搜索开始位置
– regexp_occurrence => 0
Redaction次数。如果是0的话就将适合的部分全部转换
– regexp_match_parameter => ‘i‘
指定合适的方法。比如i可以识别大小写
Redaction对策的列追加
DBMS_REDACT.ALTER_POLICY procedure
DBMS_REDACT.ADD_POLICY
object_schema
Redaction对策中追加的schema名
object_name
追加Redaction对策的表或者视图名
policy_name
追加的Redaction对策名
action
DBMS_REDACT.ADD_COLUMN
column_name
追加Redaction对策的列名
function_type
DBMS_REDACT.FULL
DBMS_REDACT.RANDOMDBMS_REDACT.PARTIAL
DBMS_REDACT.REGEXP
function_parameters
所有DBMS_REDACT.PARTIAL时,数据的IN与OUT的定义
regexp…….
function_type DBMS_REDACT.REGEXP的情况的选项群
※条件为使用通过DBMS_REDACT.ADD_POLICY制成的项目
追加Redaction对策列
在EMPLOYEES表的EMPLOYEE_ID列中制成Redaction对策
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema =>'HR ',
object_name =>'EMPLOYEES',
policy_name =>'EMPLOYEE _POLICY_EMPID',
expression =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') !=''HR''',
column_name => 'EMPLOYEE_ID',
function_type => DBMS_REDACT.RANDOM);
END;
PL/SQL procedure正常完成。
追加PHONE_NUMBER列
BEGIN
DBMS_REDACT.ALTER_POLICY (
object_schema =>'HR ',
object_name =>'EMPLOYEES',
policy_name =>'EMPLOYEE _POLICY_EMPID',
action => DBMS_REDACT.ADD_COLUMN,
column_name => 'PHONE_NUMBER',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'VVVFVVVFVVVV,VVV-VVV-VVVV,*,1,6');
END;
PL/SQL procedure正常完成。
删除Redaction对策
DBMS_REDACT.DROP_POLICY procedure
DBMS_REDACT.DROP_POLICY
object_schema
删除Redaction对策的schema名
object_name
删除Redaction对策的表、或者视图名
policy_name
想删除的Redaction对策名
BEGIN
DBMS_REDACT.DROP_POLICY (
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'EMPLOYEE _POLICY_SAL');
END;
PL/SQL procedure正常完成。
Oracle Data Redaction的限制
仅限表中可以定义的一个Redaction对策
表中设定了Redaction对策的话,就会对那个表派生的视图进行Redaction
对以下的数据库的操作不执行Redaction
Backup, Restore
Export, Import
Upgrade, Patch
Dataguard, Replication
拥有SYSDBA权限的用户不会被Redaction
拥有系统权限 EXEMPT REDACTION POLICY的用户不会被Redaction
制成物化视图,刷新时不会被Redaction
前提是适当管理数据库的权限
想控制SYSDBA的强制访问的话需要通过同时使用Oracle Database Vault来实现
Oracle Data Redaction的负载
验证环境
纯粹作为数据库的过载的处理时间=> Elapsed Time
作为应用的总计过载所花费的处理时间=>响应时间
Redaction的种类差异
Redaction的对象列数造成的差异
实际应用情况
通过连接的用户所拥有的角色来控制,不需要对应用进行修改,通过
expression => ‘SYS_CONTEXT(’‘SYS_SESSION_ROLES’‘,’‘MGR’‘) = ’‘FALSE’‘‘来控制
数据库审计新功能Unified Auditing
传统的数据库审计功能的课题audit_trail架构
需要通过Audit命令来进行细致设置
无法获得指定的会话信息中限制的日志
担心由于Audit对性能造成的影响
由于数据库的功能以及utility输出地址也不同
不仅是传统的AUDIT功能扩展,还需要
“使用便利性”&”高速”新架构
Unified Auditing简答&高速, 新设计的数据库审计功能
与传统的审计功能的比较
传统
Unified Auditing(12c)
1.审计的定义
用每个审计对象进行定义
用对策定义
可以使用一个对策中审计DB中的所有内容
2.审计条件
无法指定
可以指定条件与以及审计频率
3.审计用户的指定
可以通过BY指定审计用户
可以通过BY指定审计用户
可以通过EXCEPT排除审计用户
4.初始化参数
必须设定
不需要设定
5.审计记录
・SYS.AUD$与SYS.FGA_LOG$
・OS审计记录文件
・DB审计记录文件
・XML形式的OS审计记录文件
・作为AUDSYS schema,在SYSAUX表区域中存储
在审计记录文件中存储、可以输入到UNIFIED_AUDIT_TRAIL中
Unified Auditing的新架构 2个的SGA队列造成的并列处理非同步写入
无法刷新时的架构
防止遗漏日志
无法刷新SYSAUX时,就会作为二进制文件写入到$ORACLE_BASE/audit /$ORACLE_SID中
被输出的审计文件可以通过UNIFIED_AUDIT_TRAILDBMS_AUDIT_MGMT.
LOAD_UNIFIED_AUDIT_FILES输入
输入完成后,删除审计文件
审计日志的写入方法
同步・非同步模式
写入方法
特性
Queued-write mode
队列写入
•通过SGA队列的非同步写入方法
•默认
•通过UNIFIED_AUDIT_SGA_QUEUE_SIZE参数,可以将SGA队列的尺寸从1MB扩展到30MB。默认值为1MB
•实例故障以及SHUTDOWN ABORT等等
数据库没有正常关闭时,SGA队列中可能失去审计日志
Immediate-write mode
即时写入
•传统的同步写入方法
•可以获得所有日志,但可能对性能造成影响
审计日志的写入方法的设定
DBMS_AUDIT_MGMTpackage
Queued-write mode的设定
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE, DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);
END;
Immediate-write mode的设定
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE, DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);
END;
审计对策的制成~有效化
审计对策的制成
CREATE AUDIT POLICY对策名
ROLES 角色名,・・
PRIVILEGES 系统权限,・・
ACTIONS 对象权限 ON 对象名,・・
ACTIONS COMPONENT = DATAPUMP, DV, DIRECT_LOAD, OLS
WHEN 执行审计的条件
EVALUATE PER [STATEMENT, SESSION, INSTANCE]
CONTAINER = [CURRENT, ALL]
审计对策的有效化
AUDIT POLICY对策名[ BY,EXCEPT ] 用户名
条件式的制成例通过WHEN句指定审计条件
以前只能通过Fine-grained审计指定的审计条件,现在可以也通过Unified Auditing完成
审计条件
仅限本地连接
SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’) IS NULL
应用为SQL*Plus
SYS_CONTEXT(‘USERENV’,’MODULE’) =‘SQL*Plus’
连接客户端在Client001之外
SYS_CONTEXT(‘’USERENV’,HOST’) <> ‘Client001’
OS用户在Oracle之外
SYS_CONTEXT(‘’USERENV’,OS_USER’) <> ‘oracle’
客户端识别码格式为ID_XXXX
SYS_CONTEXT(’USERENV’, CLIENT_IDENTIFIER’)
like ‘ID_%’
没有ADMIN的角色
SYS_CONTEXT(‘SYS_SESSION_ROLES’,’ADMIN’) =FALSE
※ 列単位中的审计条件、执行审计后的操作仅限(例发送邮件等) Fine-grained审计
审计对策制成例
以数据库的所有的操作为对象
CREATE AUDIT POLICY all_actions ACTIONS ALL;
AUDIT POLICY all_actions ;
以对HR用户的EMPPLOYEES表的所有的操作为对象
CREATE AUDIT POLICY all_actions_emp ACTIONS ALL ON HR.EMPLOYEES;
AUDIT POLICY all_actions_emp;
(条件)本地连接的情况中以特定的系统权限、以表的访问为对象
CREATE AUDIT POLICY custom_audit
PRIVILEGES SELECT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE
ACTIONS ALL ON SCOTT.EMP, ALL ON SCOTT.DEPT
WHEN ‘SYS_CONTEXT(”USERENV”,”IP_ADDRESS”) IS NULL’
EVALUATE PER STATEMENT;
AUDIT POLICY custom_audit;
通过一个视图访问所有的审计日志
UNIFIED_AUDIT_TRAIL
UNIFIED_AUDIT_TRAIL的主要項目
说明
例
AUDIT_TYPE
审计类型
Standard,
Fine Grained Audit
Database Vault
RMAN AUDIT
Data Pump
SESSIONID
审计会话中被分配的识别ID
650971863
OS_USERNAME
OS用户名 (连接客户端)
oracle
USERHOST
主机名 (连接客户端)
client001.jp.oracle.com
TERMINAL
端末的识别码 (连接客户端)
pts/1
INSTANCE_ID
实例编号
1
DBID
Database的识别ID
1417811312
AUTHENTICATION_TYPE
会话用户的认证类型
(TYPE=(DATABASE));(CLIENT ADDRESS=((ADDRESS=(PROTOCOL=tcp)(HOST=10.185.146.20)(PORT=50713))));
DBUSERNAME
数据库用户名
SCOTT
説明
例
CLIENT_PROGRAM_NAME
客户端程序名
[email protected] (TNS V1-V3)
DBLINK_INFO
数据库链接信息
SOURCE_GLOBAL_NAME=dblink_src_global_name…..
EVENT_TIMESTAMP
event时间(UTC)
13-04-25 15:16:45.513780000
ACTION_NAME
action名
SELECT,INSERT, UPDATE,EXECUTE….
CREATE USER, LOGOFF,LOGON…..
RETURN_CODE
错误编号 (ORA-XXXXX)
1031
OS_PROCESS
OS的进程编号
30422
SCN
System Change Number
5742707
OBJECT_SCHEMA
受到action影响的schema名
HR
OBJECT_NAME
受到action影响的对象名
EMPLOYEES
SQL_TEXT
被执行的SQL
select count(*) from emp where empno=:v1
SQL_BINDS
SQL_TEXT中包含的bind变量的值
#1(7):1001
APPLICATION_CONTEXTS
应用context值
custno_ctx
CLIENT_IDENTIFIER
会话中被设定的客户端识别码
app001
説明
例
UNIFIED_AUDIT_POLICIES
审计日志的出力对策名
ORA_SECURECONFIG
FGA_POLICY_NAME
审计日志的出力FGA名
FGA_EMP_POLICY
DV_XXXXX (略)
Database Vault相关的日志信息
RMAN_XXXX (略)
Recovery Manager相关的日志信息
DP_XXXX (略)
Data Pump相关的日志信息
DIRECT_PATH_NUM_COLUMNS_LOADED
SQL*Loader Direct Path Load 相关的日志信息
OLS_XXXX (略)
Oracle Lable Security相关的日志信息
XS_XXXX (略)
Oracle Real Application Security相关的日志信息
审计对策的无效化~删除
审计对策的无效化
NOAUDIT POLICY对策名
审计对策的删除
DROP AUDIT POLICY对策名
NOAUDIT POLICY all_actions_emp;
审计取消成功。
drop audit policy all_actions_emp;
审计对策已删除。
完成定义的默认对策
ORA_SECURECONFIG
PRIVILEGES
ALTER ANY TABLE
CREATE ANY TABLE
DROP ANY TABLE
CREATE ANY PROCEDURE
DROP ANY PROCEDURE
ALTER ANY PROCEDURE,
GRANT ANY PRIVILEGE
GRANT ANY OBJECT PRIVILEGEGRANT ANY ROLE
AUDIT SYSTEM
CREATE EXTERNAL JOB
CREATE ANY JOB
CREATE ANY LIBRARY
EXEMPT ACCESS POLICY
CREATE USER
DROP USER
ALTER DATABASE
ALTER SYSTEM
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
CREATE ANY SQL TRANSLATION PROFILE
ALTER ANY SQL TRANSLATION PROFILE
DROP ANY SQL TRANSLATION PROFILE
TRANSLATE ANY SQL
EXEMPT REDACTION POLICY
ADMINISTER KEY MANAGEMENT
PURGE DBA_RECYCLEBIN
LOGMINING
ACTIONS
ALTER USER
CREATE ROLE
ALTER ROLE
DROP ROLE
SET ROLE
CREATE PROFILE
ALTER PROFILE
DROP PROFILE
CREATE DATABASE LINK
ALTER DATABASE LINK
DROP DATABASE LINK
LOGON
LOGOFF
CREATE DIRECTORY
DROP DIRECTORY
強制的审计的用户、命令
管理者的访问、审计设定的变更历史为默认审计
用户
SYS, SYSDBA, SYSOPER
SYSASM, SYSBACKUP, SYSDG, SYSKM
命令
CREATE AUDIT POLICY
ALTER AUDIT POLICY
DROP AUDIT POLICY
AUDIT, NOAUDIT
EXECUTE DBMS_FGA, DBMS_AUDIT_MGMT
ALTER TABLE (AUDSYS用户拥有的表)
RMAN event的审计
执行RMAN命令
$ rman target /
RMAN> backup tablespace users;
RMAN> restore tablespace users;
RMAN> recover tablespace users;
参考UNIFIED_AUDIT_TRAIL的RMAN列
SELECT event_timestamp,action_name,rman_operation,rman_object_type FROM unified_audit_trail
WHERE rman_operation IS NOT NULL;
EVENT_TIMESTAMP ACTION_NAME RMAN_OPERATION RMAN_OBJECT_TYPE
———————————————————————————————————————————————-
13-02-14 02:19:26 RMAN ACTION Backup DF Full
13-02-14 02:19:26 RMAN ACTION Restore DF Full
13-02-14 02:19:26 RMAN ACTION Recover DF Full
Data pump event的审计
设定Datapump的对策
SQL> CREATE AUDIT POLICY audit_dp_all_pol ACTIONS COMPONENT=DATAPUMP ALL;
SQL> AUDIT POLICY audit_dp_all_pol;
EXPORT的执行
$ expdp scott/tiger dumpfile=scott_tables tables=emp,dept directory=dp_dir
Export: Release 12.1.0.1.0 - Production on 木 2月 14 11:44:52 2013
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
连接地址: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics, Real Application Testing and Unified Auditing options
启动"SCOTT"."SYS_EXPORT_TABLE_01":
scott/******** dumpfile=scott_tables tables=emp,dept directory=dp_dir
・・
. . “SCOTT”.“DEPT” 6 KB 4行被输出
. . “SCOTT”.“EMP” 8.671 KB 12被输出
主表“SCOTT”.“SYS_EXPORT_TABLE_01”正常加载/卸载完成
******************************************************************************
参考UNIFIED_AUDIT_TRAIL 的DP列
SELECT event_timestamp,dp_text_parameters1,dp_boolean_parameters1
FROM unified_audit_trail WHERE dp_text_parameters1 is not null
EVENT_TIMESTAMP
--------------------------------
13-02-14 11:44:56
DP_TEXT_PARAMETERS1
------------------------------------------------------------------------------------------------------------------------------------------------
MASTER TABLE: "SCOTT"."SYS_EXPORT_TABLE_01" , JOB_TYPE: EXPORT, METADATA_JOB_MODE: TABLE_EXPORT,JOB VERSION: 12.0.0.0.0, ACCESS METHOD: AUTOMATIC,
DATA OPTIONS: 0, DUMPER DIRECTORY: NULL REMOTE LINK: NULL, TABLE EXISTS: NULL,
PARTITION OPTIONS: NONE
DP_BOOLEAN_PARAMETERS1
------------------------------------------------------------------------------------------------------------------------------------------------
MASTER_ONLY: FALSE, DATA_ONLY: FALSE, METADATA_ONLY: FALSE,
DUMPFILE_PRESENT: TRUE, JOB_RESTARTED: FALSE
SQL*Loader Direct Path Load event的审计
设定SQL*Loader Direct Path Load的对策
SQL> CREATE AUDIT POLICY audit_sqlldr_load_pol ACTIONS COMPONENT=DIRECT_LOAD LOAD;
SQL> AUDIT POLICY audit_sqlldr_load_pol ;
执行SQL*Loader Direct Path Load
$ sqlldr userid=hr/hr control=emp.ctl data=emp.csv direct=y
参考UNIFIED_AUDIT_TRAIL
select event_timestamp,audit_type,dbusername,action_name,object_schema,object_name,sql_text,
direct_path_num_columns_loaded from unified_audit_trail where audit_type='Direct path API‘
EVENT_TIMESTAMP AUDIT_TYPE ACTION_NAME OBJECT_SCHEMA OBJECT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------
13-02-14 13:05:31 Direct path API LOAD HR EMP
SQL_TEXT
----------------------------------------------------------------------------------------------------------------------------------------------
INSERT /*+ SYS_DL_CURSOR */ INTO "HR"."EMP" ("EMP_ID","EMP_NAME") VALUES (NULL,NULL)
DIRECT_PATH_NUM_COLUMNS_LOADED
--------------------------------------------------------------
2
审计DatabaseVault event
设定Database Vault的对策
对象: Realm, the rule set, factor
访问失败/成功等
SQL> CREATE AUDIT POLICY audit_dv ACTIONS COMPONENT=DV Realm Violation
ON “HR Application”;
SQL> AUDIT POLICY audit_dv;
参考UNIFIED_AUDIT_TRAIL 的DV列
SELECT dbusername,object_name,sql_text,dv_action_name FROM unified_audit_trail
WHERE db_return_code <> 0;
DBUSERNAME OBJECT_NAME SQL_TEXT DV_ACTION_NAME
-----------------------------------------------------------------------------------------------------------------------------------------------
HR EMPLOYEE select * from hr.employee Realm Violation Audit
Mixed Mode Auditing
下位兼容性support
12c的数据库可以使用传统的Audit或者Unified Auditing
安装时都是以可以使用的Mixed 模式来运行
Mixed 模式的情况下,AUDIT_SYS_OPERATION的SYSDBA的日志文件在
传统OS的目录中被输出
另外,RMAN以及Datapump等的utility的日志无法在Unified Auditing中整合
确认审计模式
SELECT VALUE FROM V$OPTION WHERE PARAMETER = ‘Unified Auditing’;
——————————————-
TRUE –> Unified Auditing
FALSE –> Mixed Mode
Mixed模式因为Unified Auditing的对象范围被Audit Policy限制了,所以推荐以以下顺序完成
关闭数据库、终止listener
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
启动listener、数据库的起動
只想使用传统的Audit时,以Mixed模式使得所有的Unified Audit对策无效化,通过audit_trail参数与Audit命令来设定
追加的AUDIT专用角色
数据库利用者与审计的权限分离
对跨越间隔的审计日志进行清理
DBMS_AUDIT_MGMT package
指定基准日期时间
BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
LAST_ARCHIVE_TIME => '2013-02-15 10:00:00.00');
END;
制成对超过了两周(336H)的审计日志进行清理的job
BEGIN
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
AUDIT_TRAIL_PURGE_INTERVAL => 336,
AUDIT_TRAIL_PURGE_NAME => 'Audit_Trail_Purge_Job’,
USE_LAST_ARCH_TIMESTAMP => TRUE);
END;
审计日志的归档
清理之前,对审计日志进行备份的方法
在UNIFIED_AUDIT_TRAIL视图中作为其他表来抽出,取出EXPDP
归档到Oracle Audit Vault and Database Firewall (12.1.1)
Unified Auditing的负载
查看・更新SQL造成的差异
OTLP应用的情况
Unified Auditing中生成的日志尺寸SYSAUX表区域的尺寸
权限管理新功能Privilege Analysis
Privilege Analysis
不正常访问的原因一般都是检测到过度的权限赋予
清理出赋予用户以及角色的系统权限、对象权限,确认是否使用,进行报告
赋予应用以及开发者・管理者真正需要的权限
原则上以最小权限来实现。防止不正常访问
权限分析的对象
找出被执行的系统/对象权限
角色
分析指定角色权限的使用状況 (可以指定多个)
条件指定
分析适合指定条件的情况,分析权限的使用状況
(特定的用户以及应用等)
角色+条件指定
适合指定角色以及条件的情况,分析权限的使用状況
数据库
分析数据库内的所有的权限的使用状況
(除去SYS用户)
权限分析的顺序
通过DBMS_PRIVILEGE_CAPTURE开始捕获
制成分析对策
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
name
对策名
description
说明(任意)
type
选择任意一个
DBMS_PRIVILEGE_CAPTURE.G_DATABASE
DBMS_PRIVILEGE_CAPTURE.G_ROLE
DBMS_PRIVILEGE_CAPTURE.G_CONTEXT
DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT
roles
Ex) role_name_list(‘role1’, ‘role2’)
condition
Ex) SYS_CONTEXT(”USERENV”, ”SESSION_USER”)=‘SCOTT’
分析对策的有效化
DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (‘对策名‘)
权限分析的顺序捕获终止~报告
分析对策的无效化
EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE (‘对策名)
分析报告的制成 (执行后,可以在专用的视图中查看分析结果)
EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (‘对策名‘)
分析报告的删除 (会删除已制成的报告的信息)
EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE(‘对策名‘)
Privilege Analysis的专用视图
结果表
説明
DBA_USED_PRIVS
DBA_UNUSED_PRIVS
所有的使用/未使用的权限。
(包含系统权限、用户权限、对象权限与PUBLIC权限)
DBA_USED_OBJPRIVS
DBA_UNUSED_OBJPRIVS
DBA_USED_OBJPRIVS_PATH
DBA_UNUSED_OBJPRIVS_PATH
所有的使用/未使用的对象权限。
对有「PATH」的表赋予权限。
DBA_USED_SYSPRIVS
DBA_UNUSED_SYSPRIVS
DBA_USED_SYSPRIVS_PATH
DBA_UNUSED_SYSPRIVS_PATH
所有的使用/未使用的系统权限。
对有「PATH」的表赋予权限
DBA_USED_PUBPRIVS
所有的使用过的PUBLIC权限。
DBA_USED_USERPRIVS
DBA_UNUSED_USERPRIVS
DBA_USED_USERPRIVS_PATH
DBA_UNUSED_USERPRIVS_PATH
所有的使用/未使用的用户权限。
「对有「PATH」的表赋予权限
例)用户没有Any权限的调査
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
name => 'ANY_priv_analysis_pol',
type => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
condition => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''APP_USER''');
END;/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('ANY_priv_analysis_pol');
-----处理执行-----
EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('ANY_priv_analysis_pol');
EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT('ANY_priv_analysis_pol');
SELECT USERNAME, SYS_PRIV, OBJECT_OWNER, OBJECT_NAME FROM DBA_USED_PRIVS;
USERNAME SYS_PRIV OBJECT_OWNER OBJECT_NAME
---------------- ---------------------------- ----------------------- -----------------------
APP_USER SELECT ANY TABLE HR EMPLOYEES
APP_USER CREATE SESSION
APP_USER SYS ORA$BASE
APP_USER SYS DUAL
发现APP_USER以
SELECT ANY TABLE权限在
HR用户的EMPLYEES表中访问过
-> SELECT ANY TABLE是否不必要?
例) 调查DBA角色的使用状況
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
name => 'dba_role_analysis',
type => DBMS_PRIVILEGE_CAPTURE.G_ROLE,
roles => role_name_list('dba'));
END;/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE('dba_role_analysis');
-----处理执行-----
EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE('dba_role_analysis');
EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT('dba_role_analysis');
SELECT USERNAME, USED_ROLE,SYS_PRIV,PATH FROM DBA_USED_SYSPRIVS_PATH;
USER USED_ROLE SYS_PRIV PATH
---------- ---------------------------- ----------------------- -----------------------
SCOTT OLAP_DBA DROP ANY TABLE SYS.GRANT_PATH(SCOTT,DBA,OLAP_DBA)
SELECT USERNAME, SYS_PRIV, OBJECT_OWNER, OBJECT_NAME FROM DBA_USED_PRIVS
USERNAME SYS_PRIV OBJECT_OWNER OBJECT_NAME
---------------- ---------------------------- ----------------------- -----------------------
SCOTT SELECT ANY TABLE HR TEST
SCOTT用户使用
DROP ANY TABLE权限
(DBA - >OLAP_DBA角色)
删除了HR用户的TEST表
Database Vault新功能
Oracle Database Vault特权用户管理
控制数据库内的特权用户(SYS用户、DBA角色等)的強制访问
特权用户无法访问应用数据
将应用进行bypass的访问,也可以在数据库中包含数据
可以制成包含用户以及IP地址等等的客户端信息以及星期几・时间等详细信息的对策
提供SAP以及SIEBEL等的应用的访问对策的提供
DV的起动设定
默认已经安装好所有必须的部件
制成DV的管理者用户与账户管理者 (提供SYS用户执行)
GRANT CREATE SESSION TO dbv_owner IDENTIFIED BY password;
GRANT CREATE SESSION TO dbv_acctmgr IDENTIFIED BY password;
BEGIN
DVSYS.CONFIGURE_DV (
dvowner_uname => 'dbv_owner',
dvacctmgr_uname => 'dbv_acctmgr');
END;
DV的有效化 (需要以DV管理者执行、重启)
EXEC DVSYS.DBMS_MACADM.ENABLE_DV;
DV的无效化 (需要以DV管理者执行、重启)
EXEC DVSYS.DBMS_MACADM.DISABLE_DV;
切断特权用户的访问
通过Realm理论地定义对象防御范围
为了访问Realm中的对象,需要满足
Realm的认可、规则的許可、对象的访问权等条件
強制Realm
更严格的、不遗漏的默认隔断
对于对象的所有者(制成者)、即使是有对象权限的用户,
只要Realm不认可,就不能访问
对应Multi-tenant架构更安全地管理集约数据库