Как узнать, изменлось ли поле "expiry_date" в таблице пользователей Oracle?

Я столкнулся с очень специфической задачей с Oracle.
Мне нужно доказать, что значения в столбце expiry_date таблицы dba_users не были изменены в определенный период времени (в течении последних выходных).

У меня нет большого опыта общения с Oracle, по этому я не уверен, но кажется что функция под названием "audit" отключена.

Итак, мне нужна любая возможность проверить, были изменения полей в указанной таблице. Я уже пытался проанализировать таблицу user_sessions (хотел проверить наличие сессий в течение рассматриваемого периода), но не смог получить точный ответ.


Ответы (1 шт):

Автор решения: 0xdb

Включен ли аудит, можно узнать так:

show parameters audit_trail

NAME        TYPE   VALUE 
----------- ------ ----- 
audit_trail string DB     

Если БД создавалась с помощью DBCA, то это стандартное значение параметра по умолчанию.

Directs audit records to the database audit trail (the SYS.AUD$ table), except for records that are always written to the operating system audit trail. Use this setting for a general database for manageability.

На таблице SYS.AUD$ существует ряд представлений (dba_audit_(trail|object)).
Например, следующая команда принудит пользвателя изменить пароль и содаст новую аудит запись:

alter user hr password expire;

select os_username, username, userhost, timestamp, obj_name, action_name  
from dba_audit_trail where action_name = 'ALTER USER';

OS_USERNAME  USERNAME     USERHOST     TIMESTAMP           OBJ_NAME ACTION_NAME                 
------------ ------------ ------------ ------------------- -------- ----------------------------
oracle       SYSTEM       dbsrv        2013-06-22 13:41:13 HR       ALTER USER                  
ME           ME           clnthost     2020-06-26 17:54:14 HR       ALTER USER             
→ Ссылка