Права в триггерах

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
AndreyTarasov
Сообщения: 7
Зарегистрирован: 12 окт 2009, 09:20

Права в триггерах

Сообщение AndreyTarasov » 21 май 2011, 06:44

Добрый день

Столкнулся с следующей проблемой

Есть робот, который выполняет действия, которые планируются пользователем (в частности отправка уведомлений по email)
Робот подключается с ограниченными правами и соответственно имеет права только там где делает отметки
После установки отметки производится изменение одного поля в 2х таблицах, в зависимости от условий.

При отработке оказалось что роботу потребовались права на другие таблицы, которые присутствуют в триггерах.
Даже если я в начале триггеров обновления ставлю "exit" - это ничего не решает, как будто триггеры срабатывают полностью и обрабатывают прочие таблицы

Роботу требуется всего-то изменить 2 поля, и я не хочу давать роботу права на все таблицы на которые ссылаются триггеры причем не только в этих таблицах, но и далее по ступеням

Как можно решить такую проблему?

Сервер: FireBird-2.1.3.18185

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Права в триггерах

Сообщение kdv » 21 май 2011, 11:39

права в триггерах и процедурах проверяются для ВСЕХ используемых в них объектах, ДО выполнения триггера и процедуры.
не даете права роботу, дайте права триггеру.

Код: Выделить всё

GRANT <privileges> ON [TABLE] {tablename | viewname}
TO {<object> | <userlist> | GROUP UNIX_group}
| EXECUTE ON PROCEDURE procname TO {<object> | <userlist>}
| <role_granted> TO {PUBLIC | <role_grantee_list>};
<privileges> = {ALL [PRIVILEGES] | <privilege_list>}
<privilege_list> = SELECT
| DELETE
| INSERT
| UPDATE [(col [, col …])]
| REFERENCES [(col [, col …])]
[, <privilege_list> …]
<object> = PROCEDURE procname
| TRIGGER trigname
| VIEW viewname
| PUBLIC
[, <object> …]
<userlist> = [USER] username
| rolename
| Unix_user}
[, <userlist> …]
[WITH GRANT OPTION]
<role_granted> = rolename [, rolename …]

AndreyTarasov
Сообщения: 7
Зарегистрирован: 12 окт 2009, 09:20

Re: Права в триггерах

Сообщение AndreyTarasov » 21 май 2011, 14:50

kdv писал(а):права в триггерах и процедурах проверяются для ВСЕХ используемых в них объектах, ДО выполнения триггера и процедуры.
не даете права роботу, дайте права триггеру.
я тоже думал что так надо сделать и ради эксперимента, дал все права всем триггерам, на первую таблицу на которую ругаются,
никакого эффекта..... "This user does not have privilege...."

уже не знаю что и думать...

AndreyTarasov
Сообщения: 7
Зарегистрирован: 12 окт 2009, 09:20

Re: Права в триггерах

Сообщение AndreyTarasov » 24 май 2011, 09:13

Вроде решил проблему, но мне кажется косячно..

Оказалось что если триггер использует таблицу только для обновления, то ему зачем-то требуются права на select...
добавил всем обновляющим триггерам права на select и все заработало

странно...

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: Права в триггерах

Сообщение dimitr » 24 май 2011, 20:42


AndreyTarasov
Сообщения: 7
Зарегистрирован: 12 окт 2009, 09:20

Re: Права в триггерах

Сообщение AndreyTarasov » 25 май 2011, 07:01

dimitr писал(а):баян, однако: http://tracker.firebirdsql.org/browse/CORE-136
О как... спасибо :)

Ответить