自学内容网 自学内容网

Oracle架构之物理存储之审计文件

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> 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 审计相关参数

和审计有关的参数主要有以下几个:

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 用户(包括以 sysdbasysoper 身份登录的用户)的操作都会被记录。这些审计记录不会保存在 aud$ 表中,而是被保存到操作系统文件中。当设置为 false 时,只记录 sys 用户的连接、数据库的启动和停止。

1.4 审计的类型

1.4.1 语句审计

对某种类型的SQL语句审计,不指定结构或对象如:audittable会审计数据库中所有的create table、drop table、truncate table语句,alter session by scott会审计scott用户所有的数据库连接;

打开关闭audit 命令的格式如下所示:

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

下表是可以审计的语句类型:

语句选项SQL操作
ALTER SYSTEM所有ALTER SYSTEM选项,例如,动态改变实例参数,切换到下一个日志文件组,以及终止用户会话
CLUSTERCREATE、ALTER、DROP或TRUNCATE集群
CONTEXTCREATE CONTEXT或DROP CONTEXT
DATABASE LINKCREATE或DROP数据库链接
DIMENSIONCREATE、ALTER或DROP维数
DIRECTORYCREATE或DROP目录
INDEXCREATE、ALTER或DROP索引
MATERIALIZED VIEWCREATE、ALTER或DROP物化视图
NOT EXISTS由于不存在的引用对象而造成的 SQL 语句的失败
PROCEDURECREATE或DROP FUNCTION、LIBRARY、PACKAGE、PACKAGE BODY或PROCEDURE
PROFILECREATE、ALTER或DROP配置文件
PUBLIC DATABASE LINKCREATE或DROP公有数据库链接
PUBLIC SYNONYMCREATE或DROP公有同义词
ROLECREATE、ALTER、DROP或SET角色
ROLLBACK SEGMENTCREATE、ALTER或DROP回滚段
SEQUENCECREATE或DROP序列
SESSION登录和退出
SYNONYMCREATE或DROP同义词
SYSTEM AUDIT系统权限的AUDIT或NOAUDIT
SYSTEM GRANTGRANT或REVOKE系统权限和角色
TABLECREATE、DROP或TRUNCATE表
TABLESPACECREATE、ALTER或DROP表空间
TRIGGERCREATE、ALTER(启用/禁用)、DROP触发器;具有ENABLE ALL TRIGGERS或DISABLE ALL TRIGGERS的ALTER TABLE
TYPECREATE、ALTER和DROP类型以及类型主体
USERCREATE、ALTER或DROP用户
VIEWCREATE或DROP视图
ALTER SEQUENCE任何ALTER SEQUENCE命令
ALTER TABLE任何ALTER TABLE命令
COMMENT TABLE添加注释到表、视图、物化视图或它们中的任何列
DELETE TABLE删除表或视图中的行
EXECUTE PROCEDURE执行程序包中的过程、函数或任何变量或游标
GRANT DIRECTORYGRANT或REVOKE DIRECTORY对象上的权限
GRANT PROCEDUREGRANT或REVOKE过程、函数或程序包上的权限
GRANT SEQUENCEGRANT或REVOKE序列上的权限
GRANT TABLEGRANT或REVOKE表、视图或物化视图上的权限
GRANT TYPEGRANT或REVOKE TYPE上的权限
INSERT TABLEINSERT INTO表或视图
LOCK TABLE表或视图上的LOCK TABLE命令
SELECT SEQUENCE引用序列的CURRVAL或NEXTVAL的任何命令
SELECT TABLESELECT 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>` noaudit index by kshelton; Noaudit succeeded.

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

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> audit alter tablespace by access whenever successful; 
Audit succeeded.

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

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

1.4.3 对象审计

审计特定模式对象上运行的特定语句,如:EMP表上的UPDATE语句模式对象审计应用于数据库中的所有用户;

打开关闭操作
对象审计的访问看起来类似于语句审计和权限审计:

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对语句生效的审计选项

原文地址:https://blog.csdn.net/u012060033/article/details/142693845

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!