MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

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

2024-11-26 20:14 huorong 数据库 4 ℃ 0 评论

传统审计在 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列的更新没有被审计。


写在最后

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

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

Tags:oracle pl sql if

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言