Oracle 数据库审计

保证数据库的安全有两种方式,一种是通过权限的存取控制机制,即通过预先控制来防止安全事件的发生;另一种是数据库审计,即对数据库活动做跟踪记录,当发生安全事件时,通过对数据库活动记录进行审计来发现并修复安全问题。

Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象。审计不会防止使用这些权限,但可以提供有用的信息,用于揭示权限的滥用和误用。数据库审计的主要对象包括数据库链接、SQL语句执行、数据库对象访问等方面。审计记录存储的位置有两种选择:一种是存储在操作系统文件中,一种是存储在system表空间的sys.aud$表中。

1、和审计相关的参数

(1)  audit_sys_operations

(2)  audit_trail

(3)  audit_file_dest:指定审计信息的文件夹

SQL>show parameter audit –查询和审计相关的两个参数

2、audit_sys_operations参数

audit_sys_operations参数审计SYSDBA的活动,默认值false,相关的审计信息记录在操作系统文件中(因为有可能记录时数据库还未启动)。当参数值为false时,以下操作系统会强制记录在audit_file_dest指定的文件夹中:

(1)  用管理员权限连接实例

(2)  启动数据库

(3)  关闭数据库

audit_sys_operations参数设置为true后,作为SYSDBA和SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统的审计中,从而能够给出DBA所进行操作的完整记录。设置audit_sys_operations参数的语句如下:

SQL>alter system set audit_sys_operations=TRUE scope=spfile;

SQL>alter system set audit_sys_operations=FALSE scope=spfile;

3、audit_trail 参数

(1)audit_trail 参数的值可以设置为以下几种:

?  NONE:不审计,默认值。

?  DB:开启审计功能,将audit记录到sys.aud$表(审计的结果只有连接信息,不记录到SQLBIND和SQLTEXT字段)。

?  OS:审计记录写入一个操作系统文件。

?  DB,extended:开启审计功能,将audit记录到sys.aud$表(审计信息除了连接信息还包含了当时执行的具体语句,记录到SQLBIND和SQLTEXT字段)。

?  Xml:审计记录写入xml格式的操作系统文件。

?  Xml,extended:审计记录写入xml格式的操作系统文件,包括SQLBIND和SQLTEXT值。

说明:这个参数是写到spfile里面的静态参数,需要重启数据库。

(2)设置参数值

SQL> alter system setaudit_trail=‘DB‘ scope=spfile;

说明:参数AUDIT_TRAIL不是动态的,为了使AUDIT_TRAIL参数中的改动生效,必须关闭数据库并重新启动。在对SYS.AUD$表进行审计时,应该注意监控该表的大小,以避免影响SYS表空间中其他对象的空间需求。

4、开启与关闭审计

(1)  开启审计案例

SQL>conn /as sysdba

SQL>show parameter audit

SQL>alter system set audit_sys_operations=TRUE scope=spfile;

--审计管理用户(以sysdba/sysoper角色登陆)

SQL>alter system set audit_trail=db,extended scope=spfile;

SQL>startup force       --完成审计的开启

SQL>show parameter audit   –对比先后两次的参照值

(2)  关闭审计案例

SQL>conn /as sysdba

SQL>show parameter audit

SQL>alter system set audit_trail=none scope=spfile;

SQL>startup force       --完成审计的关闭

SQL>conn /as sysdba

SQL>show parameter audit   –对比先后两次的参照值

(3)审计相关的表安装

SQLPLUS> connect / AS SYSDBA

SQLPLUS> select * from sys.aud$;

SQLPLUS> select * from dba_audit_trail;

如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。方法如下:

SQLPLUS> connect / as sysdba

SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql

审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。安装后要重启数据库。

5、审计类型

下表中总结了Oracle数据库中不同类型的审计。


审 计 类 型


说    明


语句审计


按照语句类型审计SQL语句,而不论访问何种特定的模式对象;也可以在数据库中指定一个或多个用户,针对特定的语句审计这些用户。


权限审计


审计系统权限,例如CREATE TABLE或ALTER INDEX。和语句审计一样,权限审计可以指定一个或多个特定的用户作为审计的目标。


模式对象审计


审计特定模式对象上运行的特定语句(例如,DEPARTMENTS表上的UPDATE语句);模式对象审计总是应用于数据库中的所有用户。


