Пользователь с привилегией CREATE ROLE может:
- создавать новых пользователей (
CREATE USER); - создавать роли (
CREATE ROLE); - управлять членством в ролях (
GRANT ... TO ...).
Создание пользователя
Пользователь — это роль, которой разрешено авторизовываться в базе. Такая роль может подключаться к базе с логином и паролем.
Создать пользователя с паролем можно при помощи запроса:
CREATE USER someuser WITH PASSWORD 'password';
Где someuser — логин пользователя, password — пароль.
Новый пользователь отобразится в панели управления DBaaS через некоторое время после создания.

Создание роли и назначение ее пользователю
Вместо того чтобы напрямую раздавать права каждому пользователю, лучше создавать роли с нужными правами, а потом назначать пользователей в эти роли.
Создадим две роли: одна с правами только на чтение, вторая — с правами на чтение и запись.
Роль с правами только на чтение:
CREATE ROLE app_reader;
Роль с правами на чтение и запись:
CREATE ROLE app_writer;
Назначим роль пользователю:
GRANT app_writer TO someuser;
Настройка схемы
По умолчанию все таблицы в PostgreSQL создаются в схеме public. Для выдачи грантов необходимо создать новую схему:
CREATE SCHEMA app_data;
Создадим таблицы и явно укажем новую схему:
CREATE TABLE app_data.users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE app_data.orders (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES app_data.users(id),
order_date TIMESTAMP DEFAULT now()
);
Теперь можем выдать права на схему для ранее созданных ролей:
GRANT USAGE ON SCHEMA app_data TO app_reader;
GRANT USAGE ON SCHEMA app_data TO app_writer;
И право на создание объектов в схеме:
GRANT CREATE ON SCHEMA app_data TO app_writer;
Установка прав на таблицы
Выдадим права на чтение всех существующих таблиц в схеме:
GRANT SELECT ON ALL TABLES IN SCHEMA app_data TO app_reader;
И права на запись:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app_data TO app_writer;
Настроим права для новых таблиц, которые будут устанавливаться по умолчанию:
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data
GRANT SELECT ON TABLES TO app_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;
И права по умолчанию для новых последовательностей:
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data
GRANT USAGE, SELECT ON SEQUENCES TO app_writer;