Форум: "Базы";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
Внизотключить триггер не являясь SYSDBA Найти похожие ветки
← →
Fiend © (2007-10-25 13:00) [0]Добрый день уважаемые форумчане!
Давненько не писал в форум на этом сайте, но вот проблема возникла и прошу помощи у мастеров Firebird.
Задача такая: в БД есть пользователь с логином USER_01, ему даны права на все объекты с Grant option. что еще нужно сделать чтобы этот же пользователь мог выполнить следующий запрос alter trigger "ActsOfServices_BU" inactive и выполнить его успешно.?
Сейчас же выдается сообщение This operation is not defined for system tables.
unsuccessful metadata update.
MODIFY TRIGGER failed.
no permission for control access to TABLE ActsOfServices.
Хотя например раздать права на объекты другим пользователям он может легко, так же как и отобрать права тоже удается.
А вот почему то отключить триггер неудается.
Помогите.
← →
Правильный_Вася (2007-10-25 13:56) [1]
> ему даны права на все объекты с Grant option
какие права?
← →
Fiend © (2007-10-25 14:20) [2]ну в частности на таблицы пользовательские и в том числе ActsOfServices, т.е. на ту про которую он ругается.
← →
atruhin © (2007-10-25 14:26) [3]Насколько помню методанные менять может только SYSDBA и владелец БД.
Вообще в FB менять метаданные, в процессе работы программы - большие грабли и нет никаких гарантий, что после этого база
будет работать как ты расчитываеш. Не говоря об ограничении кол-ва изменений метаданных без b/r/
← →
Fiend © (2007-10-25 14:31) [4]мысль такая:
софт проверяет кто подключен к БД, если никого кроме себя не видит, то отключает некоторые триггеры и изменяет таблицы, затем включает триггеры.
Если кто подключен, то ругается
← →
TTimer (2007-10-25 14:31) [5]А не проще в теле триггера написать:
IF (USER = "USER_01") THEN
BEGIN
EXIT;
END ?
← →
Fiend © (2007-10-25 14:41) [6]То TTimer
к сожалению не проще, дело в том что пользователей около 90 человек, и они постепенно добавляются.
← →
Sergey13 © (2007-10-25 14:47) [7]> [4] Fiend © (25.10.07 14:31)
> софт проверяет кто подключен к БД, если никого кроме себя не видит
В момент проверки не видит, а сразу после начала его деятельности в гости неожиданно приходят все 90 человек. 8-)
← →
TTimer (2007-10-25 15:05) [8]
> к сожалению не проще, дело в том что пользователей около
> 90 человек, и они постепенно добавляются.
для этого есть роли. Например так:
IF (CURRENT_ROLE = "WITHOUT_TRIGGERS") THEN
BEGIN
EXIT;
END
← →
DrPass © (2007-10-25 15:31) [9]Попробуй грантовать ему право на изменение RDB$TRIGGERS - вероятно, поможет
← →
Sergey13 © (2007-10-25 15:34) [10]> [8] TTimer (25.10.07 15:05)
> для этого есть роли
Для этого есть программы, выполняемые по расписанию ночью.
Плюс, если периодически надо выключать тригеры, то в проектировании БД наверное не все додумано до конца, и я не удилюсь, если там уже накопилось косяков выше крыши.
← →
TTimer (2007-10-25 15:38) [11]
> Плюс, если периодически надо выключать тригеры, то в проектировании
> БД наверное не все додумано до конца, и я не удилюсь, если
> там уже накопилось косяков выше крыши.
Ну почему - а репликация? Например ей не надо чтобы выполнялись некоторые триггера. Вот таким простым условием это достигается.
← →
Fiend © (2007-10-25 15:45) [12]To DrPass
пробовал, не помогает
← →
Fiend © (2007-10-25 15:48) [13]То Sergey13
Ну вот не надо только если самому не приходилось решать подобную проблему, говорить про косяки и т.п. Я не прошу решить мои косяки, я четко описал задачу
← →
Правильный_Вася (2007-10-25 15:49) [14]
>> какие права?
> Fiend © (25.10.07 14:20) [2]
> ну в частности на таблицы пользовательские
я не спрашивал, на что
я спрашивал, какие
← →
Sergey13 © (2007-10-25 16:10) [15]> [13] Fiend © (25.10.07 15:48)
> Я не прошу решить мои косяки
А я их тебе и не собираюсь решать. Флаг тебе в руки.
Я просто высказал свое мнение о твоей задаче на основании своего опыта.
← →
Fiend © (2007-10-25 17:05) [16]То Правильный_Вася
у этого пользователя есть права на Select insert update delete reference with grant option
← →
kaif © (2007-10-26 02:18) [17]у этого пользователя есть права на Select insert update delete reference with grant option
По-моему этим все сказано. Вот когда у этого юзера будут права на изменение метаданных, то он сможет вызывать команды вроде alter trigger, alter table, alter procedure и т.д. А если еще они будут даны ему с grant option, то он сможет их делегировать и далее кому захочет. Но, насколько я знаю, метаданные вправе менять только SYSDBA или OWNER, как справедливо уже отметил atruhin © (25.10.07 14:26) [3] .
Так что выход, возможно, только в том, что предлагает DrPass © (25.10.07 15:31) [9]
(Попробуй грантовать ему право на изменение RDB$TRIGGERS)
Или же нужно менять текст самих триггеров, как предлагают остальные.
← →
Fiend © (2007-10-26 17:50) [18]То kaif пробовал давать права на триггерс - эффект ноль.
Всем спасибо за советы и желание помочь. Разобрался в общем то сам как сделать. Права было достаточно дать на таблицу с дескрипторами безопасности. Еслти кому то интересно могу с понедельника выложить скрипты которые позволябт стать "владельцем" объектов "навремя" а потом возвращают все назад.
Всем спасибо.
← →
Reindeer Moss Eater © (2007-10-26 17:57) [19]То kaif пробовал давать права на триггерс - эффект ноль.
Придет же в голову такое :)
← →
atruhin © (2007-10-26 18:20) [20]
> Всем спасибо за советы и желание помочь. Разобрался в общем
> то сам как сделать. Права было достаточно дать на таблицу
> с дескрипторами безопасности.
Дело конечно хозяйское, но объясняю еще раз - НЕЛЬЗЯ так делать.
1. > софт проверяет кто подключен к БД - твой софт не будет работать на классике, т.е. любом серьезном сервере.
2. см. > [7] Sergey13 © (25.10.07 14:47)
3. FB кэширует метаданные до полного отключения всех пользователей, (не разбирался точно, но это происходит выборочно),
т.е. в одной ситуации, твое изменение может сработать, а в другой нет.
4. периодически после изменения метаданных, нарушается работа с БД,
например были ситуации когда переставал работать простой select.
5. FB позволяет сделать ТОЛЬКО 256 изменений метаданных объекта, после этого сообщает, что необходим b/r
Поэтому, одно из основных правил работы с FB, не изменять метаданные на рабочей БД, после изменения сразу сделать b/r
← →
atruhin © (2007-10-26 18:29) [21]Единственным правильным решением проблеммы, это проверка условия в тригере, либо как:
> [8] TTimer (25.10.07 15:05)
> IF (CURRENT_ROLE = "WITHOUT_TRIGGERS") THEN
> BEGIN
> EXIT;
> END
либо начиная, по моему с FB 2.0, установить контекстную переменную времени транзакции,
RDB$SET_CONTEXT("USER_TRANSACTION", NOTRIGER, 1);
в тригере
IF (RDB$GET_CONTEXT("USER_TRANSACTION", NOTRIGER) = 1) THEN ...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.03.16;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c