1.语句审计

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

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

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

此外,希望在每次动作发生时都对其进行审计(by access)或者只审计一次(by session)。默认是by session。

有时希望审计成功的动作:没有生成错误消息的语句。对于这些语句,添加whenever successful。而有时只关心使用审计语句的命令是否失败,失败原因是权限违犯、用完表空间中的空间还是语法错误。对于这些情况,使用 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

一些示例可以帮助读者更清楚地了解所有这些选项。在示例数据库中,用户KSHELTON具有HR模式和其他模式中所有表上的权限。允许 KSHELTON创建其中一些表上的索引,但如果有一些与执行计划改动相关的性能问题,则需要知道何时创建这些索引。可以使用如下命令审计 KSHELTON创建的索引:

SQL> audit index by kshelton;Audit succeeded.

后面的某一天,KSHELTON在HR.JOBS表上创建了一个索引:

SQL> create index job_title_idx on hr.jobs(job_title);Index created.

检查数据字典视图DBA_AUDIT_TRAIL中的审计跟踪,可以看到KSHELTON实际上在8月12日的5:15 P.M.创建了索引:

SQL> select username, to_char(timestamp,'MM/DD/YY HH24:MI') Timestamp,2      obj_name, action_name, sql_text from dba_audit_trail3 where username = 'KSHELTON';USERNAME    TIMESTAMP        OBJ_NAME        ACTION_NAME      SQL_TEXT--------- -------------- -------------- -------------- ----------------KSHELTON    08/12/07 17:15 JOB_TITLE_IDX  CREATE INDEX    create index hr.job_title_idx onhr.jobs(job_title)1 row selected.

注意:

从Oracle Database 11g开始,只有在初始参数AUDIT_TRAIL被设置为DB_EXTENDED时,才填充DBA_AUDIT_TRAIL中的列SQL_TEXT和SQL_BIND。默认情况下,AUDIT_TRAIL的值是DB。

为了关闭HR.JOBS表上KSHELTON的审计,可以使用noaudit命令,如下所示:

SQL> noaudit index by kshelton;Noaudit succeeded.

也可能希望按常规方式审计成功的和不成功的登录,这需要两个audit命令:

SQL> audit session whenever successful;Audit succeeded.SQL> audit session whenever not successful;Audit succeeded.

2.权限审计

审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause中,而不是在语句中,指定系统权限。

例如,可能希望将ALTER TABLESPACE权限授予所有的DBA,但希望在发生这种情况时生成审计记录。启用对这种权限的审计的命令看起来类似于语句审计:

SQL> audit alter tablespace by access whenever successful;Audit succeeded.

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

使用SYSDBA和SYSOPER权限或者以SYS用户连接到数据库的系统管理员可以利用特殊的审计。为了启用这种额外的审计级别,可以设置初始参数AUDIT_SYS_OPERATIONS为TRUE。这种审计记录发送到与操作系统审计记录相同的位置。因此,这个位置是和操作系统相关的。当使用其中一种权限时执行的所有SQL语句,以及作为用户SYS执行的任何SQL语句,都会发送到操作系统审计位置。

模式对象审计

审计对各种模式对象的访问看起来类似于语句审计和权限审计:

AUDIT schema_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命令,而不管谁正在进行更新,则每次该动作发生时,都可以使用如下所示的audit命令:

SQL> audit insert, update on hr.jobs by access whenever successful;Audit successful.

用户KSHELTON决定向HR.JOBS表添加两个新行:

SQL> insert into hr.jobs (job_id, job_title, min_salary, max_salary)2 values ('IN_CFO','Internet Chief Fun Officer', 7500, 50000);1 row created.SQL> insert into hr.jobs (job_id, job_title, min_salary, max_salary)2 values ('OE_VLD','Order Entry CC Validation', 5500, 20000);1 row created.

查看DBA_AUDIT_TRAIL视图,可以看到KSHELTON会话中的两个insert命令:

USERNAME  TIMESTAMP      OWNER    OBJ_NAME  ACTION_NAMESQL_TEXT---------- -------------- -------- ---------- ------------------------------------------------------------------------------KSHELTON  08/12/07 22:54 HR      JOBS      INSERTinsert into hr.jobs (job_id, job_title, min_salary, max_salary)values ('IN_CFO','Internet Chief Fun Officer', 7500, 50000);KSHELTON  08/12/07 22:53 HR      JOBS      INSERTinsert into hr.jobs (job_id, job_title, min_salary, max_salary)values ('OE_VLD','Order Entry CC Validation', 5500, 20000);KSHELTON  08/12/07 22:51                    LOGON3 rows selected.

mysql audit 数据库审计 数据库审计语句_linux 审计oracle