细粒度的审计


根据访问对象的内容来审计表访问和权限;使用程序包DBMS_FGA来建立特定表上的策略。

(1)  语句级审计

所有类型的审计都使用audit命令来打开审计,使用noaudit命令来关闭审计。对于语句审计,audit命令的格式如下所示:

AUDIT sql_statement_clause BY {SESSION |ACCESS}

WHENEVER [NOT] SUCCESSFUL;

其中:

?  sql_statement_clause包含很多条不同的信息,例如希望审计的SQL语句类型以及审计什 么人。

?  希望在每次动作发生时都对其进行审计(by access);动作重复发生时只审计一次(by session)。默认是by session。

?  审计成功执行的语句,使用wheneversuccessful。审计没有成功执行的语句,使用 whenever not successful。

例如:按常规方式审计成功的和不成功的登录,这需要两个audit命令:

SQL>audit session whenever successful;

SQL>audit session whenever not successful;

?  对于大多数类别的审计方法,如果确实希望审计所有类型的表访问或某个用户的任何权限,则可以指定all而不是单个的语句类型或对象。

表1列出了可以审计的语句类型,并且在每个类别中包含了相关语句的简要描述。如果指定all,则审计该列表中的任何语句。表2中的语句类型在启用审计时不属于all类别;必须在audit命令中显式地指定它们。

表1 包括在ALL类别中的可审计语句


语 句 选 项


SQL操作


ALTER SYSTEM


所有ALTER SYSTEM选项,例如,动态改变实例参数,切换到下一个日志文件组,以及终止用户会话。


CLUSTER


CREATE、ALTER、DROP或TRUNCATE集群


CONTEXT


CREATE CONTEXT或DROP CONTEXT


DATABASE LINK


CREATE或DROP数据库链接


DIMENSION


CREATE、ALTER或DROP维数


DIRECTORY


CREATE或DROP目录


INDEX


CREATE、ALTER或DROP索引


MATERIALIZED VIEW


CREATE、ALTER或DROP物化视图


NOT EXISTS


由于不存在的引用对象而造成的SQL语句的失败


PROCEDURE


CREATE或DROP FUNCTION、LIBRARY、PACKAGE、PACKAGE BODY或PROCEDURE


PROFILE


CREATE、ALTER或DROP配置文件


PUBLIC DATABASE LINK


CREATE或DROP公有数据库链接


PUBLIC SYNONYM


CREATE或DROP公有同义词


ROLE


CREATE、ALTER、DROP或SET角色


ROLLBACK SEGMENT


CREATE、ALTER或DROP回滚段


SEQUENCE


CREATE或DROP序列


SESSION


登录和退出


SYNONYM


CREATE或DROP同义词


SYSTEM AUDIT


系统权限的AUDIT或NOAUDIT


SYSTEM GRANT


GRANT或REVOKE系统权限和角色


TABLE


CREATE、DROP或TRUNCATE表


TABLESPACE


CREATE、ALTER或DROP表空间


TRIGGER


CREATE、ALTER(启用/禁用)、DROP触发器;具有ENABLE ALL TRIGGERS或DISABLE ALL TRIGGERS的ALTER TABLE


TYPE


CREATE、ALTER和DROP类型以及类型主体


USER


CREATE、ALTER或DROP用户


VIEW


CREATE或DROP视图

表2 显式指定的语句类型


语 句 选 项


SQL 操 作


ALTER SEQUENCE


任何ALTER SEQUENCE命令


ALTER TABLE


任何ALTER TABLE命令


COMMENT TABLE


添加注释到表、视图、物化视图或它们中的任何列


DELETE TABLE


删除表或视图中的行


EXECUTE PROCEDURE


执行程序包中的过程、函数或任何变量或游标


GRANT DIRECTORY


GRANT或REVOKE DIRECTORY对象上的权限


GRANT PROCEDURE


GRANT或REVOKE过程、函数或程序包上的权限


GRANT SEQUENCE


GRANT或REVOKE序列上的权限


GRANT TABLE


GRANT或REVOKE表、视图或物化视图上的权限


GRANT TYPE


GRANT或REVOKE TYPE上的权限


INSERT TABLE


INSERT INTO表或视图


LOCK TABLE


表或视图上的LOCK TABLE命令


