Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / DDL триггеры не отслеживают оператор COMMENT ON / 16 сообщений из 16, страница 1 из 1
05.03.2014, 10:49:40
    #38578581
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
CREATE TABLE DDL_LOG ( 
    ID INTEGER NOT NULL, 
    MOMENT DATE NOT NULL, 
    USER_NAME VARCHAR(31) NOT NULL, 
    EVENT_TYPE VARCHAR(25) NOT NULL, 
    OBJECT_TYPE VARCHAR(25) NOT NULL, 
    DDL_EVENT VARCHAR(25) NOT NULL, 
    OBJECT_NAME VARCHAR(31) NOT NULL, 
    SQL_TEXT BLOB SUB_TYPE 1 SEGMENT SIZE 80 NOT NULL 
); 

ALTER TABLE DDL_LOG ADD PRIMARY KEY (ID); 

SET TERM ^ ; 

CREATE OR ALTER TRIGGER TRIG_DDL_LOG_AFTER 
ACTIVE AFTER ANY DDL STATEMENT POSITION 0 
AS 
BEGIN 
  INSERT INTO DDL_LOG (ID, 
                       MOMENT, 
                       USER_NAME, 
                       EVENT_TYPE, 
                       OBJECT_TYPE, 
                       DDL_EVENT, 
                       OBJECT_NAME, 
                       SQL_TEXT) 
  VALUES (NEXT VALUE FOR DDL_SEQ, 
          CURRENT_TIMESTAMP, 
          CURRENT_USER, 
          RDB$GET_CONTEXT('DDL_TRIGGER', 'EVENT_TYPE'), 
          RDB$GET_CONTEXT('DDL_TRIGGER', 'OBJECT_TYPE'), 
          RDB$GET_CONTEXT('DDL_TRIGGER', 'DDL_EVENT'), 
          RDB$GET_CONTEXT('DDL_TRIGGER', 'OBJECT_NAME'), 
          RDB$GET_CONTEXT('DDL_TRIGGER', 'SQL_TEXT')); 
END^ 

SET TERM ; ^ 

--------------------------------- 

set term ^; 

create procedure p1 
as 
begin 
end^ 

set term ;^ 

comment on procedure p1 is 'my proc'; 

drop procedure p1; 



Код: plaintext
1.
2.
ID	MOMENT	USER_NAME	EVENT_TYPE	OBJECT_TYPE	DDL_EVENT	OBJECT_NAME	SQL_TEXT 
1	04.03.2014 22:00:42	SYSDBA	 CREATE	PROCEDURE	CREATE PROCEDURE	P1	
2	04.03.2014 22:00:42	SYSDBA	 DROP	PROCEDURE	DROP PROCEDURE	P1

ИХМО, раз COMMENT ON считается DDL оператором, то он тоже должен отслеживаться. Поэтому я создал тикет на эту тему CORE-4358 . Но Адриано похоже так не считает. Какие у вас мнения по этому поводу?
Скажу сразу RN я читал и там не нашёл что COMMENT ON должен отслеживаться, поэтому с багом может я и переборщил
...
Рейтинг: 0 / 0
05.03.2014, 15:58:43
    #38579174
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Имхо все изменения в БД (в данных и метаданных) должны перехватываться триггерами, так или иначе.
На ум пришло что ещё не перехватывается:
- изменения значений генераторов
- GRANT и REVOKE

Генераторы тут не факт что нужны. Хотя вполне можно повесить триггеры и на них, например чтобы проверять новое значение на соответствие диапазону допустимых значений, или чтобы значения следовали строго один за другим, а gen_id(G, -gen_id(G, 0)) мог делать только юзер имеющий на это право).
...
Рейтинг: 0 / 0
05.03.2014, 16:07:35
    #38579191
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDee,

с генераторами всё норм.

Код: sql
1.
ALTER SEQUENCE SEQ_1 RESTART WITH 1;



ещё как перехватывается.

gen_id(G, -gen_id(G, 0)) перехватываться не должно, т.к. не является DDL. Хотя таки навредить может, если у пользователя будет USAGE грант.

GRANT и REVOKE тут согласен тоже надо.
...
Рейтинг: 0 / 0
05.03.2014, 16:22:41
    #38579215
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Симонов Денисgen_id(G, -gen_id(G, 0)) перехватываться не должно, т.к. не является DDL.
Больше похоже на процедуру.
Может "триггеры на вызовы процедур и функций любого типа"? :) Включая встроенные и UDF.
...
Рейтинг: 0 / 0
05.03.2014, 16:31:10
    #38579218
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDeeМожет "триггеры на вызовы процедур и функций любого типа"? :) Включая встроенные и UDF.

