Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Триггер, запрещающий пользователю редактировать данные таблицы  [new]
jivax
Member

Откуда:
Сообщений: 2
Здравствуйте! Помогите, пожалуйста решить проблему. Нужно написать триггер, использующий автономную транзакцию, запрещающий пользователю редактировать данные таблицы и сохраняющий информацию об этом в специальном журнале. Спасибо.
16 ноя 20, 14:41    [22232951]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
jivax,

В чём именно возникли затруднения? Раздел CREATE TRIGGER не нашли в доке?
16 ноя 20, 14:46    [22232957]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
jivax
Member

Откуда:
Сообщений: 2
env, проблема возникла с запретом на редактировании пользователем данных таблицы(не знаю каким образом реализовать) и не совсем понял в какой журнал нужно вносить данные об этом(Просто таблица, в которой записано, что у данного пользователя нет прав на редактирование или же таблица в которой записана попытка пользователя изменить информацию или же это какой-то другой журнал).
16 ноя 20, 14:55    [22232974]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
jivax
env, проблема возникла с запретом на редактировании пользователем данных таблицы(не знаю каким образом реализовать)


В коде (после журнализации) RAISE_APPLICATION_ERROR

https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#i1871

.....
stax
16 ноя 20, 15:13    [22233001]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51815

jivax
не совсем понял в какой журнал нужно вносить данные об этом

Так пойди к преподу и уточни. Хотя по мне "запрещающий пользователю редактировать данные
таблицы и сохраняющий информацию об этом" звучит вполне однозначно как запись информации о
попытке.

Posted via ActualForum NNTP Server 1.5

16 ноя 20, 15:23    [22233013]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
jivax,

А 100 рублей revoke не могут спасти предводителя дворянства?

revoke update on tab123 from user


Или это хитрая ловушка для шпиёнов?
16 ноя 20, 15:34    [22233026]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
jivax,

Примитивная заготовка
SQL> create table dropme_t(n number);

Table created.

SQL> create table dropme_log(user_ varchar2(30), date_ date default sysdate);

Table created.

SQL>  create or replace trigger dropme_trg before insert or update or delete on dropme_t
  2  declare
  3      procedure log_ is
  4          pragma autonomous_transaction;
  5      begin
  6          insert into dropme_log(user_) values(user);
  7          commit;
  8      end;
  9  begin
 10      log_;
 11      raise_application_error(-20001, 'I''m lazy student');
 12 end;
 13 /

Trigger created.

SQL> insert into dropme_t values('bI!');
insert into dropme_t values('bI!')
                            *
ERROR at line 1:
ORA-20001: I'm lazy student
ORA-06512: at "DROPME_U.DROPME_TRG", line 10
ORA-04088: error during execution of trigger 'DROPME_U.DROPME_TRG'


SQL> select * from dropme_log;


Каждое непонятное слово ищете в документации и внимательно читаете.
В триггере, например, можно отловить какое действие пытался сделать пользователь.
16 ноя 20, 15:49    [22233038]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Env,

Я бы укоротил, есть ли причина этого не делать?
create or replace trigger dropme_trg before insert or update or delete on dropme_t
  pragma autonomous_transaction;
begin
  insert into dropme_log(user_) values(user);
  commit;
  raise_application_error(-20001, 'I''m lazy student');
end;
16 ноя 20, 19:03    [22233251]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1647
НеофитSQL, в отличие от test case коллеги env, у вас - в очередной раз неоттестированный поток сознания.

есть ли причина


Есть. Читать документацию и приводить test case.

+
Connected to Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 
Connected as system@//localhost/TEST

SQL> create table dropme_t(n number);

Table created


SQL> create table dropme_log(user_ varchar2(30), date_ date default sysdate);

Table created


SQL> 
SQL> create or replace trigger dropme_trg before insert or update or delete on dropme_t
  2    declare
  3        procedure log_ is
  4            pragma autonomous_transaction;
  5        begin
  6            insert into dropme_log(user_) values(user);
  7            commit;
  8        end;
  9    begin
 10        log_;
 11        raise_application_error(-20001, 'I''m lazy student');
 12   end;
 13  /

Trigger created


SQL> insert into dropme_t values('bI!');
insert into dropme_t values('bI!')

ORA-20001: I'm lazy student
ORA-06512: at "SYSTEM.DROPME_TRG", line 10
ORA-04088: error during execution of trigger 'SYSTEM.DROPME_TRG'

SQL> drop trigger dropme_trg;

Trigger dropped


SQL> 
SQL> create or replace trigger dropme_trg before insert or update or delete on dropme_t
  2    pragma autonomous_transaction;
  3  begin
  4    insert into dropme_log(user_) values(user);
  5    commit;
  6    raise_application_error(-20001, 'I''m lazy student');
  7  end;
  8  /
create or replace trigger dropme_trg before insert or update or delete on dropme_t
  pragma autonomous_transaction;
begin
  insert into dropme_log(user_) values(user);
  commit;
  raise_application_error(-20001, 'I''m lazy student');
end;

ORA-04079: invalid trigger specification

SQL> 
16 ноя 20, 20:02    [22233314]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
dmdmdm


есть ли причина


Есть. Читать документацию и приводить test case.



Eсли бы не "читать документацию", я бы подумал что вы придираетесь к элементарной ошибке, где я строчку "declare" пропустил.

Неужели вы действительно не знаете про автономные триггеры? Читайте документацию.
https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems002.htm

Куда добавить "declare" вы наверное сами разберетесь.
16 ноя 20, 21:58    [22233364]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54398
Vadim Lejnin
jivax,

А 100 рублей revoke не могут спасти предводителя дворянства?

revoke update on tab123 from user


Или это хитрая ловушка для шпиёнов?
запретить шпиёнам апдаты с 17:00 до 08:00
в веб-приложении

Сообщение было отредактировано: 16 ноя 20, 22:12
16 ноя 20, 22:17    [22233372]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Vadim Lejnin

Или это хитрая ловушка для шпиёнов?


Экзотика типа создадим триггер в другой схеме чтобы запретить владельцу таблицы.

SY.
17 ноя 20, 00:02    [22233407]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL
есть ли причина этого не делать

Зачем ограничивать весь скоуп триггера? Возможно понадобится добавить туда что-то, что не требует автономной фиксации. Лучше не выносить в автономку лишнего.
17 ноя 20, 10:07    [22233516]     Ответить | Цитировать Сообщить модератору
 Re: Триггер, запрещающий пользователю редактировать данные таблицы  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env
НеофитSQL
есть ли причина этого не делать

Зачем ограничивать весь скоуп триггера? Возможно понадобится добавить туда что-то, что не требует автономной фиксации. Лучше не выносить в автономку лишнего.


Такое объяснение мне понятно, и на практике я так почти всегда и делаю. Я думал, могли быть еще другие причины в вашем примере, кроме того что код был сделан "на вырост", о которых я не знал.
17 ноя 20, 14:17    [22233743]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить