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

Материал из sysadm
Перейти к навигации Перейти к поиску
 
(не показаны 22 промежуточные версии этого же участника)
Строка 1: Строка 1:
  
= Настройка аудита =
+
= Standard Audit (12.1 и ниже) =
  
 
'''Доступ на управление аудитом'''
 
'''Доступ на управление аудитом'''
 
<pre>
 
<pre>
 
grant AUDIT_ADMIN to <user>
 
grant AUDIT_ADMIN to <user>
 +
grant AUDIT_VIEWER to <user>
 
</pre>
 
</pre>
  
'''Параметр <code>AUIDIT_TRAIL</code>'''
+
'''Параметры'''
 
<pre>
 
<pre>
AUIDIT_TRAIL = NONE | OS | DB | XML | EXTENDED
+
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
 +
 
 +
AUDIT_SYS_OPERATIONS = FALSE | TRUE
 +
  # включение/выключение аудита операций, для пользователей подключенных с правами SYSDBA или SYSOPER
 +
 
 +
AUDIT_SYSLOG_LEVEL = 'facility_clause.priority_clause'
 +
  # данный параметр перекрывает параметр AUIDIT_TRAIL, данные аудита пишутся в syslog
 +
 
 +
facility_clause::=
 +
  { USER | LOCAL[0 | 1 | 2 | 3 | 4 | 5 | 6 | 7] |
 +
    SYSLOG | DAEMON | KERN | MAIL | AUTH | LPR | NEWS |
 +
    UUCP | CRON }
 +
 
 +
priority_clause::=
 +
  { NOTICE | INFO | DEBUG | WARNING | ERR | CRIT |
 +
    ALERT | EMERG }
 +
 
 
</pre>
 
</pre>
  
Строка 24: Строка 49:
 
audit_trail                    NONE
 
audit_trail                    NONE
 
</pre>
 
</pre>
 +
 +
'''Просмотр политик аудита'''
 +
<pre>
 +
-- все политики аудита определенные в базе данных
 +
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
 +
 +
-- displays audit trail entries produced by AUDIT EXISTS and AUDIT NOT EXISTS
 +
select * from DBA_AUDIT_EXISTS;
 +
 +
-- история чистки аудита
 +
select * from DBA_AUDIT_MGMT_CLEAN_EVENTS;
 +
 +
-- задачи чистки аудита
 +
select * from DBA_AUDIT_MGMT_CLEANUP_JOBS;
 +
 +
-- прочие системные параметры аудита
 +
select * from DBA_AUDIT_MGMT_CONFIG_PARAMS;
 +
 +
</pre>
 +
 +
'''Настройка аудита на уровне базы'''
 +
<pre>
 +
AUDIT ALL PRIVILEGES BY NORMAL;
 +
AUDIT SELECT ON DBA_TABLES BY NORMAL;
 +
AUDIT SELECT ON my_user.my_table BY NORMAL;
 +
</pre>
 +
 +
<pre>
 +
-- справочник ACTION кодов аудита
 +
select * from AUDIT_ACTIONS
 +
</pre>
 +
 +
'''Просмотр записей аудита'''
 +
<pre>
 +
select * from SYS.AUD$;
 +
select * from DBA_AUDIT_OBJECT;
 +
select * from DBA_AUDIT_TRAIL;
 +
</pre>
 +
 +
= Fine-Grained Audit =
 +
 +
<pre>
 +
SELECT * FROM SYS.FGA_LOG$;
 +
</pre>
 +
 +
= Unified Audit (12.2 и выше) =
 +
В версии Oracle Database 12c и выше реализован новый механизм аудита '''Unified Audit'''
 +
 +
'''дополнительные параметры для Unified Audit'''
 +
<pre>
 +
unified_audit_common_systemlog
 +
unified_audit_sga_queue_size
 +
unified_audit_systemlog
 +
</pre>
 +
 +
На уровне базы данных '''Unified Audit''' настраивается с помощью политик аудита. По умолчанию, в базе есть предварительно созданные политики аудита.
  
 
= Обслуживание аудита =
 
= Обслуживание аудита =
Строка 32: Строка 139:
 
* [https://zhidba.ru/index.php/stati/oracle/89-oracle-1 Практическое администрирование Oracle - Аудит. Часть1.]
 
* [https://zhidba.ru/index.php/stati/oracle/89-oracle-1 Практическое администрирование Oracle - Аудит. Часть1.]
 
* [https://zhidba.ru/index.php/stati/oracle/119-oracle-2 Практическое администрирование Oracle - Аудит. Часть2.]
 
* [https://zhidba.ru/index.php/stati/oracle/119-oracle-2 Практическое администрирование Oracle - Аудит. Часть2.]
 +
* [https://docs.oracle.com/cd/E25054_01/network.1111/e16543.pdf Oracle® Database Security Guide 11g Release 2 (11.2)]
  
 
'''Типы аудита'''
 
'''Типы аудита'''

Текущая версия на 11:06, 5 июня 2025

Standard Audit (12.1 и ниже)

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

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

Параметры

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

AUDIT_SYS_OPERATIONS = FALSE | TRUE
  # включение/выключение аудита операций, для пользователей подключенных с правами SYSDBA или SYSOPER

AUDIT_SYSLOG_LEVEL = 'facility_clause.priority_clause'
  # данный параметр перекрывает параметр AUIDIT_TRAIL, данные аудита пишутся в syslog

facility_clause::=
  { USER | LOCAL[0 | 1 | 2 | 3 | 4 | 5 | 6 | 7] |
    SYSLOG | DAEMON | KERN | MAIL | AUTH | LPR | NEWS |
    UUCP | CRON }

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


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

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

-- displays audit trail entries produced by AUDIT EXISTS and AUDIT NOT EXISTS
select * from DBA_AUDIT_EXISTS;

-- история чистки аудита
select * from DBA_AUDIT_MGMT_CLEAN_EVENTS;

-- задачи чистки аудита
select * from DBA_AUDIT_MGMT_CLEANUP_JOBS;

-- прочие системные параметры аудита
select * from DBA_AUDIT_MGMT_CONFIG_PARAMS;

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

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

Просмотр записей аудита

select * from SYS.AUD$;
select * from DBA_AUDIT_OBJECT;
select * from DBA_AUDIT_TRAIL;

Fine-Grained Audit

SELECT * FROM SYS.FGA_LOG$;

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;
/