文章目录
- [1 审计文件(audit files)](#1 审计文件(audit files))
-
- [1.1 定义](#1.1 定义)
- [1.2 查看审计信息](#1.2 查看审计信息)
- [1.3 审计相关参数](#1.3 审计相关参数)
- [1.4 审计的类型](#1.4 审计的类型)
-
- [1.4.1 语句审计](#1.4.1 语句审计)
- [1.4.2 权限审计](#1.4.2 权限审计)
- [1.4.3 对象审计](#1.4.3 对象审计)
- [1.4.4 细粒度的审计](#1.4.4 细粒度的审计)
- [1.5 与审计相关的数据字典视图](#1.5 与审计相关的数据字典视图)
1 审计文件(audit files)
1.1 定义
审计(Audit
)用于监视用户对数据库的操作,审计记录保存在数据字典表中,存储在 system
表空间中的 SYS.AUD$
表中(可通过视图 dba_audit_trail
查看)或审计文件中(默认位置为 ORACLEBASE/admin/ORACLE_BASE/admin/ORACLEBASE/admin/ORACLE_SID/adump/)。
审计是对特定的用户动作的监控和记录,通常用于:
- 审查可疑的活动
- 监视和收集关于指定数据库活动的数据
不管是否打开数据库的审计功能,以下这些操作会强制被记录:用管理员权限连接 Instance
、启动数据库、关闭数据库。
审计文件的位置由参数 audit_file_dest
决定
1.2 查看审计信息
sql
SQL> show parameter audit_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/orcl/adump
查看审计文件:
[oracle@rac1 adump]$ cd /u01/app/oracle/admin/orcl/adump
1.3 审计相关参数
和审计有关的参数主要有以下几个:
sql
show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/orcl/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string DB
- audit_file_dest
如果AUDIT_TRAIL = OS
,则审计记录的文件,存放在audit_file_dest
参数指定的目录中。如果指定的路径不存在,会造成数据库无法启动 - Audit_trail
该参数用于关闭或开启审计功能,取值如下:None
:不做审计。DB
:启用数据库审计,将审计记录保存在数据库的sys.AUD$
的表中。OS
:启用数据库审计,将审计记录保存在操作系统文件中,文件位置由audit_file_dest
参数指定。
- Audit_sys_operations
指定是否启用对SYS
用户的审计,默认为 false。当设置为 true 时,所有 sys 用户(包括以sysdba
、sysoper
身份登录的用户)的操作都会被记录。这些审计记录不会保存在aud$
表中,而是被保存到操作系统文件中。当设置为 false 时,只记录 sys 用户的连接、数据库的启动和停止。
1.4 审计的类型
1.4.1 语句审计
对某种类型的SQL语句审计,不指定结构或对象如:audittable会审计数据库中所有的create table、drop table、truncate table语句,alter session by scott会审计scott用户所有的数据库连接;
打开关闭audit 命令的格式如下所示:
sql
AUDIT sql_statement_clause
BY {SESSION | ACCESS} WHENEVER [NOT] SUCCESSFUL;
下表是可以审计的语句类型:
语句选项 | 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视图 |
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 |
注意:
从Oracle Database 11g开始,只有在初始参数AUDIT_TRAIL
被设置为DB_EXTENDED
时,才填充DBA_AUDIT_TRAIL
中的列SQL_TEXT和SQL_BIND。默认情况下,AUDIT_TRAIL的值是DB。
为了关闭HR.JOBS表上KSHELTON的审计,可以使用noaudit命令,如下所示:
sql
SQL>` noaudit index by kshelton; Noaudit succeeded.
也可能希望按常规方式审计成功的和不成功的登录,这需要两个audit命令:
sql
SQL> audit session whenever successful; Audit succeeded.
SQL> audit session whenever not successful; Audit succeeded.
1.4.2 权限审计
当用户使用了该权限则被审计,如:CREATE TABLE或ALTER INDEX和语句审计一样,权限审计可以指定一个或多个特定的用户作为审计的目标;
打开关闭权限审计
系统权限具有与语句审计
相同的基本语法,但审计系统权限是在sql_statement_clause
中,而不是在语句中,指定系统权限。
例如,可能希望将ALTER TABLESPACE
权限授予所有的DBA
,但希望在发生这种情况时生成审计记录。启用对这种权限的审计的命令看起来类似于语句审计:
sql
SQL> audit alter tablespace by access whenever successful;
Audit succeeded.
每次成功使用 ALTER TABLESPACE
权限时,都会将一行内容添加到SYS.AUD$
。
使用SYSDBA和SYSOPER权限或者以SYS用户连接到数据库的系统管理员可以利用特殊的审计。为了启用这种额外的审计级别,可以设置初始参数AUDIT_SYS_OPERATIONS
为TRUE
。这种审计记录发送到与操作系统审计记录相同的位置。因此,这个位置是和操作系统相关的。当使用其中一种权限时执行的所有SQL语句,以及作为用户SYS
执行的任何SQL语句,都会发送到操作系统审计位置。
1.4.3 对象审计
审计特定模式对象上运行的特定语句,如:EMP表上的UPDATE语句模式对象审计应用于数据库中的所有用户;
打开关闭操作
对象审计的访问看起来类似于语句审计和权限审计:
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 | 更新表、视图或物化视图 |
1.4.4 细粒度的审计
根据访问对象的内容来审计表访问和权限使用程序包DBMS_FGA来建立特定表上的策略;
从Oracle9i开始,通过引入细粒度的对象审计,或称为FGA,审计变得更为关注某个方面,并且更为精确。由称为DBMS_FGA的PL/SQL
程序包实现FGA。
使用标准的审计,可以轻松发现访问了哪些对象以及由谁访问,但无法知道访问了哪些行或列。细粒度的审计可解决这个问题,它不仅为需要访问的行指定谓词(或where子句),还指定了表中访问的列。通过只在访问某些行和列时审计对表的访问,可以极大地减少审计表条目的数量。
程序包DBMS_FGA具有4个过程:
ADD_POLICY
:添加使用谓词和审计列的审计策略DROP_POLICY
:删除审计策略DISABLE_POLICY
:禁用审计策略,但保留与表或视图关联的策略ENABLE_POLICY
:启用策略
1.5 与审计相关的数据字典视图
下表包含了与审计相关的数据字典视图。
数据字典视图 | 说 明 |
---|---|
AUDIT_ACTIONS | 包含审计跟踪动作类型代码的描述,例如INSERT、DROP VIEW、DELETE、LOGON和LOCK |
all_def_audit_opts | 查看数据库用 on default 子句设置了哪些默认对象审计 |
DBA_AUDIT_OBJECT | 与数据库中对象相关的审计跟踪记录 |
DBA_AUDIT_POLICIES | 数据库中的细粒度审计策略 |
DBA_AUDIT_SESSION | 与CONNECT和DISCONNECT相关的所有审计跟踪记录 |
DBA_AUDIT_STATEMENT | 与GRANT、REVOKE、AUDIT、NOAUDIT和ALTER SYSTEM命令相关的审计跟踪条目 |
DBA_AUDIT_TRAIL | 包含标准审计跟踪条目。USER_AUDIT_TRAILUSER_TRAIL_AUDIT只包含已连接用户的审计行 |
DBA_FGA_AUDIT_TRAIL | 细粒度审计策略的审计跟踪条目 |
DBA_COMMON_AUDIT_TRAIL | 将标准的审计行和细粒度的审计行结合在一个视图中 |
DBA_OBJ_AUDIT_OPTS | 对数据库对象生效的审计选项 |
DBA_PRIV_AUDIT_OPTS | 对系统权限生效的审计选项 |
DBA_STMT_AUDIT_OPTS | 对语句生效的审计选项 |