ارسال unified audit trail به syslog و Event Viewer(اوراکل 18c/19c)

در اوراکل 18c، پارامتری به نام UNIFIED_AUDIT_SYSTEMLOG اضافه شد که امکان نوشتن unified audit trail را در محیط سیستم عامل فراهم می کند با این قابلیت می توان فیلدهای کلیدی unified audit trail را در محیط لینوکس به syslog و در محیط ویندوز به Event Viewer فرستاد.

SQL>  show parameter unified_audit_systemlog

NAME                                   TYPE       VALUE

————————————    ———- ———-

unified_audit_systemlog             string

قصد داریم با طی چند مرحله، این قابلیت را در محیط لینوکس پیکربندی کنیم.

مرحله اول:تنظیم پارامتر UNIFIED_AUDIT_SYSTEMLOG

برای تنظیم این پارامتر در محیط لینوکس، ابتدا باید facility و priority را مشخص کرد:

UNIFIED_AUDIT_SYSTEMLOG = ‘facility_clause.priority_clause’

مقادیر مجاز برای facility و priority:

facility_clause::={ USER | LOCAL[0 | 1 | 2 | 3 | 4 | 5 | 6 | 7] }

priority_clause::={NOTICE | INFO | DEBUG | WARNING | ERR | CRIT | ALERT | EMERG }

برای مثال، با دستور زیر، LOCAL6 به عنوان facility و EMERG هم به عنوان priority تعیین می شود:

SQL> alter system set UNIFIED_AUDIT_SYSTEMLOG = ‘LOCAL6.EMERG’ scope=spfile;

System altered.

همچنین در محیط ویندوز، برای ارسال لاگ به Event Viewer، صرفا باید این پارامتر را به مقدار TRUE تنظیم نمود:

SQL> alter system set UNIFIED_AUDIT_SYSTEMLOG =TRUE scope=spfile;

System altered.

مرحله دوم: در این مرحله فایل پیکربندی سرویس rsyslog را تنظیم می کنیم:

[root@ol7 ~]# vi /etc/rsyslog.conf

local6.emerg    /var/log/oracle_audit.log

با این تنظیم، unified audit trail در فایل oracle_audit.log نوشته خواهد شد.

مرحله سوم: سرویس rsyslog را restart می کنیم:

 [root@ol7 ~]# systemctl restart rsyslog

مرحله چهارم: دیتابیس را restart می کنیم:

SQL> startup force;

بعد از پیکربندی این قابلیت، قصد داریم با ایجاد یک audit policy، فعالیت کاربر usef را audit کنیم:

SQL> create audit policy audpol actions all;

Audit policy created.

SQL> audit policy audpol by usef;

Audit succeeded.

کاربر usef جدولی با نام mytbl را ایجاد و سپس حذف می کند:

SQL> create table mytbl(id number,name varchar2(10));

Table created.

SQL> drop table mytbl;

Table dropped.

با ایجاد و حذف جدول mytbl توسط کاربر usef، اطلاعاتی به فایل oracle_audit.log اضافه خواهد شد:

[root@ol7 ~]# ls -l  /var/log/oracle_audit.log

-rw——- 1 root root 149653 Jun  2 12:37 /var/log/oracle_audit.log

اطلاعات ثبت شده برای جدول mytbl، به صورت زیر می باشد:

[root@ol7 ~]# cat  /var/log/oracle_audit.log|grep MYTB

2020-06-02T12:37:49.871015+04:30 ol7 Oracle Unified Audit[32293]: LENGTH: ‘166’ TYPE:”4″ DBID:”1820349651″ SESID:”1063221700″ CLIENTID:”” ENTRYID:”101″ STMTID:”22″ DBUSER:”USEF” CURUSER:”USEF” ACTION:”1″ RETCODE:”0″ SCHEMA:”USEF” OBJNAME:”MYTBL”

2020-06-02T12:37:56.547434+04:30 ol7 Oracle Unified Audit[32293]: LENGTH: ‘167’ TYPE:”4″ DBID:”1820349651″ SESID:”1063221700″ CLIENTID:”” ENTRYID:”600″ STMTID:”90″ DBUSER:”USEF” CURUSER:”USEF” ACTION:”12″ RETCODE:”0″ SCHEMA:”USEF” OBJNAME:”MYTBL”

