Мой ответ похож на этот на ServerFault.com .
Быть консервативным
Если вы хотите быть более консервативным, чем предоставление «всех привилегий», вы можете попробовать что-то подобное.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
Использование public
there относится к имени схемы по умолчанию, создаваемой для каждой новой базы данных / каталога. Замените своим именем, если вы создали схему.
Доступ к схеме
Чтобы получить доступ к схеме вообще, для любого действия пользователю должны быть предоставлены права «использования». Прежде чем пользователь сможет выбирать, вставлять, обновлять или удалять, ему сначала должно быть разрешено «использование» схемы.
Вы не заметите этого требования при первом использовании Postgres. По умолчанию каждая база данных имеет первую схему с именем public
. И каждый пользователь по умолчанию автоматически получает права "использования" этой конкретной схемы. При добавлении дополнительной схемы вы должны явно предоставить права использования.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Выдержка из документа Postgres :
Для схем разрешает доступ к объектам, содержащимся в указанной схеме (при условии, что собственные требования к привилегиям объектов также соблюдены). По сути, это позволяет получателю гранта «искать» объекты в схеме. Без этого разрешения все еще можно увидеть имена объектов, например, запросив системные таблицы. Кроме того, после отзыва этого разрешения существующие серверные ВМ могут иметь операторы, которые ранее выполняли этот поиск, поэтому это не полностью безопасный способ предотвратить доступ к объектам.
Для получения дополнительной информации см. Вопрос, что именно делает GRANT USAGE ON SCHEMA? . Обратите особое внимание на ответ эксперта Postgres Крейга Рингера .
Существующие объекты против будущего
Эти команды влияют только на существующие объекты. Таблицы и тому подобное, которые вы создаете в будущем, получат привилегии по умолчанию, пока вы повторно не выполните эти строки выше. См. Другой ответ Эрвина Брандштеттера, чтобы изменить значения по умолчанию, что повлияет на будущие объекты.