---
title: 'Управление пользователями PostgreSQL'
sidebar_label: 'Управление пользователями'
sidebar_position: 8
description: 'Как создать пользователя, изменить его пароль, настроить доступ к базе данных PostgreSQL и работать с привилегиями'
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import MoreVerticalIcon from '@selectel/docux/icons/more-vertical'

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

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

Чтобы создать базу данных в кластере, нужно сначала [создать пользователя](/managed-databases/postgresql/manage-users.mdx).

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

К одной базе данных PostgreSQL можно выдать доступ нескольким пользователям, но [владелец базы данных](#database-owner) может быть только один. На объекты базы данных пользователям можно [выдавать привилегии](#grant-privileges).

## Владелец базы данных \{#database-owner}

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

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

## Создать пользователя \{#create-user}

1. В [панели управления](https://my.selectel.ru/vpc/default/dbaas/) в верхнем меню нажмите **Продукты** и выберите **Облачные базы данных**.
2. Откройте вкладку **Активные**.
3. Откройте страницу кластера → вкладка **Пользователи**.
4. Нажмите **Создать пользователя**.
5. Введите имя и пароль. Сохраните пароль — в панели управления он храниться не будет.
6. Нажмите **Сохранить**.

## Изменить пароль пользователя \{#change-user-password}

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

1. В [панели управления](https://my.selectel.ru/vpc/default/dbaas/) в верхнем меню нажмите **Продукты** и выберите **Облачные базы данных**.
2. Откройте вкладку **Активные**.
3. Откройте страницу кластера → вкладка **Пользователи**.
4. В меню <MoreVerticalIcon /> пользователя выберите **Изменить пароль**.
5. Введите или сгенерируйте новый пароль и сохраните изменения.

## Настроить доступ к базе данных \{#configure-access-to-database}

### Выдать доступ пользователю \{#grant-user-access}

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

1. В [панели управления](https://my.selectel.ru/vpc/default/dbaas/) в верхнем меню нажмите **Продукты** и выберите **Облачные базы данных**.
2. Откройте вкладку **Активные**.
3. Откройте страницу кластера баз данных → вкладка **Базы данных** → страница базы данных.
4. В блоке **Имеют доступ** нажмите **Добавить** и выберите пользователя.

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

### Изменить владельца базы данных \{#change-database-owner}

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

1. В [панели управления](https://my.selectel.ru/vpc/default/dbaas/) в верхнем меню нажмите **Продукты** и выберите **Облачные базы данных**.
2. Откройте вкладку **Активные**.
3. Откройте страницу кластера баз данных → вкладка **Базы данных** → страница базы данных.
4. В списке **Владелец базы** выберите другого владельца.

### Удалить доступ для пользователя \{#revoke-access-for-user}

1. В [панели управления](https://my.selectel.ru/vpc/default/dbaas/) в верхнем меню нажмите **Продукты** и выберите **Облачные базы данных**.
2. Откройте вкладку **Активные**.
3. Откройте страницу кластера баз данных → вкладка **Базы данных** → страница базы данных.
4. В блоке **Имеют доступ** удалите пользователя.

## Настроить привилегии пользователя \{#configure-user-privileges}

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

В базах данных версии PostgreSQL 14 и ниже, пользователям по умолчанию предоставляется привилегия `CREATE` на схему `public`. В PostgreSQL 15 предоставляется только привилегия `CONNECT`, варианты действий описаны в разделе [Usage Patterns](https://www.postgresql.org/docs/15/ddl-schemas.html#DDL-SCHEMAS-PATTERNS) документации PostgreSQL.

### Выдать привилегии \{#grant-privileges}

Выдать пользователям привилегии на объекты базы данных можно с помощью команды [GRANT](https://www.postgresql.org/docs/current/sql-grant.html). Привилегии могут быть следующими: `SELECT`, `INSERT`, `DELETE`, `USAGE`.

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

```bash
GRANT SELECT ON table TO user;
```

### Создать пользователя схемы с правами только на чтение \{#create-read-only-user}

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

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

1. [Создайте пользователя](#create-user).

2. [Подключитесь к базе данных](/managed-databases/postgresql/connect-to-cluster.mdx).

3. Создайте схему `schema` и таблицу `table`:

   ```bash
   CREATE SCHEMA schema;
   CREATE TABLE schema.table(i int);
   INSERT INTO schema.table(i) values(1);
   ```

4. Выдайте привилегии пользователю `user`:

   ```bash
   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-privileges}

Отозвать у пользователя привилегии можно с помощью команды [REVOKE](https://www.postgresql.org/docs/current/sql-revoke.html).

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

```bash
REVOKE USAGE ON SCHEMA schema FROM user;
```

<Formbricks />
