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

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

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

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

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

Владелец базы данных

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

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

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

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

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

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

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

Настроить доступ к базе данных

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

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

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

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

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

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

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

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

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

Настроить привилегии пользователя

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

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

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

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

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

GRANT SELECT ON table TO user;

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

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

Автоматически все новые таблицы будут создаваться с доступом только на чтение (read-only) для этого пользователя.

  1. Создайте пользователя.
  2. Подключитесь к базе данных.
  3. Создайте схему schema и таблицу table:

    CREATE SCHEMA schema;
    CREATE TABLE schema.table(i int);
    INSERT INTO schema.table(i) values(1);
  4. Выдайте привилегии пользователю user:

    GRANT USAGE ON SCHEMA schema TO user;
    GRANT SELECT ON ALL TABLES IN SCHEMA schema TO user;
    ALTER DEFAULT PRIVILEGES IN SCHEMA schema GRANT SELECT ON TABLES TO user;

Отозвать привилегии

Отозвать у пользователя привилегии можно с помощью команды REVOKE.

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

REVOKE USAGE ON SCHEMA schema FROM user;