powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Кривое создание триггера для CONSTRAINT <name> CHECK (...)
25 сообщений из 34, страница 1 из 2
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316808
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И снова здравствуйте!
Пользую FirebirdSQL Server v2.5.7. При описании таблиц, обычно задаю ограничение на столбец не непосредственно в описании столбца, а через CONSTRAINT с указанием имени, как по привычке, так и для того, чтобы раздать триггеру по CHECK права на используемые им таблицы. Мало того, что триггер создается в двух экземплярах (по одному для INSERT и UPDATE) с именами CHECK_<номер>, так еще и GRANT ... TO TRIGGER <check_constraint_name> не учитывает эту особенность и не раздает права на эти триггеры CHECK_<номер>.
Можно ли как-то поправить эту кривизну в следующих снапшотах, например, созданием одного триггера BEFORE INSERT OR UPDATE с заданным именем ограничения CHECK?
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316811
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
букав много.
примера нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316815
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовать другие таблицы в ограничении CHECK очень сильно не рекомендуется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316823
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

+1

rdb_dev,

CHECK_ это системные триггеры на них права не раздаются в принципе.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316885
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, я понимаю, что использовать выборку из таблиц внутри CHECK - моветон, так как получаемые в выборке строки таблиц не блокируются на изменение в момент работы CHECK (хотя должны бы), но это другая история.

Предположим, что в некой таблице хранятся границы диапазона, в который должно попадать добавляемое/изменяемое значение. Очевидно, что никакое ограничение по FK здесь не прокатит и надо либо делать ограничение CHECK с выборкой из таблицы диапазонов с допущением, что диапазон не сокращается так, что значения выходят за его пределы (явно запрещено проверкой в триггере для таблицы, хранящей диапазоны), либо писать триггер с похожей проверкой, но использовать FOR UPDATE WITH LOCK на запись в таблице диапазонов.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316902
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, знаю, что системные и знаю, что не могу делать так, как делает сервер:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE OR ALTER TRIGGER <check_constraint_name>
  FOR <table_name>
  ACTIVE
  BEFORE INSERT
  POSITION 0
CHECK (...)

Но, ИМХО, необходимо поправить сервер так, чтобы либо создавался только один триггер с именем ограничения CHECK сразу для вставки и удаления, либо GRANT ... TO CHECK <check_constraint_name> раздавал права на системные триггеры, созданные для ограничения CHECK.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316916
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Rdb Dev!
You wrote on 28 сентября 2016 г. 13:51:32:

Rdb Dev> необходимо поправить сервер такЖили-были мыши. Все их обижали. Однажды пришли мыши к сове:
-Мудрая сова, помоги! Все нас едят. Скоро нас не останется. Что делать ?
Подумала сова и говорит:
-Мыши! Станьте ежами! Будете колючими и для охотников недоступны.
Побежали мыши радостно:
-Станем ежами! Станем ежами!
Вдруг одна остановилась:
-А кто-нибудь знает: как стать ежами?
Никто. Побежали обратно к сове.
-Сова! А как нам стать ежами???
-Мыши! Идите на уйх с такими вопросами! Я не тактик, я - СТРАТЕГ!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316924
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, иди куда шел! :)
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316926
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

в 2.5.x ничего с правами править не будут, да и в 3.0 тоже. А вот в 4.0 скорее всего будет такая плюшка как SQL SECURITY {DEFINER | INVOKER} (у таблиц, триггеров, процедур, функций и пакетов). Для таблиц оно введено потому что есть вычисляемые поля. Триггеры, если в них не указано иное наследуют этот параметр от таблицы. Т.е. тут твои CHECK вполне бы работали без задания каких либо дополнительных прав.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39316933
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИспользовать другие таблицы в ограничении CHECK очень сильно не рекомендуется.
Нашел кого учить... У него пинг в udf это норма.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317007
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, чем плоха реализация ping в UDF? Если бы не лень, я и управление брандмауэром сделал через UDF, чтобы хранить правила в таблицах и прогружать их в NDIS драйвер через UDF. Не вижу реальных проблем в снижения производительности сервера БД при реализации подобных задач.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317011
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, судя по дате последнего снапшота, для 2.5 вообще больше ничего делать не будут ни с чем.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317016
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНо, ИМХО, необходимо поправитьКонкрентно - в чём проблема ?
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317028
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, 19717954
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317036
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

где проблема ? Подыми мне веки (ц)
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317065
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, проблема в том, что в скрипте, описывающем таблицу с ограничением CHECK, я не могу раздать через GRANT ... TO TRIGGER <check_constraint_name> права на таблицы, используемые в ограничении CHECK, так как имена системных триггеров на BEFORE INSERT и BEFORE UPDATE для этого ограничения неизвестны до тех пор, пока таблица не будет создана.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317076
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

потому что использование в CHECK других таблиц идиотизм. CHECK они только для простых проверок на уровне записи таблицы. Для всего остального пиши полноценные триггеры.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317081
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devhvlad, проблема в том, что в скрипте, описывающем таблицу с ограничением CHECK, я не могу раздать через GRANT ... TO TRIGGER <check_constraint_name> права на таблицы, используемые в ограничении CHECKА надо ?
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317108
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, ну, хотелось бы... 19718077
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317113
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

во первых у тебя там фигня написана

rdb_devНо, ИМХО, необходимо поправить сервер так, чтобы либо создавался только один триггер с именем ограничения CHECK сразу для вставки и удаления

может обновления? По идее сделать можно, вот только зачем? Для красоты?

rdb_devлибо GRANT ... TO CHECK <check_constraint_name> раздавал права на системные триггеры

этого точно не надо.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317122
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devhvlad, ну, хотелось бы... 19718077 Зачем ? У тебя что-то не работает без этих грантов ?
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317125
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисво первых у тебя там фигня написана
rdb_devНо, ИМХО, необходимо поправить сервер так, чтобы либо создавался только один триггер с именем ограничения CHECK сразу для вставки и удаления может обновления?Ты правильно понял! Это опечатка.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317140
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot hvlad]rdb_devЗачем ? У тебя что-то не работает без этих грантов ?
Верно, не работает! Если пользовательской роли есть права на вставку в таблицу с ограничением CHECK, но не даны права на выборку из таблиц, используемых в этом ограничении, то, ожидаемо, сервер шлёт лесом.
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317147
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

гм, я был уверен, что системные триггеры не проверяются.
Раз так, то пиши проверки в своих триггерах, а не в CHECK'ах
...
Рейтинг: 0 / 0
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
    #39317153
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, именно такой workaround и сделал.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Кривое создание триггера для CONSTRAINT <name> CHECK (...)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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