|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
понимаю что триггером запретить изменение значения в таблице, а вот как при этом хранимой процедуре разрешить измения без удаления триггера ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2011, 21:52 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
On 03.04.2011 22:52, SangYong wrote: > понимаю что триггером запретить изменение > значения в таблице, а вот как при этом хранимой > процедуре разрешить измения без удаления > триггера Запретить глупым разработчикам писать глупые триггера. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2011, 22:45 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
MasterZiv конечно резок, но одновременное наличие триггеров и процедур (а может еще app server есть?) - признак слабого контроля надо разработчиками. Каждый пишет, как умеет и считает нужным. Отсюда и такие вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2011, 22:55 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ASA9+MSAccess прошу прощения - меня технические стороны волнуют больше чем принципиальные, хотя есть один принцип:вопросов глупых не бывает, есть только глупые ответы... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2011, 23:03 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ну в MSAccess эт достигается пользовательской политикой и выполнением запроса с оп. owner - на сервере можно ли обойтись триггером и хранимкой ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2011, 23:56 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
On 04.04.2011 0:56, SangYong wrote: > ну в MSAccess эт достигается пользовательской политикой > и выполнением запроса с оп. owner Что-то я не помню, чтобы в акцессе триггера были. - на сервере можно > ли обойтись триггером и хранимкой ? Технической возможности отключить триггер нет. Он для того и триггер, чтобы всегда отрабатывать. (можно его только дропнуть, но для этого нужны соотв. права, которые пользователю давать вовсе не нужно). Вы можете нагородить огород с регистрацией своих сессий работы с БД, и флагами там для триггеров, нужно ли ему отрабатывать. Но это и будет ваш собственный нагороженный огород. На самом деле использовать процедуры и триггера одновременно достаточно странно. Зачем использовать недо-процедуру-триггер, если можно использовать нормальную процедуру ? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 09:17 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
SangYongASA9+MSAccess прошу прощения - меня технические стороны волнуют больше чем принципиальные, хотя есть один принцип:вопросов глупых не бывает, есть только глупые ответы... Первый способ - отключить выполнение триггеров посредством SET TEMPORARY OPTION. Второй способ - в WHEN триггера вставить проверку существования глобальной переменной VarExists('@@DenyTrigger') = 0. Тогда, когда нужно запретить выполнение триггера, будет достаточно создать такую переменную через CREATE VARIABLE и не забыть в конце операций ее удалить. Второй способ в отличие от первого позволяет выборочно отключать нужные триггеры, что гарантирует сохранение целостности данных. Насчет глупых триггеров не согласен. Триггера замечательно могут защищать целостность и непротиворечивость данных от "глупых" разработчиков интерфейсных приложений, от работы с данными других систем и еще много от чего. Это единственный гарантированный способ контроля данных вне зависимости от доступа к БД. Все остальные способы или декларируют частичный контроль при соблюдении определенных правил или же накладывают существенные ограничения на работу с данными. Другое дело, что функциональность триггеров должна быть полной, чтобы самой не накладывать ограничения. В ASA триггера имеют достаточную функциональность для гибкой и мощной реализации, поэтому считаю, что грех ей не пользоваться. Ну а зачем ХП что то писать в таблицу в обход триггеров - вариантов туча. От загрузки уже предварительно проверенных в ХП данных, до служебных надобностей. Ничего в этом удивительного не вижу, архитектор БД имеет полное право под свою ответственность отключать где нужно триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 09:24 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ага..понял (видна разница между "сетевым воином" и профи) > ну в MSAccess эт достигается пользовательской политикой > и выполнением запроса с оп. owner >Что-то я не помню, чтобы в акцессе триггера были. речь не про тиггеры в MSA - просто запрос можно выполнить WITH OWNERACCESS OPTION (грубо гря напрямую редактировать таблицу клиент не может, но провести накладную может) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 09:51 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
04.04.2011 0:03, SangYong пишет: > есть один принцип:вопросов глупых не бывает Тебя обманули. Бывают. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2011, 10:33 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
SangYongага..понял (видна разница между "сетевым воином" и профи) > ну в MSAccess эт достигается пользовательской политикой > и выполнением запроса с оп. owner >Что-то я не помню, чтобы в акцессе триггера были. речь не про тиггеры в MSA - просто запрос можно выполнить WITH OWNERACCESS OPTION (грубо гря напрямую редактировать таблицу клиент не может, но провести накладную может) А вы не обижайтесь. MasterZiv был необычно для себя резок, но, в общем, прав. И хотел донести одну простую мысль: если вы собираетесь пользоваться для записи процедурой, то никакие отключаемые тригера вам уже не нужны. Просто запретите пользователям писать в эту таблицу вообще, но разрешите вызывать процедуру. А процедура в АСА9 выполняется с правами владельца, а не пользователя. Т.е., все можно сделать в точности как в вашем любимом MSAccess. P.S. Кстати, если бы вы сразу указали, что речь идет о АСА9, скорее всего, на резкость бы и не напросились. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2011, 10:44 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ASCRUSПервый способ - отключить выполнение триггеров посредством SET TEMPORARY OPTION. Второй способ - в WHEN триггера вставить проверку существования глобальной переменной VarExists('@@DenyTrigger') = 0. Тогда, когда нужно запретить выполнение триггера, будет достаточно создать такую переменную через CREATE VARIABLE и не забыть в конце операций ее удалить. Насчет глупых триггеров не согласен. Триггера замечательно могут защищать целостность и непротиворечивость данных от "глупых" разработчиков интерфейсных приложений, от работы с данными других систем и еще много от чего. Это единственный гарантированный способ контроля данных вне зависимости от доступа к БД. Не холивара ради: триггер, управляемый через глобальную переменную, ничего не гарантирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2011, 10:53 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
konstantinesНе холивара ради: триггер, управляемый через глобальную переменную, ничего не гарантирует. Мне бы хотелось услышать факты и доводы в подтверждение мысли, что он ничего не гарантирует. У меня в проектах замечательно гарантирует ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2011, 13:52 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
Ну вставлю и свои 5 копеек! Триггер он на то и триггер, чтоб срабатывать не зависимо от вызова (процедура или запрос). Не хочешь чтоб он срабатывал не создавай его. Топикстартер хочет кнопку на приборной панели автомобиля с функцией "Отключить руль". А MasterZiv, всего лишь хотел сказать, что если у вас требуется такая хитрая логика, значит что-то в "консерватории" (в логике) не правильно. ASCRUS, ну чисто гипотетически представим, что запустились одновременно два триггера, один из запроса, второй из процедуры которая взвила некий флаг на который реагирует триггер. Учитывая что этот флаг глобальный, а не на уровне сессии или транзакции, то есть вероятность того, что оба триггера отработают одинокого. Хотя точно я не знаю, может и ошибаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2011, 16:41 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
cherrex_DenНу вставлю и свои 5 копеек! ASCRUS, ну чисто гипотетически представим, что запустились одновременно два триггера, один из запроса, второй из процедуры которая взвила некий флаг на который реагирует триггер. Учитывая что этот флаг глобальный, а не на уровне сессии или транзакции, то есть вероятность того, что оба триггера отработают одинокого. Хотя точно я не знаю, может и ошибаюсь. Глобальные переменные в ASA сессионные. Поэтому если одна сессия создала глобальную переменную, только в ней она видна и будет и соответственно если на существование такой переменной повесить выход из триггера без выполнения действий (или же выполнения частичных действий), то для других сессий этот триггер будет работать как обычно. Сие кстати помнится описано в родной доке ASA в качестве примера борьбы с рекурсивным вызовом триггеров. авторПросто запретите пользователям писать в эту таблицу вообще, но разрешите вызывать процедуру. Ну вот пишем мы ХП, в которой помимо единичного изменения записи вставляем некую логику проверки этого изменения. Встает задача ... изменить группу записей, причем не все поля, а пару. Если при наличии триггера мы пишем UPDATE, в котором в SET перечисляем нужные поля и не паримся, то тут уже понеслась ... открыть курсор, организовать цикл, в цикле вызывать процедуру, получить и передать значения всех полей ... в общем вместо декларативного оператора организуем полноценный код, занимающий место, время и предполагающий ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2011, 23:03 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ASCRUS thanks >Глобальные переменные в ASA сессионные. Поэтому если одна сессия создала глобальную переменную, только в ней она видна >будет и соответственно если на существование такой переменной повесить выход из триггера без выполнения действий (или же >выполнения частичных действий), то для других сессий этот триггер будет работать как обычно. Сие кстати помнится описано в >родной доке ASA в качестве примера борьбы с рекурсивным вызовом триггеров. а вот на проверку этого я обязательно время потрачу - благодарен за наводку to kolchanov :) насчет обид - мастер спорта по б.теннису и кор.пояс по айкидо - как думаешь - я сильно могу обидется :) на резкость считаю слово "глупый" - не очень адекватно для уровня этого форума (профи такими категориями не пользуются) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2011, 08:34 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ASCRUSkonstantinesНе холивара ради: триггер, управляемый через глобальную переменную, ничего не гарантирует. Мне бы хотелось услышать факты и доводы в подтверждение мысли, что он ничего не гарантирует. У меня в проектах замечательно гарантирует ;) Это до времени;) Приконнектился пользователь (не админ) к базе isql-ем, создал переменную, и запорол целостность. Вручную, пользуясь исключительно своими легальными правами. И сессионность глобальных переменных в ASA - не помеха. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 16:55 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
konstantinesASCRUSпропущено... Мне бы хотелось услышать факты и доводы в подтверждение мысли, что он ничего не гарантирует. У меня в проектах замечательно гарантирует ;) Это до времени;) Приконнектился пользователь (не админ) к базе isql-ем, создал переменную, и запорол целостность. Вручную, пользуясь исключительно своими легальными правами. И сессионность глобальных переменных в ASA - не помеха. Чтобы создать переменную, пользователь должен знать о ней. Так что пример не засчитывается - триггера защищают от некорректной работы с данными, а не попыткой взлома и обхода логики сервера и БД. Тем более, эта проблема решается элементарной проверкой в триггере, что сессионная переменная создана из под пользователя с DBA правами. По моему такие проблемы решаются корректной логикой, а не ограничениями и запретами, в том числе на использование триггеров. В ASA в наличие все нужные функции и механизмы для того, чтобы писать корректную логику с минимальными усилиями и максимальной эффективностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 17:16 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
Согласен с мыслью, что использование семафоров в БД неуместно. Это на клиенте может быть. БД - суть не программа, и флагам там делать нечего. Всю логику реализовываем в двух процедурах modify_data_with_old_trigger_statments и modify_data_without_old_trigger. Прямой доступ к таблице закрываем в принципе, раздаем права на использование этих процедур. И усе. В них же можно реализовать и контроль за их выполнением. Прямой доступ к таблице оставляем только у владельца, который в здравом уме и твердой памяти и сам никогда не будет модифицировать данные, т.к. знает архитектуру системы. Разработчикам иметь DBA доступ к таблицам совершенно не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 11:10 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
:) - вот если сабжект прочесть то можно понять что я не спрашивал использовать или не исползовать я тихо спросил - есть ли возможность если да то как, если не лень ответить ну и получил нормальный ответ - не сразу конечно...пришлось поуклоняться от резкостей ну раз без них незя, то почему нет...:) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 14:57 |
|
изменение значения в тбл. только из хранимки ?
|
|||
---|---|---|---|
#18+
ASCRUSkonstantines Приконнектился пользователь (не админ) к базе isql-ем, создал переменную, и запорол целостность. Чтобы создать переменную, пользователь должен знать о ней. Так что пример не засчитывается - триггера защищают от некорректной работы с данными, а не попыткой взлома и обхода логики сервера и БД Т.е., нарушение целостности данных в результате попытки взлома нарушением целостности не является? Мне казалось, что задача триггера - гарантировать целостность. Но, конечно, засчитывать или нет - дело Ваше ;) Как известно, простейший способ решения проблемы - отрицать ее наличие ;) Впрочем, если нужно больше примеров, подставьте вместо пользователя с isql-ем необработанное исключение в процедуре, создавшей переменную. Или программиста, который в обработчике исключения забыл переменную уничтожить. ASCRUS пропущено... По моему такие проблемы решаются корректной логикой, а не ограничениями и запретами, в том числе на использование триггеров. А кто, кроме Вас, говорит о запрете на использование триггеров? ;) Для решения задачи топикстартера триггер не нужен - это да. Более того, без триггера она решается заметно проще. А управление срабатыванием триггера через глобальную переменную - это, как раз, хороший пример некорректной логики ;) Впрочем, "у каждого портного свой взгляд на искусство" (с) Козьма Прутков. Я свой никому не навязываю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2011, 20:50 |
|
|
start [/forum/topic.php?fid=55&msg=37201543&tid=2010356]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 295ms |
total: | 448ms |
0 / 0 |