oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论

01fac6460a22031b8af8da5848698a70.png

Oracle AdvancedSecurity新功能 =>Oracle Data Redaction

Oracle Data Redaction

对应用户权限的实时访问控制

根据用户的权限以及客户端信息,Redaction实时数据

修正应用代码代表在不必要的数据库中完成列访问的控制

根据客服中心以及技术支持的职责不同,对访问客户信息进行控制,以及控制表示对应PCIDSS的信用卡编号、控制应用开发者的直接访问等

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第1张图片

受支持的Redaction的种类

根据用途定义数据的参考范围

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第2张图片

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到任意值

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第3张图片

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

作为应用的总计过载所花费的处理时间=>响应时间

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第4张图片

Redaction的种类差异

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第5张图片

Redaction的对象列数造成的差异

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第6张图片

实际应用情况

通过连接的用户所拥有的角色来控制,不需要对应用进行修改,通过

expression => ‘SYS_CONTEXT(’‘SYS_SESSION_ROLES’‘,’‘MGR’‘) = ’‘FALSE’‘‘来控制

数据库审计新功能Unified Auditing

传统的数据库审计功能的课题audit_trail架构

需要通过Audit命令来进行细致设置

无法获得指定的会话信息中限制的日志

担心由于Audit对性能造成的影响

由于数据库的功能以及utility输出地址也不同

不仅是传统的AUDIT功能扩展,还需要

“使用便利性”&”高速”新架构

Unified Auditing简答&高速, 新设计的数据库审计功能

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第7张图片

与传统的审计功能的比较

传统

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队列造成的并列处理非同步写入

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第8张图片

无法刷新时的架构

防止遗漏日志

无法刷新SYSAUX时,就会作为二进制文件写入到$ORACLE_BASE/audit /$ORACLE_SID中

被输出的审计文件可以通过UNIFIED_AUDIT_TRAILDBMS_AUDIT_MGMT.

LOAD_UNIFIED_AUDIT_FILES输入

输入完成后,删除审计文件

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第9张图片

审计日志的写入方法

同步・非同步模式

写入方法

特性

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

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第10张图片

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专用角色

数据库利用者与审计的权限分离

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第11张图片

对跨越间隔的审计日志进行清理

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)

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第12张图片

Unified Auditing的负载

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第13张图片

查看・更新SQL造成的差异

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第14张图片

OTLP应用的情况

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第15张图片

Unified Auditing中生成的日志尺寸SYSAUX表区域的尺寸

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第16张图片

权限管理新功能Privilege Analysis

Privilege Analysis

不正常访问的原因一般都是检测到过度的权限赋予

清理出赋予用户以及角色的系统权限、对象权限,确认是否使用,进行报告

赋予应用以及开发者・管理者真正需要的权限

原则上以最小权限来实现。防止不正常访问

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第17张图片

权限分析的对象

找出被执行的系统/对象权限

角色

分析指定角色权限的使用状況 (可以指定多个)

条件指定

分析适合指定条件的情况,分析权限的使用状況

(特定的用户以及应用等)

角色+条件指定

适合指定角色以及条件的情况,分析权限的使用状況

数据库

分析数据库内的所有的权限的使用状況

(除去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 (‘对策名‘)

权限分析的顺序捕获终止~报告

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第18张图片

分析对策的无效化

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等的应用的访问对策的提供

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第19张图片

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的认可、规则的許可、对象的访问权等条件

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第20张图片

強制Realm

更严格的、不遗漏的默认隔断

对于对象的所有者(制成者)、即使是有对象权限的用户,

只要Realm不认可,就不能访问

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第21张图片

对应Multi-tenant架构更安全地管理集约数据库

oracle 12配置安全与更新,Oracle 12c 数据库安全核心技术讨论_第22张图片

你可能感兴趣的:(oracle,12配置安全与更新)