#postgresql #permissions
Вопрос:
У меня есть роль, которой нужна возможность создавать новые базы данных (для нескольких тестовых сценариев). Эта роль должна иметь свои разрешения только в самостоятельно созданных базах данных, поэтому я не хочу устанавливать необходимые разрешения в базе данных шаблонов.
И теперь я задаюсь вопросом, почему у владельца базы данных тоже нет прав на общедоступную схему. Я подумал, что владелец имеет все права в своей собственной базе данных. И он, конечно, делает это в самостоятельно созданных схемах, но не в общедоступной схеме. Как я могу автоматически использовать эту роль и СОЗДАВАТЬ также в общедоступной схеме, не предоставляя ей права на ПРЕДОСТАВЛЕНИЕ? Я не могу удалить и воссоздать общедоступную схему, я не могу выполнить ALTER SCHEMA public OWNER TO CURRENT_USER
ее без дополнительных разрешений, которые влияют также на другие базы данных. Мне нужно решение, которое автоматически работает внутри приложения, желательно без помощи суперпользователя с ГРАНТОМ. Возможно ли это?
ИЗМЕНИТЬ: Версия 13.2. Я отменил привилегии по умолчанию для общедоступных, поскольку у меня несколько баз данных в экземпляре, и я хотел, чтобы учетные записи были строго разделены, учетная запись не должна иметь разрешений на другие базы данных, кроме той, для которой она создана. Конечно, я могу сохранить разрешения по умолчанию для общедоступных и ограничить доступ только к другим базам данных (ПОДКЛЮЧИТЬСЯ), но я этого не сделал, мне это показалось немного несущественным.
После некоторых дополнительных исследований и ваших ценных комментариев здесь я думаю, что это невозможно. Поэтому я вижу два альтернативных подхода:
- как я уже сказал, я не отменяю разрешения по умолчанию для общедоступных, но ограничиваю или разрешаю доступ только при ПОДКЛЮЧЕНИИ к базе данных
- Я удаляю общедоступную схему из шаблона и воссоздаю ее заново, если в этом есть необходимость; тогда владелец базы данных будет иметь все права на нее, я предполагаю
Комментарии:
1. Какая версия PostgreSQL?
2. Пожалуйста, покажите последовательность команд, чтобы продемонстрировать это.
Ответ №1:
До версии PostgreSQL v14 у всех есть USAGE
и CREATE
по умолчанию в public
схеме. Это может измениться в версии 15.
Однако схема принадлежит суперпользователю начальной загрузки (обычно вызывается postgres
), поэтому никому другому не разрешается предоставлять или отменять ее привилегии.