Postgresql: Как предоставить владельцу базы данных права доступа к общедоступной схеме?

#postgresql #permissions

Вопрос:

У меня есть роль, которой нужна возможность создавать новые базы данных (для нескольких тестовых сценариев). Эта роль должна иметь свои разрешения только в самостоятельно созданных базах данных, поэтому я не хочу устанавливать необходимые разрешения в базе данных шаблонов.
И теперь я задаюсь вопросом, почему у владельца базы данных тоже нет прав на общедоступную схему. Я подумал, что владелец имеет все права в своей собственной базе данных. И он, конечно, делает это в самостоятельно созданных схемах, но не в общедоступной схеме. Как я могу автоматически использовать эту роль и СОЗДАВАТЬ также в общедоступной схеме, не предоставляя ей права на ПРЕДОСТАВЛЕНИЕ? Я не могу удалить и воссоздать общедоступную схему, я не могу выполнить ALTER SCHEMA public OWNER TO CURRENT_USER ее без дополнительных разрешений, которые влияют также на другие базы данных. Мне нужно решение, которое автоматически работает внутри приложения, желательно без помощи суперпользователя с ГРАНТОМ. Возможно ли это?

ИЗМЕНИТЬ: Версия 13.2. Я отменил привилегии по умолчанию для общедоступных, поскольку у меня несколько баз данных в экземпляре, и я хотел, чтобы учетные записи были строго разделены, учетная запись не должна иметь разрешений на другие базы данных, кроме той, для которой она создана. Конечно, я могу сохранить разрешения по умолчанию для общедоступных и ограничить доступ только к другим базам данных (ПОДКЛЮЧИТЬСЯ), но я этого не сделал, мне это показалось немного несущественным.

После некоторых дополнительных исследований и ваших ценных комментариев здесь я думаю, что это невозможно. Поэтому я вижу два альтернативных подхода:

  1. как я уже сказал, я не отменяю разрешения по умолчанию для общедоступных, но ограничиваю или разрешаю доступ только при ПОДКЛЮЧЕНИИ к базе данных
  2. Я удаляю общедоступную схему из шаблона и воссоздаю ее заново, если в этом есть необходимость; тогда владелец базы данных будет иметь все права на нее, я предполагаю

Комментарии:

1. Какая версия PostgreSQL?

2. Пожалуйста, покажите последовательность команд, чтобы продемонстрировать это.

Ответ №1:

До версии PostgreSQL v14 у всех есть USAGE и CREATE по умолчанию в public схеме. Это может измениться в версии 15.

Однако схема принадлежит суперпользователю начальной загрузки (обычно вызывается postgres ), поэтому никому другому не разрешается предоставлять или отменять ее привилегии.