powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / DDL триггеры не отслеживают оператор COMMENT ON
16 сообщений из 16, страница 1 из 1
DDL триггеры не отслеживают оператор COMMENT ON
    #38578581
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
DDL триггеры не отслеживают оператор COMMENT ON
    #38579174
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо все изменения в БД (в данных и метаданных) должны перехватываться триггерами, так или иначе.
На ум пришло что ещё не перехватывается:
- изменения значений генераторов
- GRANT и REVOKE

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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


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