powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / изменение значения в тбл. только из хранимки ?
20 сообщений из 20, страница 1 из 1
изменение значения в тбл. только из хранимки ?
    #37196934
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понимаю что триггером запретить изменение
значения в таблице, а вот как при этом хранимой
процедуре разрешить измения без удаления
триггера
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37196986
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 03.04.2011 22:52, SangYong wrote:

> понимаю что триггером запретить изменение
> значения в таблице, а вот как при этом хранимой
> процедуре разрешить измения без удаления
> триггера

Запретить глупым разработчикам писать глупые триггера.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37196998
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv конечно резок,
но одновременное наличие триггеров и процедур (а может еще app server есть?) - признак слабого контроля надо разработчиками.
Каждый пишет, как умеет и считает нужным.
Отсюда и такие вопросы.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37197005
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASA9+MSAccess

прошу прощения - меня технические стороны
волнуют больше чем принципиальные, хотя
есть один принцип:вопросов глупых не бывает,
есть только глупые ответы...
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37197050
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну в MSAccess эт достигается пользовательской политикой
и выполнением запроса с оп. owner - на сервере можно
ли обойтись триггером и хранимкой ?
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37197240
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 04.04.2011 0:56, SangYong wrote:


> ну в MSAccess эт достигается пользовательской политикой
> и выполнением запроса с оп. owner

Что-то я не помню, чтобы в акцессе триггера были.

- на сервере можно
> ли обойтись триггером и хранимкой ?

Технической возможности отключить триггер нет.
Он для того и триггер, чтобы всегда отрабатывать.

(можно его только дропнуть, но для этого нужны соотв.
права, которые пользователю давать вовсе не нужно).

Вы можете нагородить огород с регистрацией своих сессий
работы с БД, и флагами там для триггеров, нужно ли ему
отрабатывать. Но это и будет ваш собственный нагороженный
огород.

На самом деле использовать процедуры и триггера одновременно
достаточно странно. Зачем использовать недо-процедуру-триггер,
если можно использовать нормальную процедуру ?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37197249
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SangYongASA9+MSAccess

прошу прощения - меня технические стороны
волнуют больше чем принципиальные, хотя
есть один принцип:вопросов глупых не бывает,
есть только глупые ответы...
Первый способ - отключить выполнение триггеров посредством SET TEMPORARY OPTION.

Второй способ - в WHEN триггера вставить проверку существования глобальной переменной VarExists('@@DenyTrigger') = 0. Тогда, когда нужно запретить выполнение триггера, будет достаточно создать такую переменную через CREATE VARIABLE и не забыть в конце операций ее удалить.

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

Насчет глупых триггеров не согласен. Триггера замечательно могут защищать целостность и непротиворечивость данных от "глупых" разработчиков интерфейсных приложений, от работы с данными других систем и еще много от чего. Это единственный гарантированный способ контроля данных вне зависимости от доступа к БД. Все остальные способы или декларируют частичный контроль при соблюдении определенных правил или же накладывают существенные ограничения на работу с данными. Другое дело, что функциональность триггеров должна быть полной, чтобы самой не накладывать ограничения. В ASA триггера имеют достаточную функциональность для гибкой и мощной реализации, поэтому считаю, что грех ей не пользоваться.

Ну а зачем ХП что то писать в таблицу в обход триггеров - вариантов туча. От загрузки уже предварительно проверенных в ХП данных, до служебных надобностей. Ничего в этом удивительного не вижу, архитектор БД имеет полное право под свою ответственность отключать где нужно триггера.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37197292
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага..понял (видна разница между "сетевым воином"
и профи)

> ну в MSAccess эт достигается пользовательской политикой
> и выполнением запроса с оп. owner
>Что-то я не помню, чтобы в акцессе триггера были.

речь не про тиггеры в MSA - просто запрос можно выполнить
WITH OWNERACCESS OPTION (грубо гря напрямую
редактировать таблицу клиент не может, но провести накладную
может)
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37197376
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04.04.2011 0:03, SangYong пишет:

> есть один принцип:вопросов глупых не бывает

Тебя обманули. Бывают.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37199623
konstantines
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SangYongага..понял (видна разница между "сетевым воином"
и профи)

> ну в MSAccess эт достигается пользовательской политикой
> и выполнением запроса с оп. owner
>Что-то я не помню, чтобы в акцессе триггера были.

