详解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. 本篇完结。
    码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。
相关推荐
fnd_LN3 分钟前
Linux文件目录 --- mkdir命令,创建目录,多级目录,设置目录权限
linux·运维·服务器
计算机学长felix6 分钟前
基于SpringBoot的“大学生社团活动平台”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
会飞的土拨鼠呀13 分钟前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes
木与子不厌15 分钟前
微服务自定义过滤器
运维·数据库·微服务
达帮主21 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
派可数据BI可视化28 分钟前
连锁餐饮行业数据可视化分析方案
大数据·数据库·数据仓库·数据分析·商业智能bi
dbcat官方30 分钟前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
行思理32 分钟前
Linux 下SVN新手操作手册
linux·运维·svn
青年有志38 分钟前
深入浅出 MyBatis | CRUD 操作、配置解析
数据库·tomcat·mybatis
数据的世界0141 分钟前
SQL创建和操纵表
数据库·sql