百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Oracle Database 23ai 中的审计增强功能

csdh11 2024-12-03 11:53 19 浏览

传统审计在 Oracle 21c 中已弃用,并且在 Oracle 23ai 中已不再支持。

一、审核表和视图的各个列

在 Oracle 23ai 中,我们可以对表和视图的各个列创建审计策略,这使我们能够通过忽略不影响感兴趣列的操作来精简审计跟踪的内容。对于表或视图列,我们可以审核以下操作

ALL, ALTER, AUDIT, COMMENT, DELETE, GRANT, INDEX, INSERT, SELECT, UPDATE

详细的可审计的对象操作

对象

可以被审核的操作

Directory

AUDIT, GRANT, READ

Function

AUDIT, EXECUTE, GRANT

Java schema objects (source, class, resource)

AUDIT, EXECUTE, GRANT

Library

EXECUTE, GRANT

Materialized views

ALTER, AUDIT, COMMENT, DELETE, INDEX, INSERT, LOCK, SELECT, UPDATE

Mining Model

AUDIT, COMMENT, GRANT, RENAME, SELECT

Object type

ALTER, AUDIT, GRANT

Package

AUDIT, EXECUTE, GRANT

Procedure (including triggers)

AUDIT, EXECUTE, GRANT

Sequence

ALTER, AUDIT, GRANT, SELECT

Table

ALTER, AUDIT, COMMENT, DELETE, FLASHBACK, GRANT, INDEX, INSERT, LOCK, MERGE, RENAME, SELECT, UPDATE

Table or view column

ALL, ALTER, AUDIT, COMMENT, DELETE, GRANT, INDEX, INSERT, SELECT, UPDATE

View

AUDIT, COMMENT, DELETE, FLASHBACK, GRANT, INSERT, LOCK, MERGE, RENAME, SELECT, UPDATE


二、测试示例

为了演示这一点,我们创建一个测试表。


2.1 、创建测试用户

sqlplus sys/oracle@db1:1521/freepdb1 as sysdba
create user testuser1 identified by testuser1;
grant connect,resource to testuser1;
ALTER USER testuser1 QUOTA unlimited ON users;


2.2 创建测试表

sqlplus sys/oracle@db1:1521/freepdb1 as sysdba

drop table if exists audit_test_tab purge;

create table audit_test_tab (
 id number generated always as identity,
 col1 varchar2(10),
 col2 varchar2(10),
 col3 varchar2(10)
);

insert into audit_test_tab (col1, col2) values ('apple', 'banana');
commit;


2.3 管理员用户配置审计策略

我们连接到特权用户并创建新的审核策略。我们想要审核 COL1 或 COL2 上的更新以及 COL2 的查询。请注意,我们提供了审核操作适用的以逗号分隔的列列表。

sqlplus sys/oracle@db1:1521/freepdb1 as sysdba
noaudit policy test_audit_policy;
drop audit policy test_audit_policy;
create audit policy test_audit_policy
 actions update(col1, col2) on testuser1.audit_test_tab,
select(col2) on testuser1.audit_test_tab
 container = current;
audit policy test_audit_policy;

2.4 审计跟踪

我们检查针对表的操作的审计跟踪,我们可以看到没有审计任何操作。

conn testuser1/testuser1@db1:1521/freepdb1
column event_timestamp format a30
column dbusername format a10
column action_name format a20
column object_schema format a10
column object_name format a20
column sql_text format a40
select event_timestamp,
 dbusername,
 action_name,
 object_schema,
 object_name,
 sql_text
from unified_audit_trail
where object_name = 'AUDIT_TEST_TAB'
order BY event_timestamp;
no rows selected
SQL>

2.5 测试表操作

我们对测试表执行一些操作,其中一些是可审计的操作。

conn testuser1/testuser1@db1:1521/freepdb1


-- Not audited.
insert into audit_test_tab (col1, col2) values ('apple2', 'banana2');

update audit_test_tab
set col3 = 'pear'
where col3 is null;
commit;
select id from audit_test_tab;
 ID
----------
1
2

SQL>

-- Audited.
update audit_test_tab
set col1 = 'apple1'
where col1 = 'apple';
update audit_test_tab
set col2 = 'banana1'
where col2 = 'banana';
select col2 from audit_test_tab;
COL2
----------
banana1
banana2

SQL>

2.6 查看审计记录

我们检查审计线索。

sqlplus sys/oracle@db1:1521/freepdb1 as sysdba

column event_timestamp format a30
column dbusername format a10
column action_name format a20
column object_schema format a10
column object_name format a20
column sql_text format a40

select event_timestamp,
 dbusername,
 action_name,
 object_schema,
 object_name,
 sql_text