همانطور که می بینید در اطلاعات ثبت شده، خبری از ستون action_name نیست و برای تعیین عمل انجام شده(دستور اجرا شده) باید از ویوی audit_actions کمک گرفت:

SQL> select * from audit_actions where action IN (1,12);

    ACTION NAME

———- ——————–

         1 CREATE TABLE

        12 DROP TABLE

در اوراکل 19c، مختصر بهبودی در این زمینه ایجاد شد که بر اساس ان، برای محیطهای multitenant، ستونی به نام PDB_GUID هم به syslog و Event Viewer ارسال می شود تا مشخص شود که این لاگ مربوط به کدام pdb می باشد.

در قسمت زیر قصد داریم در دو  pdb مختلف، جدول همنامی را ایجاد کرده و تفاوت لاگ ثبت شده در دو نسخه 18c و 19c را بررسی کنیم.

–Oracle 18c:

—-pdb1

SQL> create table TBLPDB(id number,name varchar2(10));

Table created.

[root@ol7 ~]# cat  /var/log/oracle_audit.log|grep TBLPDB

2019-06-24T16:27:06.572337+04:30 ol7 Oracle Unified Audit[22250]: LENGTH: ‘166’ TYPE:”4″ DBID:”557546386″ SESID:”2034358282″ CLIENTID:”” ENTRYID:”69″ STMTID:”14″ DBUSER:”USEF” CURUSER:”USEF” ACTION:”1″ RETCODE:”0″ SCHEMA:”USEF” OBJNAME:”TBLPDB”

—pdb2

SQL> create table TBLPDB(id number,name varchar2(10));

Table created.

[root@ol7 ~]# cat  /var/log/oracle_audit.log|grep TBLPDB

2019-06-24T16:30:24.700120+04:30 ol7 Oracle Unified Audit[23295]: LENGTH: ‘166’ TYPE:”4″ DBID:”4267074312″ SESID:”3992345619″ CLIENTID:”” ENTRYID:”41″ STMTID:”12″ DBUSER:”USEF” CURUSER:”USEF” ACTION:”1″ RETCODE:”0″ SCHEMA:”USEF” OBJNAME:”TBLPDB”

همانطور که می بینید در لاگ ثبت شده، اثری از نام pdb نیست و عملا قابل تشخیص نیست که این دستور در کدام pdb اجرا شده است. در ادامه، همین سناریو را در اوراکل 19c تکرار می کنیم.

–Oracle 19c:

—pdb1

SQL> create table TBLPDB(id number,name varchar2(10));

Table created.

[root@ol7 ~]# cat  /var/log/oracle_audit.log|grep TBL

2019-06-24T16:42:46.357614+04:30 ol7 journal: Oracle Unified Audit[21617]: LENGTH: ‘208’ TYPE:”4″ DBID:”4079153754″ SESID:”437400285″ CLIENTID:”” ENTRYID:”36″ STMTID:”9″ DBUSER:”USEF” CURUSER:”USEF” ACTION:”1″ RETCODE:”0″ SCHEMA:”USEF” OBJNAME:”TBLPDB” PDB_GUID:”8C117B2E612D6DC8E053069B200A0597″

 

—pdb2

SQL> create table TBLPDB(id number,name varchar2(10));

Table created.

[root@ol7 ~]# cat  /var/log/oracle_audit.log|grep TBL

2019-06-24T16:45:03.615033+04:30 ol7 journal: Oracle Unified Audit[23669]: LENGTH: ‘208’ TYPE:”4″ DBID:”2881540304″ SESID:”2348227237″ CLIENTID:”” ENTRYID:”8″ STMTID:”7″ DBUSER:”USEF” CURUSER:”USEF” ACTION:”1″ RETCODE:”0″ SCHEMA:”USEF” OBJNAME:”TBLPDB” PDB_GUID:”8C119BA276F84229E053049B200A00FB”

همانطور که قابل مشاهده است، در خروجی این لاگ، guid مربوط به pdbها ثبت شده اند:

SQL> select PDB_NAME,GUID from cdb_pdbs where PDB_NAME in (‘PDB1′,’PDB2’);

PDB_NAME   GUID

———- ——————————–

PDB1       8C117B2E612D6DC8E053069B200A0597

PDB2       8C119BA276F84229E053049B200A00FB

 

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

Comments (2)

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.