Oracle DB: Аудит: различия между версиями

Материал из sysadm
Перейти к навигации Перейти к поиску
Строка 71: Строка 71:
 
AUDIT SELECT ON DBA_TABLES BY NORMAL;
 
AUDIT SELECT ON DBA_TABLES BY NORMAL;
 
AUDIT SELECT ON my_user.my_table BY NORMAL;
 
AUDIT SELECT ON my_user.my_table BY NORMAL;
 +
</pre>
 +
 +
<pre>
 +
-- справочник ACTION кодов аудита
 +
select * from AUDIT_ACTIONS
 
</pre>
 
</pre>
  

Версия 13:30, 12 мая 2025

Traditional Audit (12.1 и ниже)

Доступ на управление аудитом

grant AUDIT_ADMIN to <user>
grant AUDIT_VIEWER to <user>

Параметр AUIDIT_TRAIL

AUIDIT_TRAIL = NONE | OS | DB [, EXTENDED] | XML [, EXTENDED]

NONE         - аудит выключен (значение по умолчанию)
OS           - записи аудита пишутся в файлы
DB           - записи аудита пишутся в таблицу SYS.AUD$, кроме тех что всегда пишутся в файлы
               если база открыта в режиме READ ONLY, то аудит будет записываться в файлы
DB,EXTENDED  - аналогично DB, но в таблице аудита дополнительно заполняются поля SQL_TEXT, SQL_BIND
XML          - записи аудита пишутся в файлы в формате XML
XML,EXTENDED - аналогично XML, но в файлы дополнительно пишутся поля SQL_TEXT, SQL_BIND


Проверка параметров аудита

select name,value from v$parameter where name like 'audit_%';

NAME                           VALUE
------------------------------ ----------------------------------------
audit_sys_operations           FALSE
audit_file_dest                /opt/oracle/admin/mydb1/adump
audit_syslog_level
audit_trail                    NONE

Просмотр политик аудита

-- все политики аудита определенные в базе данных
select * from DBA_AUDIT_POLICIES;

-- все политики аудита определенные в базе данных на уровне столбцов
select * from DBA_AUDIT_POLICY_COLUMNS;

-- все опции аудита
select * from ALL_DEF_AUDIT_OPTS;
  -/-: no default auditing
  S/-: auditing whenever successful
  -/S: auditing whenever not successful

Column Datatype NULL Description
ALT VARCHAR2(3) Auditing ALTER WHENEVER SUCCESSFUL / UNSUCCESSFUL
AUD VARCHAR2(3) Auditing AUDIT WHENEVER SUCCESSFUL / UNSUCCESSFUL
COM VARCHAR2(3) Auditing COMMENT WHENEVER SUCCESSFUL / UNSUCCESSFUL
DEL VARCHAR2(3) Auditing DELETE WHENEVER SUCCESSFUL / UNSUCCESSFUL
GRA VARCHAR2(3) Auditing GRANT WHENEVER SUCCESSFUL / UNSUCCESSFUL
IND VARCHAR2(3) Auditing INDEX WHENEVER SUCCESSFUL / UNSUCCESSFUL
INS VARCHAR2(3) Auditing INSERT WHENEVER SUCCESSFUL / UNSUCCESSFUL
LOC VARCHAR2(3) Auditing LOCK WHENEVER SUCCESSFUL / UNSUCCESSFUL
REN VARCHAR2(3) Auditing RENAME WHENEVER SUCCESSFUL / UNSUCCESSFUL
SEL VARCHAR2(3) Auditing SELECT WHENEVER SUCCESSFUL / UNSUCCESSFUL
UPD VARCHAR2(3) Auditing UPDATE WHENEVER SUCCESSFUL / UNSUCCESSFUL
REF CHAR(3) This column is obsolete and maintained for backward compatibility. The value of this column is always -/-
EXE VARCHAR2(3) Auditing EXECUTE WHENEVER SUCCESSFUL / UNSUCCESSFUL
FBK VARCHAR2(3) Auditing FLASHBACK WHENEVER SUCCESSFUL / UNSUCCESSFUL
REA VARCHAR2(3) Auditing READ WHENEVER SUCCESSFUL / UNSUCCESSFUL

Настройка аудита на уровне базы

AUDIT ALL PRIVILEGES BY NORMAL;
AUDIT SELECT ON DBA_TABLES BY NORMAL;
AUDIT SELECT ON my_user.my_table BY NORMAL;
-- справочник ACTION кодов аудита
select * from AUDIT_ACTIONS

Unified Audit (12.2 и выше)

В версии Oracle Database 12c и выше реализован новый механизм аудита Unified Audit

дополнительные параметры для Unified Audit

unified_audit_common_systemlog
unified_audit_sga_queue_size
unified_audit_systemlog

На уровне базы данных Unified Audit настраивается с помощью политик аудита. По умолчанию, в базе есть предварительно созданные политики аудита.

Обслуживание аудита

Ссылки по теме:

Типы аудита

  • AUDIT_TRAIL_ALL, все типы аудита
  • AUDIT_TRAIL_AUD_STD, стандартная таблица аудита, AUD$
  • AUDIT_TRAIL_FGA_STD, Fine-grained, таблица FGA_LOG$
  • AUDIT_TRAIL_UNIFIED
  • AUDIT_TRAIL_XML
  • AUDIT_TRAIL_OS

Ручная чистка стандартного аудита

-- определение размера таблиц
SELECT segment_name, round(bytes/1024/1024/1024,1) as sz_gb FROM DBA_SEGMENTS WHERE SEGMENT_NAME IN ('AUD$', 'FGA_LOG$');

-- определение диапазона дат и количества записей
col t1 format a30;
col t2 format a30;
SELECT min(ntimestamp#) t1, max(ntimestamp#) t2, count(*) count FROM SYS.AUD$;
SELECT min(ntimestamp#) t1, max(ntimestamp#) t2, count(*) count FROM SYS.FGA_LOG$;

-- проверка параметров автоматической чистки
SELECT * FROM DBA_AUDIT_MGMT_CONFIG_PARAMS;

PARAMETER_NAME                 PARAMETER_VALUE      AUDIT_TRAIL
------------------------------ -------------------- ------------------------------------------------------------------------------------
DEFAULT CLEAN UP INTERVAL      24                   STANDARD AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL      24                   FGA AUDIT TRAIL

-- если присутствуют данные параметры, то необходимо переинициализировать автоматическую чистку
-- если параметры отсутствуют, то необходимо инициализировать автоматическую чистку
-- переинициализация автоматической чистки
BEGIN
  DBMS_AUDIT_MGMT.DEINIT_CLEANUP(
    AUDIT_TRAIL_TYPE  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD
  );
DBMS_AUDIT_MGMT.INIT_CLEANUP(
  AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    DEFAULT_CLEANUP_INTERVAL => 24*7           // интервал задается в часах, допустимый диапазон [1-999] 
  );
END;

-- чистка до заданной даты
-- необходимо учитывать, что чистка может привести к переполнению каталога с архив-логами
-- необходимо определить диапазон данных аудита и выбирать дату так, чтобы в одну итерацию чистки не попадало слишком много данных
BEGIN
  SYS.DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP (
    AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    LAST_ARCHIVE_TIME => SYSTIMESTAMP - <retention_days>
  );
  SYS.DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL (
    AUDIT_TRAIL_TYPE => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    USE_LAST_ARCH_TIMESTAMP => TRUE
  );
  commit;
END;
/