Я хотел бы дать пользователю все разрешения для базы данных, не делая ее администратором. Причина, по которой я хочу сделать это, состоит в том, что в настоящий момент DEV и PROD являются разными БД в одном кластере, поэтому я не хочу, чтобы пользователь мог изменять производственные объекты, но он должен иметь возможность изменять объекты в DEV.
Я попытался:
grant ALL on database MY_DB to group MY_GROUP;
но это, похоже, не дает никакого разрешения.
Тогда я попробовал:
grant all privileges on schema MY_SCHEMA to group MY_GROUP;
и, кажется, дает мне разрешение создавать объекты, но не запрашивать \ удалять объекты в этой схеме, принадлежащие другим пользователям
Я мог бы продолжить, дав пользователю USAGE разрешение на MY_SCHEMA, но тогда он пожаловался бы на отсутствие разрешений для таблицы ...
Поэтому я предполагаю, что мой вопрос таков: есть ли простой способ предоставить все разрешения пользователю в БД?
Я работаю над PostgreSQL 8.1.23.
источник
ON DATABASE
звучит мощно, но это мало что дает. Это только начало. Он не предоставляет никаких привилегий для содержащихся объектов.В PostgreSQL 9.0+ вы бы сделали следующее:
Если вы хотите включить это и для вновь созданных отношений, то установите разрешения по умолчанию:
Однако, увидев, что вы используете 8.1, вы должны написать его самостоятельно:
Это установит привилегии для всех отношений: таблиц, представлений, индексов, последовательностей и т. Д. Если вы хотите ограничить это, отфильтруйте
pg_class.relkind
. Смотрите pg_class docs для деталей.Вы должны запускать эту функцию с правами суперпользователя и настолько регулярно, насколько этого требует ваше приложение. Можно было бы упаковать это в задание cron, которое выполняется каждый день или каждый час.
источник
Я сделал следующее, чтобы добавить роль 'eSumit' в базу данных PostgreSQL 9.4.15 и предоставить все разрешения для этой роли:
Также проверил записи pg_table через:
выберите * из pg_roles;
База данных запросов снимок:
источник