Как узнать, какой пользователь сделал последнее изменение строки таблицы - PullRequest
0 голосов
/ 06 августа 2020

скажем, в схеме user1 есть таблица с именем user1_table, а user2 имеет права вставки / обновления / удаления на user1_table

Я знаю, как найти дату / время последнего изменения следующим образом

SELECT scn_to_timestamp(ORA_ROWSCN)
  FROM user1_table
 WHERE id = 1;

Есть ли способ узнать, какой пользователь (user1 или user2?) Последним изменил эту конкретную строку?

1 Ответ

1 голос
/ 06 августа 2020

Чтобы узнать, кто внес изменения, вам необходимо включить аудит. Для этого требуется настройка, и у вас есть параметры (БД, ОС). Чтобы разрешить аудит на сервере, вы должны:

  • Установить audit_trail = true
  • Запустить $ORACLE_HOME/rdbms/admin/cataudit.sql script while connected as SYS.

Простой пример:

SQL> create table t ( c1 number , c2 number )
  2  ;

Table created.

SQL> audit insert,update,delete on t by access ;

Audit succeeded.

Вы также можете создать триггер для сохранения в таблице, кто внес изменения, применив свойства SYS_CONTEXT

Пример ниже приведен базовый c один, вы можете расширить свойства триггера, чтобы управлять обновлениями и удалениями.

SQL> create table t ( c1 number, c2 number ) ;

Table created.

SQL> create table t_audit ( who varchar2(40) , c1 number, c2 number ) ;

Table created.

SQL>
create or replace trigger trg_aud_t after update on t
for each row
declare
v_user varchar2(40);
begin
  select sys_context('userenv','session_user') into v_user from dual;
  insert into t_audit values ( v_user , :new.c1 , :new.c2 );
end;
/SQL>   2    3    4    5    6    7    8    9

Trigger created.

SQL> update t set c1=2 , c2=2 where c1=1  ;

1 row updated.

SQL> commit ;

Commit complete.

SQL> select * from t_audit ;

WHO                                              C1         C2
---------------------------------------- ---------- ----------
SYS                                               2          2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...