PostgreSQL - Почему привилегированный пользователь не может получить доступ к вновь созданному разделу - PullRequest
0 голосов
/ 05 марта 2020

Почему привилегированный пользователь не может получить доступ к вновь созданному разделу?

PostgreSQL версия: 10.0

Предположим, у моего сервера PostgreSQL есть пользователь по имени app со следующими разрешениями:

GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO app;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public to app;

Теперь этот пользователь app может выбирать, вставлять и обновлять действие для "существующей" таблицы / раздела (например, mytable_partition_old), как я и ожидал, пока все идет хорошо.

Однако учетная запись master создает новый раздел таблицы после указанной выше команды GRANT:

CREATE TABLE IF NOT EXISTS "mytable_partition_new" PARTITION OF mytable FOR VALUES IN('some_value');

После создания mytable_partition_new пользователь app получил «разрешение отклонено для этого отношения», выполнив команду INSERT INTO mytable_partition_new values (...).

Я понимаю, что это может быть решено с помощью проблемы GRANT SELECT, .... TO app снова. Мой вопрос: есть ли лучший способ добиться этого?

(у нас нет выделенного администратора баз данных, и мы на некоторое время застряли в этой ситуации ..)

1 Ответ

1 голос
/ 05 марта 2020

GRANT, которые вы показали, предоставляют привилегии только для существующих объектов. Чтобы предоставить привилегии «будущим» объектам, вам необходимо изменить стандартные привилегии :

alter default privileges in schema public
  for role master
  GRANT SELECT, INSERT, UPDATE ON TABLES TO app;

alter default privileges in schema public
  for role master
  GRANT USAGE ON SEQUENCES TO app;

. Вышеуказанное повлияет только на будущих объектов, поэтому для Таблицы (или разделы), которые вы уже создали, вам нужно еще раз выполнить исходные операторы GRANT.

...