SELECT SEQUENCE


引用序列的CURRVAL或NEXTVAL的任何命令


SELECT TABLE


SELECT FROM表、视图或物化视图


UPDATE TABLE


在表或视图上执行UPDATE

?  案例1:

SQL> conn / as  sysdba

--可以使用如下命令审计 hr创建的索引

SQL> audit index by hr;

SQL> conn hr/hr –hr用户登陆

SQL> create index job_title_idx onhr.jobs(job_title);

SQL> conn / as  sysdba

--检查数据字典视图DBA_AUDIT_TRAIL中的审计跟踪

SQL> select username,to_char(timestamp,‘MM/DD/YY HH24:MI‘) Timestamp, obj_name, action_name,sql_text from dba_audit_trail where username = ‘HR‘;

--关闭HR.JOBS表上HR的审计

SQL> noaudit index by hr;

?  案例2:

SQL> conn / as  sysdba

--审计数据库中所有的create/drop/alter table语句。

SQL> audit table by scott by access;

SQL> conn scott/abc123

SQL> create table taudit1(a int);

SQL> create table taudit1(a int);

SQL> insert into taudit1 values(1);

SQL> select * from taudit1;

SQL> insert into taudit1 values(1);

SQL> conn / as  sysdba

SQL> select username, timestamp, owner,action_name, obj_name, returncode from dba_audit_object where username=‘SCOTT‘;

说明:所有scott用户创建表的语句均被审计,returncode表示返回码,0表示正确执行,955表示错误:“名称已由现有对象使用”。

(2)  权限级审计

审计系统权限具有与语句审计相同的基本语法,需要在sql_statement_clause上指定系统权限。例如,可能希望将ALTERTABLESPACE权限授予所有的DBA,但希望在发生这种情况时生成审计记录。启用对这种权限的审计的命令如下:

SQL> audit alter tablespace by access whenever successful;

此时,每次成功使用ALTER TABLESPACE权限时,都会将一行内容添加到SYS.AUD$。

?  案例

SQL> conn / as  sysdba

SQL> audit select table by scott bysession;

SQL> conn scott/abc123

SQL> select * from taudit1;

SQL> select * from taudit1;

SQL> conn / as  sysdba

SQL> select username, timestamp, owner,action_name, obj_name, returncode from dba_audit_object where username=‘SCOTT‘;

(3)  对象级审计

审计对各种模式对象的访问的命令格式如下:

AUDITschema_object_clause BY {SESSION | ACCESS} WHENEVER [NOT] SUCCESSFUL;

说明:

?  schema_object_clause指定对象访问的类型以及访问的对象。可以审计特定对象上14种不同的操作类型,下表中列出了这些操作。


对 象 选 项


说    明


ALTER


改变表、序列或物化视图


AUDIT


审计任何对象上的命令


COMMENT


添加注释到表、视图或物化视图


DELETE


从表、视图或物化视图中删除行


EXECUTE


执行过程、函数或程序包


FLASHBACK


执行表或视图上的闪回操作


GRANT


授予任何类型对象上的权限


INDEX


创建表或物化视图上的索引


INSERT


将行插入表、视图或物化视图中


LOCK


锁定表、视图或物化视图


READ


对DIRECTORY对象的内容执行读操作


RENAME


重命名表、视图或过程


SELECT


从表、视图、序列或物化视图中选择行


UPDATE


更新表、视图或物化视图

?  案例:审计HR.JOBS表上所有用户每次成功进行的insert和update命令

SQL> conn / as  sysdba

SQL> audit insert, update on hr.jobs byaccess whenever successful;

SQL> conn hr/hr –hr用户登陆

SQL> insert into hr.jobs (job_id,job_title, min_salary, max_salary) values (‘IN_CFO‘,‘Internet Chief FunOfficer‘, 7500, 50000);

SQL> insert into hr.jobs (job_id,job_title, min_salary, max_salary) values (‘OE_VLD‘,‘Order Entry CCValidation‘, 5500, 20000);

SQL> conn / as  sysdba

--检查数据字典视图DBA_AUDIT_TRAIL中的审计跟踪

SQL> select username,to_char(timestamp,‘MM/DD/YY HH24:MI‘) Timestamp,

2  obj_name, action_name, sql_text from dba_audit_trail