from unified_audit_trail
where object_name = 'AUDIT_TEST_TAB'
order BY event_timestamp;

EVENT_TIMESTAMP DBUSERNAME ACTION_NAME OBJECT_SCH OBJECT_NAME SQL_TEXT
------------------------------ ---------- -------------------- ---------- -------------------- ----------------------------------------
06-NOV-24 02.53.55.596205 PM TESTUSER1 UPDATE TESTUSER1 AUDIT_TEST_TAB update audit_test_tab
 set col1 = 'apple1'
 where col1 = 'apple'

06-NOV-24 02.53.56.115961 PM TESTUSER1 UPDATE TESTUSER1 AUDIT_TEST_TAB update audit_test_tab
 set col2 = 'banana1'
 where col2 = 'banana'

06-NOV-24 02.54.00.192296 PM TESTUSER1 SELECT TESTUSER1 AUDIT_TEST_TAB select col2 from audit_test_tab

请注意,仅审核指定列上的那些操作。 ID列的查询以及COL3列的更新没有被审计。


写在最后

数据库在当今信息社会中扮演着重要角色,为各行各业提供数据支持。如果你想深入了解数据库的使用与管理,欢迎关注我们的微信公众号“安呀智数据坊”,我们将定期分享更多相关知识和行业动态。

如果你觉得这篇文章对你有帮助,记得点赞支持一下哦!你的每一个点赞都是我继续创作的动力!

相关推荐

探索Java项目中日志系统最佳实践:从入门到精通

探索Java项目中日志系统最佳实践:从入门到精通在现代软件开发中,日志系统如同一位默默无闻却至关重要的管家,它记录了程序运行中的各种事件,为我们排查问题、监控性能和优化系统提供了宝贵的依据。在Java...

用了这么多年的java日志框架,你真的弄懂了吗?

在项目开发过程中,有一个必不可少的环节就是记录日志,相信只要是个程序员都用过,可是咱们自问下,用了这么多年的日志框架,你确定自己真弄懂了日志框架的来龙去脉嘛?下面笔者就详细聊聊java中常用日志框架的...

物理老师教你学Java语言(中篇)(物理专业学编程)

第四章物质的基本结构——类与对象...

一文搞定!Spring Boot3 定时任务操作全攻略

各位互联网大厂的后端开发小伙伴们,在使用SpringBoot3开发项目时,你是否遇到过定时任务实现的难题呢?比如任务调度时间不准确,代码报错却找不到方向,是不是特别头疼?如今,随着互联网业务规模...

你还不懂java的日志系统吗 ?(java的日志类)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

谈谈枚举的新用法--java(java枚举的作用与好处)

问题的由来前段时间改游戏buff功能,干了一件愚蠢的事情,那就是把枚举和运算集合在一起,然后运行一段时间后buff就出现各种问题,我当时懵逼了!事情是这样的,做过游戏的都知道,buff,需要分类型,且...

你还不懂java的日志系统吗(javaw 日志)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

Java 8之后的那些新特性(三):Java System Logger

去年12月份log4j日志框架的一个漏洞,给Java整个行业造成了非常大的影响。这个事情也顺带把log4j这个日志框架推到了争议的最前线。在Java领域,log4j可能相对比较流行。而在log4j之外...

Java开发中的日志管理:让程序“开口说话”

Java开发中的日志管理:让程序“开口说话”日志是程序员的朋友,也是程序的“嘴巴”。它能让程序在运行过程中“开口说话”,告诉我们它的状态、行为以及遇到的问题。在Java开发中,良好的日志管理不仅能帮助...

吊打面试官(十二)--Java语言中ArrayList类一文全掌握

导读...

OS X 效率启动器 Alfred 详解与使用技巧

问:为什么要在Mac上使用效率启动器类应用?答:在非特殊专业用户的环境下,(每天)用户一般可以在系统中进行上百次操作,可以是点击,也可以是拖拽,但这些只是过程,而我们的真正目的是想获得结果,也就是...

Java中 高级的异常处理(java中异常处理的两种方式)

介绍异常处理是软件开发的一个关键方面,尤其是在Java中,这种语言以其稳健性和平台独立性而闻名。正确的异常处理不仅可以防止应用程序崩溃,还有助于调试并向用户提供有意义的反馈。...

【性能调优】全方位教你定位慢SQL,方法介绍下!

1.使用数据库自带工具...

全面了解mysql锁机制(InnoDB)与问题排查

MySQL/InnoDB的加锁,一直是一个常见的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?下面是不同锁等级的区别表级锁:开销小,加锁快;不会出现死锁;锁定粒度...

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

一、什么是死锁加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获...