Управление пользователями PostgreSQL

Для доступа к базам данных в кластере создаются пользователи.

После создания кластера нужно сначала создать пользователя, а затем создать базу данных. При создании базы данных нужно выбрать пользователя-владельца.

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

К одной базе данных можно выдать доступ нескольким пользователям, но владелец базы данных может быть только один.

Пользователям для работы доступен только сам кластер — доступа к нодам кластера нет, так как они находятся на стороне Selectel. По умолчанию у всех пользователей в кластере одинаковые права.

Создание пользователя

Чтобы создать пользователя, в панели управления:

  1. Перейдите в раздел Облачная платформа ⟶ Базы данных.
  2. Перейдите на страницу нужного кластера баз данных и откройте вкладку Пользователи.
  3. Нажмите кнопку Создать пользователя.
  4. Введите имя и задайте пароль. Обратите внимание! Сохраните пароль, так как в панели управления он храниться не будет.
  5. Нажмите Сохранить.

После создания баз данных и пользователей можно выдать пользователям доступ к определенным базам данных.

Доступ к базам данных

Выдача доступа пользователю

К базе данных можно выдать доступы нескольким пользователям.

Чтобы выдать доступ, в панели управления:

  1. Перейдите в раздел Облачная платформа ⟶ Базы данных.
  2. Перейдите на страницу нужного кластера баз данных и откройте вкладку Базы данных.
  3. Откройте страницу базы данных, в блоке Имеют доступ нажмите кнопку Добавить.
  4. В списке выберите пользователя и подтвердите изменения.

После создания пользователь может только подключиться к базе данных (CONNECT) и не может выполнять никакие операции с объектами БД. Чтобы дать пользователю доступ к объектам, выдайте ему нужные привилегии.

Изменение владельца базы данных

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

Чтобы изменить владельца, в панели управления:

  1. Перейдите в раздел Облачная платформа ⟶ Базы данных.
  2. Перейдите на страницу нужного кластера баз данных и откройте вкладку Базы данных.
  3. Откройте страницу базы данных, в списке Владелец базы выберите другого владельца и подтвердите изменения.

Удаление доступа для пользователя

Чтобы удалить доступ к базе данных, в панели управления:

  1. Перейдите в раздел Облачная платформа ⟶ Базы данных.
  2. Перейдите на страницу нужного кластера баз данных и откройте вкладку Базы данных.
  3. Откройте страницу базы данных, в блоке Имеют доступ удалите нужного пользователя и подтвердите изменения.

Выдача и отзыв привилегий у пользователя

По умолчанию у пользователей нет доступа к операциям над любыми объектами баз данных (схемам, таблицам, функциям и т.д.), владельцами которой они не являются. Для этого пользователям нужно выдать привилегию (право доступа) на объект.

По умолчанию владельцы объекта имеют доступ и все права на объект.

Выдача привилегий пользователю

Выдача привилегий происходит с помощью команды GRANT, которая назначает права (привилегии) пользователям на объекты баз данных. Привилегии могут быть следующие: SELECT, INSERT, DELETE, USAGE и т.д.

Пример выдачи доступа на чтение (SELECT) к таблице table пользователю user:

GRANT SELECT ON table TO user;

Подробное описание синтаксиса команды в документации PostgreSQL.

Пример создания пользователя схемы с правами только на чтение

Создадим пользователя с привилегиями: доступ к базе данных кластера, к таблице в схеме по умолчанию и ко всем таблицам схемы. Автоматически все новые таблицы будут создаваться с доступом только на чтение для этого пользователя.

Для создания пользователя схемы с правами только на чтение (read-only) создайте пользователя и подключитесь к базе данных.

Затем создайте схему и таблицу:

CREATE SCHEMA myschema;
CREATE TABLE myschema.mytable(i int);
INSERT INTO myschema.mytable(i) values(1);

Выдайте привилегии:

GRANT USAGE ON SCHEMA myschema TO myuser;
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO myuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO myuser;

Отзыв привилегий у пользователя

Для отзыва привилегий используется команда REVOKE, подробное описание синтаксиса команды в документации PostgreSQL.

Пример отзыва привилегии у пользователя user на схему schema:

REVOKE USAGE ON SCHEMA schema FROM user;