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

文章目录

  • [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 用户(包括以 sysdbasysoper 身份登录的用户)的操作都会被记录。这些审计记录不会保存在 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_OPERATIONSTRUE。这种审计记录发送到与操作系统审计记录相同的位置。因此,这个位置是和操作系统相关的。当使用其中一种权限时执行的所有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 对语句生效的审计选项
相关推荐
尘浮生1 小时前
Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·maven
东阳马生架构5 小时前
MySQL底层概述—1.InnoDB内存结构
java·数据库·mysql
standxy5 小时前
通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
android·数据库·mysql
itwangyang5205 小时前
2025 - 科研神器 - 批量处理 PDF、SVG、PNG 和 JPG 文件,将它们转换为彩色 TIFF 文件,并保存到指定的 tiff 文件夹中
数据库·pdf
痞老板A小安装C46 小时前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
feilieren6 小时前
DataGrip 连接 Redis、TongRDS
数据库·redis·缓存
液态不合群6 小时前
Redis中常见的数据类型及其应用场景
数据库·redis·wpf
Allen Bright6 小时前
Jedis存储一个-以String的形式的对象到Redis
数据库·redis·缓存
儿时可乖了6 小时前
Linux 定时任务全解析
linux·oracle
Allen Bright7 小时前
Jedis存储一个以byte[]的形式的对象到Redis
数据库·redis·缓存