речь не про тиггеры в MSA - просто запрос можно выполнить
WITH OWNERACCESS OPTION (грубо гря напрямую
редактировать таблицу клиент не может, но провести накладную
может)


А вы не обижайтесь. MasterZiv был необычно для себя резок, но, в общем, прав. И хотел донести одну простую мысль: если вы собираетесь пользоваться для записи процедурой, то никакие отключаемые тригера вам уже не нужны. Просто запретите пользователям писать в эту таблицу вообще, но разрешите вызывать процедуру. А процедура в АСА9 выполняется с правами владельца, а не пользователя.
Т.е., все можно сделать в точности как в вашем любимом MSAccess.

P.S.
Кстати, если бы вы сразу указали, что речь идет о АСА9, скорее всего, на резкость бы и не напросились.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37199641
konstantines
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUSПервый способ - отключить выполнение триггеров посредством SET TEMPORARY OPTION.

Второй способ - в WHEN триггера вставить проверку существования глобальной переменной VarExists('@@DenyTrigger') = 0. Тогда, когда нужно запретить выполнение триггера, будет достаточно создать такую переменную через CREATE VARIABLE и не забыть в конце операций ее удалить.

Насчет глупых триггеров не согласен. Триггера замечательно могут защищать целостность и непротиворечивость данных от "глупых" разработчиков интерфейсных приложений, от работы с данными других систем и еще много от чего. Это единственный гарантированный способ контроля данных вне зависимости от доступа к БД.

Не холивара ради: триггер, управляемый через глобальную переменную, ничего не гарантирует.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37200200
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstantinesНе холивара ради: триггер, управляемый через глобальную переменную, ничего не гарантирует.
Мне бы хотелось услышать факты и доводы в подтверждение мысли, что он ничего не гарантирует. У меня в проектах замечательно гарантирует ;)
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37200735
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вставлю и свои 5 копеек!

Триггер он на то и триггер, чтоб срабатывать не зависимо от вызова (процедура или запрос). Не хочешь чтоб он срабатывал не создавай его. Топикстартер хочет кнопку на приборной панели автомобиля с функцией "Отключить руль".
А MasterZiv, всего лишь хотел сказать, что если у вас требуется такая хитрая логика, значит что-то в "консерватории" (в логике) не правильно.

ASCRUS, ну чисто гипотетически представим, что запустились одновременно два триггера, один из запроса, второй из процедуры которая взвила некий флаг на который реагирует триггер. Учитывая что этот флаг глобальный, а не на уровне сессии или транзакции, то есть вероятность того, что оба триггера отработают одинокого. Хотя точно я не знаю, может и ошибаюсь.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37201322
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenНу вставлю и свои 5 копеек!
ASCRUS, ну чисто гипотетически представим, что запустились одновременно два триггера, один из запроса, второй из процедуры которая взвила некий флаг на который реагирует триггер. Учитывая что этот флаг глобальный, а не на уровне сессии или транзакции, то есть вероятность того, что оба триггера отработают одинокого. Хотя точно я не знаю, может и ошибаюсь.
Глобальные переменные в ASA сессионные. Поэтому если одна сессия создала глобальную переменную, только в ней она видна и будет и соответственно если на существование такой переменной повесить выход из триггера без выполнения действий (или же выполнения частичных действий), то для других сессий этот триггер будет работать как обычно. Сие кстати помнится описано в родной доке ASA в качестве примера борьбы с рекурсивным вызовом триггеров.

авторПросто запретите пользователям писать в эту таблицу вообще, но разрешите вызывать процедуру.
Ну вот пишем мы ХП, в которой помимо единичного изменения записи вставляем некую логику проверки этого изменения. Встает задача ... изменить группу записей, причем не все поля, а пару. Если при наличии триггера мы пишем UPDATE, в котором в SET перечисляем нужные поля и не паримся, то тут уже понеслась ... открыть курсор, организовать цикл, в цикле вызывать процедуру, получить и передать значения всех полей ... в общем вместо декларативного оператора организуем полноценный код, занимающий место, время и предполагающий ошибки.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37201543
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUS thanks
>Глобальные переменные в ASA сессионные. Поэтому если одна сессия создала глобальную переменную, только в ней она видна >будет и соответственно если на существование такой переменной повесить выход из триггера без выполнения действий (или же >выполнения частичных действий), то для других сессий этот триггер будет работать как обычно. Сие кстати помнится описано в >родной доке ASA в качестве примера борьбы с рекурсивным вызовом триггеров.

