Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отсутствуют права на INSERT внутри триггерной функции / 3 сообщений из 3, страница 1 из 1
31.05.2019, 13:22
    #39820736
mofoyoda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсутствуют права на INSERT внутри триггерной функции
Столкнулся с непонятной проблемой.
В триггерной функции пишу в таблицу "log"
Получаю такую ошибку
Код: sql
1.
[42501] ERROR: permission denied for table log



Команду запускаю от суперюзера.
Локализовал проблему - она в команде назначения владельца таблицы. Причем, не таблицы "log", а другой.
Вот воспроизводимый код с проблемой.
Буду очень признателен за помощь.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
CREATE ROLE tbl_owners;
GRANT tbl_owners TO current_user;

CREATE TABLE parent (
    id SERIAL PRIMARY KEY
);

ALTER TABLE parent OWNER TO tbl_owners;

CREATE TABLE child (
    id SERIAL PRIMARY KEY,
    parent_id INTEGER,
    CONSTRAINT fk_parent FOREIGN KEY (parent_id) 
        REFERENCES parent(id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
);

ALTER TABLE child OWNER TO tbl_owners; --Вот тут проблема! Если убрать, то все работает. Почему?

CREATE TABLE log (
    id SERIAL PRIMARY KEY,
    message TEXT
);

CREATE OR REPLACE FUNCTION add_log() RETURNS TRIGGER LANGUAGE plpgsql AS
$$
BEGIN
  INSERT INTO log (message) VALUES (TG_RELNAME || ' logged');
  RETURN NULL;
END;
$$;

CREATE TRIGGER log_parent
  BEFORE DELETE
    ON parent
EXECUTE PROCEDURE add_log();

CREATE TRIGGER log_child
  BEFORE DELETE
    ON child
EXECUTE PROCEDURE add_log();


INSERT INTO parent (id) VALUES (1);
INSERT INTO child (parent_id) VALUES (1);

DELETE FROM parent; --Эта команда вызывает ошибку.
...
Рейтинг: 0 / 0
31.05.2019, 13:44
    #39820755
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсутствуют права на INSERT внутри триггерной функции
mofoyoda,

Проблема в том, что пользователь tbl_owners не имеет доступа к таблице log и последовательности log_id_seq.
Или выдайте доступ или сделайте tbl_owners владельцем таблицы log.
...
Рейтинг: 0 / 0
31.05.2019, 14:59
    #39820803
mofoyoda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсутствуют права на INSERT внутри триггерной функции
Спасибо большое.
Не знал, что операции по FOREIGN KEY работают от владельца таблицы, а не от текущего пользователя.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отсутствуют права на INSERT внутри триггерной функции / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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