网站首页 > 数据库 / 正文
传统审计在 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
猜你喜欢
- 2024-11-26 MS SQL Server——SQL语句导入导出大全
- 2024-11-26 最新!Oracle 20c 新特性详解
- 2024-11-26 一则小故事科普:数据治理到底怎么弄?
- 2024-11-26 SQL注入详解和SQL注入超详细sqlmap使用攻略
- 2024-11-26 一文看懂SqlServer数据库触发器概念、原理及案例
- 2024-11-26 mysql 存储过程总结(二)if语句、参数
- 2024-11-26 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口
- 2024-11-26 C#使用SqlParameter执行多条SQL语句的方法
- 2024-11-26 数据库管理须知!如何快速掌握 SQL Server 中的 IF THEN 逻辑?
- 2024-11-26 每天一个常用MySQL函数-if、isnull、ifnull等