题记:
有段时间没写过oracle了,今天回归。
本文将详细介绍oracle的审计功能,基于11g版本,但对12c,19c也同样适用。
审计(Audit)用于监视用户所执行的数据库操作,并且 Oracle 会将审计跟踪结果存放到 OS 文件(默认位置为 O R A C L E B A S E / a d m i n / ORACLE_BASE/admin/ ORACLEBASE/admin/ORACLE_SID/adump/),或数据库(存储在 system 表空间中SYS.AUD$ 表中,可通过视图 dba_audit_trail 查看)中。审计可以提供有用的信息,用于揭示权限的滥用和误用。当需要一定的粒度时,DBA 可以使用细粒度的审计来监控对表中某些行或列的访问,而不仅仅是是 否访问表。
在 oracle 11g 中,用 DBCA 工具建库后,审计功能(AUDIT_TRAIL)是默认开启的。审计数据默认存放 SYSTEM 表空间下的 AUD$ 审计字典基表上。开启审计数据库会增加消耗,降低业务性能,因此,如果不是很有必要,在安装好数据库后,可适当选择关闭数据库审计功能。Oracle 还推荐使用基于 OS文件的审计日志记录方式(OS audit trail files),当 AUDIT_TRAIL 设置为 OS 时,审计记录文件将在AUDIT_FILE_DEST 参数所指定的目录中生成。
1. 审计的目的
- 确保数据库的安全性:通过记录用户对数据库的访问和操作,可以及时发现潜在的安全漏洞和未经授权的访问。
- 满足合规性要求:许多行业和法规要求对数据库活动进行审计,以确保数据的保密性、完整性和可用性。
- 故障排查和性能优化:审计日志可以帮助管理员分析数据库性能问题和故障,确定问题的根源。
2. 审计的类型
3. 审计的位置
审计记录可以发送到 SYS.AUD$数据库表或操作系统文件。为了启用审计并指定记录审计记录的位置,将初始参数AUDIT_TRAIL 设置为如下表几个值之一:
参数 AUDIT_TRAIL 是静态参数,须重启实例生效。在使用 SYS.AUD$ 表进行审计时,应该注意监控该表的大小,以避免影响 SYS 表空间中其他对象的空间需求。推荐定期备份 SYS.AUD$ 中的数据,并且截断该表(truncate table aud ; )在 O r a c l e 11 g 中 C R E A T E S E S S I O N 作为受审计的权限来被记录,因此当 S Y S T E M 表空间因磁盘空间而无法扩展时将导致部分审计记录无法生成,这将最终导致普通用户的新会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用 S Y S D B A 身份的用户创建会话,将审计数据备份后删除一部分记录,或者 T R U N C A T E A U D ;) 在 Oracle 11g 中 CREATE SESSION 作为受审计的权限来被记录,因此当 SYSTEM 表空间因磁盘空间而无法扩展时将导致部分审计记录无法生成,这将最终导致普通用户的新会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用 SYSDBA 身份的用户创建会话,将审计数据备份后删除一部分记录,或者 TRUNCATE AUD ;)在Oracle11g中CREATESESSION作为受审计的权限来被记录,因此当SYSTEM表空间因磁盘空间而无法扩展时将导致部分审计记录无法生成,这将最终导致普通用户的新会话将无法正常创建,普通用户将无法登陆数据库。在这种场景中仍可以使用SYSDBA身份的用户创建会话,将审计数据备份后删除一部分记录,或者TRUNCATEAUD 都可以解决上述问题。在默认情况下会以 AUTOEXTEND ON 自动扩展选项创建 SYSTEM 表空间,因此系统表空间在必要时会自动增长,我们所需注意的是磁盘上的剩余空间是否能够满足其增长需求,以及数据文件扩展的上限,对于普通的 8k Smallfile 表空间而言,单个数据文件的最大尺寸是 32G。
4. 开启审计功能
alter system set audit_trail=db_extended scope=spfile;
-- 重启数据库生效:
startup force
5. 语句审计
在 Oracle 11g 中,语句审计是一种重要的审计类型,主要用于记录特定的 SQL 语句执行情况。
- 语句审计的作用
安全监控:可以检测到潜在的恶意操作或未经授权的 SQL 语句执行。例如,发现对敏感数据的不当查询或修改操作。
合规性检查:满足法规和企业内部政策对数据库操作的审计要求。许多行业要求对特定的 SQL 语句进行审计,以确保数据的安全性和完整性。
性能分析:通过分析频繁执行的 SQL 语句,可以发现性能瓶颈并进行优化。例如,如果发现某个查询语句被频繁执行且执行时间较长,可以考虑对该查询进行优化,如添加索引或调整查询逻辑。 - 语句审计的设置
使用 AUDIT 语句进行设置:
例如,AUDIT SELECT ON schema.table BY ACCESS; 这条语句将审计对指定模式下的表的 SELECT 语句执行情况。每次用户执行对该表的 SELECT 操作时,都会在审计日志中记录一条相应的审计记录。
可以审计多种类型的 SQL 语句,包括 SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP 等。
通过初始化参数设置审计策略:
AUDIT_TRAIL参数可以确定审计日志的存储位置,如存储在数据库中(DB)、操作系统文件中(OS)或 XML 文件中。
AUDIT_SYS_OPERATIONS参数决定是否审计以 SYSDBA 或 SYSOPER 身份执行的操作。 - 审计日志的查看与分析
查看审计日志:可以通过查询数据库视图来查看语句审计的记录。例如,DBA_AUDIT_TRAIL视图包含了所有的审计记录,可以根据需要筛选出特定类型的语句审计记录。
可以查询特定用户、特定时间段或特定对象的审计记录,以便进行详细的分析。
分析审计日志:
可以使用 SQL 查询或第三方工具对审计日志进行分析,以提取有用的信息。例如,统计不同类型 SQL 语句的执行次数、找出频繁执行的语句或检测异常操作。
通过分析审计日志,可以发现潜在的安全问题、性能瓶颈或合规性问题,并采取相应的措施进行解决。
限于篇幅,本文待续
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。