а вот на проверку этого я обязательно
время потрачу - благодарен за наводку

to kolchanov :)
насчет обид - мастер спорта по б.теннису
и кор.пояс по айкидо - как думаешь - я
сильно могу обидется :) на резкость

считаю слово "глупый" - не очень адекватно
для уровня этого форума (профи такими
категориями не пользуются)
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37207158
konstantines
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUSkonstantinesНе холивара ради: триггер, управляемый через глобальную переменную, ничего не гарантирует.
Мне бы хотелось услышать факты и доводы в подтверждение мысли, что он ничего не гарантирует. У меня в проектах замечательно гарантирует ;)

Это до времени;)

Приконнектился пользователь (не админ) к базе isql-ем, создал переменную, и запорол целостность. Вручную, пользуясь исключительно своими легальными правами. И сессионность глобальных переменных в ASA - не помеха.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37207194
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
konstantinesASCRUSпропущено...

Мне бы хотелось услышать факты и доводы в подтверждение мысли, что он ничего не гарантирует. У меня в проектах замечательно гарантирует ;)

Это до времени;)

Приконнектился пользователь (не админ) к базе isql-ем, создал переменную, и запорол целостность. Вручную, пользуясь исключительно своими легальными правами. И сессионность глобальных переменных в ASA - не помеха.
Чтобы создать переменную, пользователь должен знать о ней. Так что пример не засчитывается - триггера защищают от некорректной работы с данными, а не попыткой взлома и обхода логики сервера и БД. Тем более, эта проблема решается элементарной проверкой в триггере, что сессионная переменная создана из под пользователя с DBA правами. По моему такие проблемы решаются корректной логикой, а не ограничениями и запретами, в том числе на использование триггеров. В ASA в наличие все нужные функции и механизмы для того, чтобы писать корректную логику с минимальными усилиями и максимальной эффективностью.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37209555
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с мыслью, что использование семафоров в БД неуместно. Это на клиенте может быть. БД - суть не программа, и флагам там делать нечего.
Всю логику реализовываем в двух процедурах modify_data_with_old_trigger_statments и modify_data_without_old_trigger. Прямой доступ к таблице закрываем в принципе, раздаем права на использование этих процедур. И усе. В них же можно реализовать и контроль за их выполнением. Прямой доступ к таблице оставляем только у владельца, который в здравом уме и твердой памяти и сам никогда не будет модифицировать данные, т.к. знает архитектуру системы. Разработчикам иметь DBA доступ к таблицам совершенно не нужно.
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37210119
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) - вот если сабжект прочесть
то можно понять что я не спрашивал
использовать или не исползовать
я тихо спросил - есть ли возможность
если да то как, если не лень ответить

ну и получил нормальный ответ - не сразу
конечно...пришлось поуклоняться от резкостей
ну раз без них незя, то почему нет...:)
...
Рейтинг: 0 / 0
изменение значения в тбл. только из хранимки ?
    #37219122
konstantines
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUSkonstantines
Приконнектился пользователь (не админ) к базе isql-ем, создал переменную, и запорол целостность.

Чтобы создать переменную, пользователь должен знать о ней. Так что пример не засчитывается - триггера защищают от некорректной работы с данными, а не попыткой взлома и обхода логики сервера и БД

Т.е., нарушение целостности данных в результате попытки взлома нарушением целостности не является? Мне казалось, что задача триггера - гарантировать целостность. Но, конечно, засчитывать или нет - дело Ваше ;) Как известно, простейший способ решения проблемы - отрицать ее наличие ;)
Впрочем, если нужно больше примеров, подставьте вместо пользователя с isql-ем необработанное исключение в процедуре, создавшей переменную. Или программиста, который в обработчике исключения забыл переменную уничтожить.
ASCRUS
пропущено...

По моему такие проблемы решаются корректной логикой, а не ограничениями и запретами, в том числе на использование триггеров.

А кто, кроме Вас, говорит о запрете на использование триггеров? ;)
Для решения задачи топикстартера триггер не нужен - это да. Более того, без триггера она решается заметно проще.
А управление срабатыванием триггера через глобальную переменную - это, как раз, хороший пример некорректной логики ;)

Впрочем, "у каждого портного свой взгляд на искусство" (с) Козьма Прутков.
Я свой никому не навязываю.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / изменение значения в тбл. только из хранимки ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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