详解Oracle审计(二)

题记:

本文将承接上篇详细介绍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;
    /

可以设置审计条件、审计的列、操作类型等参数,以满足不同的审计需求。

配置审计策略:

可以根据业务需求和安全要求,灵活配置细粒度审计策略。例如,可以设置多个审计策略,分别针对不同的表、列和操作条件进行审计。

  1. 审计日志的查看与分析

查看审计日志:可以通过查询数据库视图来查看细粒度审计记录。例如,DBA_FGA_AUDIT_TRAIL视图包含了细粒度审计的记录,可以根据审计策略名称、对象名称等条件进行筛选。

可以查看详细的审计信息,包括操作时间、用户、操作类型、审计条件等。

分析审计日志:

可以使用 SQL 查询或第三方工具对细粒度审计日志进行分析,以提取有用的信息。例如,分析特定条件下的操作频率、找出异常操作等。

通过分析细粒度审计日志,可以更好地了解数据库活动,发现潜在的安全问题和性能瓶颈,并采取相应的措施进行优化和改进。

  1. 细粒度审计实操演示实例

    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. 本篇完结。
    码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。
相关推荐
tan180°13 分钟前
Linux进程信号处理(26)
linux·c++·vscode·后端·信号处理
大神的风范18 分钟前
从0开始学linux韦东山教程第三章问题小结(4)
linux·服务器
sz66cm32 分钟前
Linux基础 -- SSH 流式烧录与压缩传输笔记
linux·笔记·ssh
YOYO--小天1 小时前
RS485和RS232 通信配置
linux·嵌入式硬件
大蚂蚁2号1 小时前
windows文件共享另一台电脑资源管理器网络文件夹无法找到机器
运维·服务器·网络
Lw老王要学习1 小时前
Linux数据库篇、第一章_02_MySQL的使用增删改查
linux·运维·数据库·mysql·云计算·it
林下清风~1 小时前
MySQL——九、锁
数据库·mysql
斤斤计较2 小时前
Docker 环境安装(2025最新版)
运维·docker·容器
小锋学长生活大爆炸2 小时前
【教程】Docker方式本地部署Overleaf
运维·docker·容器
xiaoyaoyou.xyz2 小时前
嵌入式Linux Qt开发:1、搭建基于ubuntu18.04的Qt开发环境及测试(解决Qt creator输入法问题)
linux·qt