Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
2-1203008491
Квэнди
2008-02-14 20:01
2008.03.16
3DES в Delphi


15-1202215404
Reindeer Moss Eater
2008-02-05 15:43
2008.03.16
Миллион лицензий


15-1202184216
Dmitry S
2008-02-05 07:03
2008.03.16
проигрывание midi


8-1177253281
Elliner
2007-04-22 18:48
2008.03.16
Передача потокового видео с канвы формы


6-1182162320
vishnia
2007-06-18 14:25
2008.03.16
Загрузка файла с компа пользователя на сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский