در این پست به بررسی برخی از بهبودهای Auditing در Oracle Database 23ai میپردازیم.
Auditing سنتی (Traditional Auditing) در Oracle 21c از رده خارج شد و در Oracle 23ai دیگر پشتیبانی نمیشود. توصیه میشود که از Unified Auditing استفاده کنید.
در Oracle 23ai، میتوانید بر روی ستونهای جداگانه جداول و ویوها سیاستهای Auditing ایجاد کنید. این قابلیت به شما اجازه میدهد تا محتوای audit trail را کاهش دهید و تنها اعمالی که روی ستونهای مورد نظر انجام میشوند را ثبت کنید. برای یک ستون در جدول یا ویو میتوانید عملیات زیر را Audit کنید:
در ادامه مثالی از نحوه پیادهسازی این قابلیت آورده شده است.
ایجاد جدول تست
conn testuser1/testuser1@//localhost:1521/freepdb1
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;
سیاست جدیدی برای Audit کردن عملیات UPDATE روی ستونهای COL1 و COL2 و SELECT روی COL2 ایجاد میکنیم. توجه کنید که لیستی از ستونها برای عملیات Auditing به صورت کاما جدا شده ارائه میشود.
conn sys/SysPassword1@//localhost: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;
در این مرحله، trailهای Audit برای عملیات انجام شده بر روی جدول را بررسی میکنیم.
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;
نتیجه: هیچ ردی از Auditing در حال حاضر وجود ندارد.
در ادامه برخی از عملیات بر روی جدول تست انجام میدهیم. بخشی از این عملیاتها قابل Auditing هستند.
conn testuser1/testuser1@//localhost: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
———-
۱
۲
SQL>
۱
عملیات زیر قابل Auditing هستند:
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
conn sys/SysPassword1@//localhost: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
—————————— ———- ——————– ———- ——————– —————————————-
۱۴-JUN-23 19.31.17.231940 PM TESTUSER1 UPDATE TESTUSER1 AUDIT_TEST_TAB update audit_test_tab
set col1 = ‘apple1’
where col1 = ‘apple’
۱۴-JUN-23 19.31.17.248862 PM TESTUSER1 UPDATE TESTUSER1 AUDIT_TEST_TAB update audit_test_tab
set col2 = ‘banana1’
where col2 = ‘banana’
۱۴-JUN-23 19.31.17.252646 PM TESTUSER1 SELECT TESTUSER1 AUDIT_TEST_TAB select col2 from audit_test_tab
SQL>
فقط عملیات مربوط به ستونهای COL1 و COL2 Audit شدهاند. کوئری مربوط به ستون ID و بروزرسانی ستون COL3 ثبت نشدهاند. این ویژگی به شما امکان میدهد که حجم دادههای Audit شده را کاهش داده و تنها عملیاتهای مورد نیاز را ثبت کنید.