|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
И снова здравствуйте! Пользую FirebirdSQL Server v2.5.7. При описании таблиц, обычно задаю ограничение на столбец не непосредственно в описании столбца, а через CONSTRAINT с указанием имени, как по привычке, так и для того, чтобы раздать триггеру по CHECK права на используемые им таблицы. Мало того, что триггер создается в двух экземплярах (по одному для INSERT и UPDATE) с именами CHECK_<номер>, так еще и GRANT ... TO TRIGGER <check_constraint_name> не учитывает эту особенность и не раздает права на эти триггеры CHECK_<номер>. Можно ли как-то поправить эту кривизну в следующих снапшотах, например, созданием одного триггера BEFORE INSERT OR UPDATE с заданным именем ограничения CHECK? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 11:58 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
букав много. примера нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 12:01 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Использовать другие таблицы в ограничении CHECK очень сильно не рекомендуется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 12:04 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, +1 rdb_dev, CHECK_ это системные триггеры на них права не раздаются в принципе. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 12:10 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я понимаю, что использовать выборку из таблиц внутри CHECK - моветон, так как получаемые в выборке строки таблиц не блокируются на изменение в момент работы CHECK (хотя должны бы), но это другая история. Предположим, что в некой таблице хранятся границы диапазона, в который должно попадать добавляемое/изменяемое значение. Очевидно, что никакое ограничение по FK здесь не прокатит и надо либо делать ограничение CHECK с выборкой из таблицы диапазонов с допущением, что диапазон не сокращается так, что значения выходят за его пределы (явно запрещено проверкой в триггере для таблицы, хранящей диапазоны), либо писать триггер с похожей проверкой, но использовать FOR UPDATE WITH LOCK на запись в таблице диапазонов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 13:31 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Симонов Денис, знаю, что системные и знаю, что не могу делать так, как делает сервер: Код: plsql 1. 2. 3. 4. 5. 6.
Но, ИМХО, необходимо поправить сервер так, чтобы либо создавался только один триггер с именем ограничения CHECK сразу для вставки и удаления, либо GRANT ... TO CHECK <check_constraint_name> раздавал права на системные триггеры, созданные для ограничения CHECK. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 13:47 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Hello, Rdb Dev! You wrote on 28 сентября 2016 г. 13:51:32: Rdb Dev> необходимо поправить сервер такЖили-были мыши. Все их обижали. Однажды пришли мыши к сове: -Мудрая сова, помоги! Все нас едят. Скоро нас не останется. Что делать ? Подумала сова и говорит: -Мыши! Станьте ежами! Будете колючими и для охотников недоступны. Побежали мыши радостно: -Станем ежами! Станем ежами! Вдруг одна остановилась: -А кто-нибудь знает: как стать ежами? Никто. Побежали обратно к сове. -Сова! А как нам стать ежами??? -Мыши! Идите на уйх с такими вопросами! Я не тактик, я - СТРАТЕГ! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 13:54 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Мимопроходящий, иди куда шел! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 14:01 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_dev, в 2.5.x ничего с правами править не будут, да и в 3.0 тоже. А вот в 4.0 скорее всего будет такая плюшка как SQL SECURITY {DEFINER | INVOKER} (у таблиц, триггеров, процедур, функций и пакетов). Для таблиц оно введено потому что есть вычисляемые поля. Триггеры, если в них не указано иное наследуют этот параметр от таблицы. Т.е. тут твои CHECK вполне бы работали без задания каких либо дополнительных прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 14:03 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovИспользовать другие таблицы в ограничении CHECK очень сильно не рекомендуется. Нашел кого учить... У него пинг в udf это норма. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 14:10 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
wadman, чем плоха реализация ping в UDF? Если бы не лень, я и управление брандмауэром сделал через UDF, чтобы хранить правила в таблицах и прогружать их в NDIS драйвер через UDF. Не вижу реальных проблем в снижения производительности сервера БД при реализации подобных задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:13 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Симонов Денис, судя по дате последнего снапшота, для 2.5 вообще больше ничего делать не будут ни с чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:15 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_devНо, ИМХО, необходимо поправитьКонкрентно - в чём проблема ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:19 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
hvlad, 19717954 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:23 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_dev, где проблема ? Подыми мне веки (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:27 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
hvlad, проблема в том, что в скрипте, описывающем таблицу с ограничением CHECK, я не могу раздать через GRANT ... TO TRIGGER <check_constraint_name> права на таблицы, используемые в ограничении CHECK, так как имена системных триггеров на BEFORE INSERT и BEFORE UPDATE для этого ограничения неизвестны до тех пор, пока таблица не будет создана. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:46 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_dev, потому что использование в CHECK других таблиц идиотизм. CHECK они только для простых проверок на уровне записи таблицы. Для всего остального пиши полноценные триггеры. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:53 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_devhvlad, проблема в том, что в скрипте, описывающем таблицу с ограничением CHECK, я не могу раздать через GRANT ... TO TRIGGER <check_constraint_name> права на таблицы, используемые в ограничении CHECKА надо ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 15:56 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
hvlad, ну, хотелось бы... 19718077 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 16:23 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_dev, во первых у тебя там фигня написана rdb_devНо, ИМХО, необходимо поправить сервер так, чтобы либо создавался только один триггер с именем ограничения CHECK сразу для вставки и удаления может обновления? По идее сделать можно, вот только зачем? Для красоты? rdb_devлибо GRANT ... TO CHECK <check_constraint_name> раздавал права на системные триггеры этого точно не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 16:27 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_devhvlad, ну, хотелось бы... 19718077 Зачем ? У тебя что-то не работает без этих грантов ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 16:33 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
Симонов Денисво первых у тебя там фигня написана rdb_devНо, ИМХО, необходимо поправить сервер так, чтобы либо создавался только один триггер с именем ограничения CHECK сразу для вставки и удаления может обновления?Ты правильно понял! Это опечатка. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 16:36 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
[quot hvlad]rdb_devЗачем ? У тебя что-то не работает без этих грантов ? Верно, не работает! Если пользовательской роли есть права на вставку в таблицу с ограничением CHECK, но не даны права на выборку из таблиц, используемых в этом ограничении, то, ожидаемо, сервер шлёт лесом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 16:40 |
|
Кривое создание триггера для CONSTRAINT <name> CHECK (...)
|
|||
---|---|---|---|
#18+
rdb_dev, гм, я был уверен, что системные триггеры не проверяются. Раз так, то пиши проверки в своих триггерах, а не в CHECK'ах ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2016, 16:44 |
|
|
start [/forum/topic.php?fid=40&msg=39317153&tid=1561956]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 406ms |
0 / 0 |