详解Oracle审计(二)

发布于:2024-10-18 ⋅ 阅读:(9) ⋅ 点赞:(0)

题记:

本文将承接上篇详细介绍oracle的审计功能,基于11g版本,但对12c,19c也同样适用。

1. 语句审计实操演示实例

sqlplus / as sysdba
show parameter audit_trail
alter system set audit_trail=db_extended scope=spfile;
startup force
show parameter audit_trail
-- 启用审计 scott 用户的建表操作
alter user scott account unlock identified by scott;
audit create table by scott by access;
select user_name,audit_option,success,failure
from dba_stmt_audit_opts
where user_name='SCOTT';
conn scott/scott
create table tt(id int);
-- 查看审计记录
conn / as sysdba
select username, to_char(timestamp,'MM/DD/YY HH24:MI:SS') Timestamp, obj_name,
action_name, sql_text
from dba_audit_trail
where username= 'SCOTT';
-- 取消审计
noaudit create table by scott;
select user_name,audit_option,success,failure
from dba_stmt_audit_opts
where user_name='SCOTT';
conn scott/scott
create table ee(id int);
-- 查看审计记录
conn / as sysdba
select username,to_char(timestamp,'MM/DD/YY HH24:MI:SS') Timestamp,obj_name,
action_name, sql_text
from dba_audit_trail
where username= 'SCOTT';

2. 权限审计

在 Oracle 11g 中,权限审计主要用于跟踪用户对系统权限的使用情况。

  1. 权限审计的目的
    安全管控:了解用户对特定权限的使用,及时发现权限滥用或未经授权的权限使用情况,从而加强数据库的安全性。
    合规需求:满足法规和企业内部的合规要求,确保对权限的使用有明确的记录和监控。
    故障排查:在出现问题时,通过查看权限审计日志,可以确定是否是由于权限不当使用导致的问题。
  2. 权限审计的设置
    使用 AUDIT 语句进行权限审计设置:
    例如,AUDIT CREATE SESSION BY ACCESS;这条语句将审计用户创建会话的权限使用情况。每当有用户使用 CREATE SESSION 权限登录数据库时,就会在审计日志中记录一条相应的审计记录。
    可以对各种系统权限进行审计,如 CREATE TABLE、DROP VIEW、ALTER USER 等。
    初始化参数配置:
    AUDIT_TRAIL参数决定审计日志的存储位置,可以选择存储在数据库中、操作系统文件中或 XML 文件中。
    AUDIT_SYS_OPERATIONS参数决定是否审计以 SYSDBA 或 SYSOPER 身份执行的操作,这些操作通常涉及高级权限的使用。
  3. 审计日志的查看与分析
    查看审计日志:可以通过查询数据库视图来查看权限审计记录。例如,DBA_AUDIT_TRAIL视图包含了所有的审计记录,可以根据权限类型、用户等条件进行筛选。
    可以查看特定权限的使用情况,以及使用该权限的用户和时间。
    分析审计日志:
    可以使用 SQL 查询或第三方工具对审计日志进行分析,以提取有用的信息。例如,统计不同权限的使用次数、找出频繁使用特定权限的用户等。
    通过分析权限审计日志,可以发现潜在的安全风险,并采取相应的措施,如调整用户权限、加强安全培训等。
  4. 权限审计实操演示实例
alter system set AUDIT_SYS_OPERATIONS=true scope=spfile;
startup force
cd /u01/app/oracle/admin/orcl/adump/
-- 可用编辑器查看 *.aud 审计文件内容
-- 设置审计
conn / as sysdba
audit create table by scott by access;
audit session by scott;
select user_name,privilege,success,failure
from dba_priv_audit_opts
where user_name='SCOTT' order by user_name;
conn scott/scott
create table tt(id int);
-- 查看审计记录
conn / as sysdba
select username,to_char(timestamp,'MM/DD/YY HH24:MI:SS') Timestamp, obj_name,
action_name, sql_text
from dba_audit_trail
where username= 'SCOTT';
-- 取消审计
noaudit create table by scott;

3. 对象审计

在 Oracle 11g 中,对象审计用于审计对特定数据库对象(如表、视图、存储过程等)的访问。

  1. 对象审计的目的
    数据安全:确保对敏感数据库对象的访问受到监控,防止未经授权的数据访问和修改。
    合规性要求:满足行业法规和企业内部政策对特定对象审计的要求。
    问题排查:在出现数据异常或安全事件时,通过对象审计日志可以快速确定对特定对象的操作历史,帮助找出问题的根源。
  2. 对象审计的设置
    使用 AUDIT 语句进行对象审计设置:
    例如,AUDIT SELECT ON schema.table BY ACCESS; 这条语句将审计对指定模式下的表的 SELECT 操作。可以对不同的操作类型进行审计,如 INSERT、UPDATE、DELETE 等。
    对于视图,可以使用类似的语句进行审计,如 AUDIT SELECT ON schema.view BY ACCESS;。
    对于存储过程,可以审计其执行情况,如 AUDIT EXECUTE ON schema.procedure BY ACCESS;。
    通过初始化参数配置:
    AUDIT_TRAIL参数决定审计日志的存储位置,可以存储在数据库中、操作系统文件中或 XML 文件中。
    AUDIT_SYS_OPERATIONS参数决定是否审计以 SYSDBA 或 SYSOPER 身份执行的操作。
  3. 审计日志的查看与分析
    查看审计日志:可以通过查询数据库视图来查看对象审计记录。例如,DBA_AUDIT_TRAIL视图包含了所有的审计记录,可以根据对象名称、操作类型等条件进行筛选。
    可以查看对特定对象的具体操作时间、用户、操作类型等信息。
    分析审计日志:
    可以使用 SQL 查询或第三方工具对审计日志进行分析,以提取有用的信息。例如,统计对特定对象的操作次数、找出频繁访问特定对象的用户等。
    通过分析对象审计日志,可以发现潜在的安全风险和性能问题,并采取相应的措施进行改进。
  4. 对象审计实操演示实例
