powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Отсутствуют права на INSERT внутри триггерной функции
3 сообщений из 3, страница 1 из 1
Отсутствуют права на INSERT внутри триггерной функции
    #39820736
mofoyoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с непонятной проблемой.
В триггерной функции пишу в таблицу "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
Отсутствуют права на INSERT внутри триггерной функции
    #39820755
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mofoyoda,

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


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