Это уже перебор. А то так можно дойти до того чтобы писать триггер на триггер.
...
Рейтинг: 0 / 0
05.03.2014, 17:01:58
    #38579265
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Симонов ДенисЭто уже перебор.
Такой функционал даёт возможность собирать статистику о вызовах, о продолжительности выполнения, о частоте вызова, о параметрах вызова, о возвращаемых результатах.
...
Рейтинг: 0 / 0
05.03.2014, 17:06:13
    #38579271
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDeeСимонов ДенисЭто уже перебор.
Такой функционал даёт возможность собирать статистику о вызовах, о продолжительности выполнения, о частоте вызова, о параметрах вызова, о возвращаемых результатах.
Ну и просто проверять входные параметры на корректность, если нет исходников от процедуры (например это UDF, или UDR в DLL, или обычная sql-процедура без исходника).
...
Рейтинг: 0 / 0
05.03.2014, 17:06:23
    #38579272
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDeeТакой функционал даёт возможность собирать статистику о вызовах, о
продолжительности выполнения, о частоте вызова, о параметрах вызова, о возвращаемых
результатах.
И самое прекрасное: он уже реализован как API Trace Plugin-ов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.03.2014, 17:16:05
    #38579299
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDee,

хватит оффтопить. Тут разговор только о DDL триггерах и ни о чём больше.
...
Рейтинг: 0 / 0
05.03.2014, 18:10:24
    #38579372
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Симонов Денисхватит оффтопить. Тут разговор только о DDL триггерах и ни о чём больше.
Я немного расширил контекст. Грубовато может быть расширил, раз у вас такая реакция...
...
Рейтинг: 0 / 0
05.03.2014, 18:15:39
    #38579377
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
ещё не попадает уж то что точно должно попадать

Код: sql
1.
2.
ALTER DATABASE SET LINGER TO 60;
ALTER DATABASE DROP LINGER;
...
Рейтинг: 0 / 0
05.03.2014, 18:17:21
    #38579380
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDeeЯ немного расширил контекст. Грубовато может быть расширил, раз у вас такая реакция...

если возникло такое желание, то почему бы новый топик не создать?
...
Рейтинг: 0 / 0
05.03.2014, 18:42:02
    #38579396
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Симонов Денисесли возникло такое желание, то почему бы новый топик не создать?
Я не подумал что вы можете быть против расширения контекста.
Хотя теперь вижу что ваш пост 15678118 явно не про "перебор", а про сопротивление расширению контекста. Я его тогда посчитал за кое-что другое, но тоже за сопротивление (то что это именно сопротивление - это видно по общему тону и по уровню аргументации).
Попытаюсь уважать ваше сопротивление в ваших топиках. В моих же топиках прошу чувствовать себя свободным (в контексте полезности для Firebird) :)
...
Рейтинг: 0 / 0
05.03.2014, 18:53:19
    #38579405
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDee,

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

NickDeeТакой функционал даёт возможность собирать статистику о вызовах, о продолжительности выполнения, о частоте вызова, о параметрах вызова, о возвращаемых результатах.

для обычных PSQL процедур и функций это можно сделать прямо в них, для UDR тоже, а UDF объявлены как deprecated
...
Рейтинг: 0 / 0
05.03.2014, 20:06:43
    #38579468
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
Симонов Денисдля обычных PSQL процедур и функций это можно сделать прямо в них, для UDR тоже
Это не удобно, т.к. сложно автоматизировать. И не универсально, т.к. не всегда есть исходники.
Скорей всего Trace API решает эту проблему.

Sql-триггер на вызов процедур - это всё-таки другой порог вхождения для пользователей. Триггер всегда можно написать самому, и понятно как это работает: из триггера можно проверить права, кинуть исключение, залогировать побыстрому (особенно интересно если это можно будет сделать с системными функциями gen_id и rdb$set_context).
...
Рейтинг: 0 / 0
05.03.2014, 20:18:20
    #38579477
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDL триггеры не отслеживают оператор COMMENT ON
NickDee,

в сад
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / DDL триггеры не отслеживают оператор COMMENT ON / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]