show parameter audit_trail
alter system set audit_trail=db_extended scope=spfile;
startup force
show parameter audit_trail
-- 审计设置
audit select,insert,delete on scott.dept by access;
select object_name,object_type,alt,del,ins,upd,sel
from dba_obj_audit_opts;
conn scott/scott
insert into dept values(11,'aa','aa');
insert into dept values(12,'bb','bb');
commit;
-- 查看审计记录
conn / as sysdba
select timestamp,action_name,sql_text
from dba_audit_trail
where owner='SCOTT';
-- 取消审计
noaudit select,insert,delete on scott.dept;
--审计查询:
show parameter audit_trail
alter system set audit_trail=db_extended scope=spfile;
startup force
show parameter audit_trail
-- 设置审计
audit select,insert,delete on scott.dept by access;
-- 清空审计记录
delete sys.aud$;
conn scott/scott
insert into dept values(13,'cc','cc');
select * from dept;
delete from dept where deptno=11;
update dept set loc='abc' where deptno=12;
-- 查看审计记录
conn / as sysdba
select username,timestamp,owner,action_name,obj_name from dba_audit_object;

4. 细粒度审计

在 Oracle 11g 中,细粒度审计(Fine-Grained Auditing,FGA)是一种更为强大和灵活的审计方式,可以基于特定的条件进行审计,提供了更细粒度的控制。

  1. 细粒度审计的目的
    精准监控:能够针对特定的数据库对象、特定的操作以及特定的条件进行审计,实现对数据库活动的精准监控。
    减少开销:与传统的审计方式相比,细粒度审计可以只对满足特定条件的操作进行审计,从而减少不必要的审计开销。
    满足复杂需求:适应复杂的业务场景和安全要求,例如只审计对特定表中特定列的访问,或者只审计满足特定条件的 SQL 语句。
  2. 细粒度审计的设置
    使用 DBMS_FGA 包进行设置:
    例如,以下代码将对特定表中特定列的更新操作进行细粒度审计:
      DBMS_FGA.ADD_POLICY(object_schema => 'schema_name',
                             object_name => 'table_name',
                             policy_name => 'audit_policy',
                             audit_condition => 'col1 > 100',
                             audit_column => 'col1',
                             statement_types => 'UPDATE');
   END;
   /

可以设置审计条件、审计的列、操作类型等参数,以满足不同的审计需求。
配置审计策略:
可以根据业务需求和安全要求,灵活配置细粒度审计策略。例如,可以设置多个审计策略,分别针对不同的表、列和操作条件进行审计。
3. 审计日志的查看与分析
查看审计日志:可以通过查询数据库视图来查看细粒度审计记录。例如,DBA_FGA_AUDIT_TRAIL视图包含了细粒度审计的记录,可以根据审计策略名称、对象名称等条件进行筛选。
可以查看详细的审计信息,包括操作时间、用户、操作类型、审计条件等。
分析审计日志:
可以使用 SQL 查询或第三方工具对细粒度审计日志进行分析,以提取有用的信息。例如,分析特定条件下的操作频率、找出异常操作等。
通过分析细粒度审计日志,可以更好地了解数据库活动,发现潜在的安全问题和性能瓶颈,并采取相应的措施进行优化和改进。
4. 细粒度审计实操演示实例

sqlplus / as sysdba
show parameter audit_trail
alter system set audit_trail=db_extended scope=spfile;
startup force
show parameter audit_trail
create user andy identified by andy;
grant create session to andy;
grant select on hr.employees to andy;
alter user hr account unlock identified by hr;
-- 设置 FGA 审计策略
begin
dbms_fga.add_policy(
object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'SAL_SELECT_AUDIT',
audit_condition => 'instr(job_id,''_MAN'') > 0', audit_column => 'SALARY');
end;
/
conn andy/andy
select employee_id, first_name, last_name, email from hr.employees where employee_id = 100;
-- 查看审计记录
conn / as sysdba
select to_char(timestamp,'mm/dd/yy hh24:mi:ss') timestamp, object_schema, object_name,
policy_name, statement_type
from dba_fga_audit_trail where db_user = andy';
conn andy/andy
select employee_id, first_name, last_name, salary from hr.employees where employee_id = 100;
-- 查看审计记录
conn / as sysdba
select to_char(timestamp,'mm/dd/yy hh24:mi:ss') timestamp, object_schema, object_name,
policy_name, statement_type
from dba_fga_audit_trail where db_user = 'andy';

第一个查询访问经理信息,但没有访问 SALARY 列。第二个查询与第一个查询相同,但是访问了SALARY 列,因此触发了 FGA 策略,从而在审计跟踪中生成了一行。

  1. 与审计相关的数据字典视图
  2. 在这里插入图片描述
    本篇完结。
    码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。