3  where username = ‘HR‘;

Oracle 数据库审计

时间: 2024-10-14 20:28:50

Oracle 数据库审计的相关文章

5、Oracle数据库审计

1.审计(Audit): 对用户所执行的数据库活动的跟踪记录,便于事后监督.检查. 审计信息存放位置: 审计记录信息,存储在system表空间中的SYS.AUD$数据字典表: 或操作系统默认位置$ORACLE_BASE/admin/$ORACLE_SID/adump/: 审计参数AUDIT_TRAIL 参数值取值列表: (1).DB/TRUE ---- 启用审计,并且把审计结果存放在数据库的SYS.AUD$表中 (2).OS ---- 启用审计,并把审计结果存放在操作系统的审计信息中 (3).D

oracle数据库免费基础知识精讲视频分享!

课程简介:数据库基础知识.Oracle的环境搭建.Oracle体系结构.SQL语言基础.函数的使用.约束.索引.数据字典.分组查询.多表连接查询.子查询等.通过对Oracle数据库的系统详解,培养学 生的能力如下:在实际工作中,熟练使用SQL语句进行项目开发:能够使用复杂的SQL语句进行多表关联查询:具备数据库数据的管理和维护能力 . 课程目录: day01_安装数据库软件day02_数据库的基本使用selecl语句的使用day03_限制数据返回day04_字符函数.数字函数.日期函数day05

oracle数据库简单操作

导入某用户所有表和数据:imp sgp/[email protected]:1521/orcl file=sgp20161025.dmp full=y 导出指定表及数据:exp sgp/[email protected]:1521/orcl file=20160921sgp_table_sysmodule_sysdict.dmp tables=(sgp_sysmodule, sgp_sysdict) 导入指定表及数据:imp sgp/[email protected]:1521/orcl fil

【读书笔记】数据库审计

数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 一.审计类型 ORACLE的审计技术,除了SYSDBA审计之外,还有数据库审计.基于值的审计.细粒度审计. SQL> show parameter audit; NAME                        TYPE        VALUE ------------------------------------ ----------- ---------

P6 EPPM手动安装指南(Oracle数据库)(一)

P6 EPPM手动安装指南(Oracle数据库) P6 EPPM Manual Installation Guide (Oracle Database) 1.      内容... 1 1.1.         Oracle数据库手动配置的概述... 1 1.1.1.            Oracle数据库安装... 2 1.1.1.1.           创建数据库结构甲骨文和加载应用程序数据... 2 1.1.1.1.1.            创建P6 EPPM为Oracle数据库结构

Oracle数据库错误大全

ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话 I

oracle 11g 审计文件 audit

审计文件:记录数据库中的可疑操作:sys的连接和数据库的启动.停止一定会被审计!审计文件的位置:show parameter audit_file_dest 如果审计目录不存在,数据库将无法正常启动!SQL> startupORA-09925: Unable to create audit trail fileLinux-x86_64 Error: 2: No such file or directoryAdditional information: 9925 Oracle 的审计实在是鸡肋,审

[转]Oracle DB审计

? 说明DBA 负责的安全和审计工作 ? 启用标准数据库审计 ? 指定审计选项 ? 复查审计信息 ? 维护审计线索 责任分离 ? 具有DBA 权限的用户必须是可信任的. – 滥用信任 – 用审计线索保护受信任位置 ? 必须共同分担DBA 责任. ? 绝对不要共享帐户. ? DBA 和系统管理员必须由不同的人员担任. ? 分离操作员与DBA 的责任. 以下是满足责任分离的主要要求. DBA 必须是可信任的:很难限制某个DBA 去做什么.为了完成工作,DBA 需要很高的权限.DBA 是受信任的职位,

Oracle数据库错误消息

Oracle数据库错误消息 导出错误消息 l EXP-00000导出终止失败 原因:导出时产生Oracle错误. 操作:检查相应的Oracle错误消息. l EXP-00001数据域被截断 - 列长度=数字,缓冲区大小=数字,实际大小=数字 原因:数据缓冲区中列不适合. 操作:记录错误参数和消息,作为输出内部错误发送到Oracle Support Services(如果一个表不能完全导出,则导出不能继续). l EXP-00002写导出文件错误 原因:不能导入导出文件,可能由设备错误引起,通常伴