# Возможности пользователя Данный раздел описывает права, которые предоставляются пользователю PostgreSQL при создании сервиса **Cloud PostgreSQL**, а также перечень административных операций, доступных ему для самостоятельного выполнения. При развертывании сервиса автоматически создаётся пользователь базы данных с преднастроенными атрибутами и привилегиями. Эти права позволяют заказчику самостоятельно управлять своими базами данных, ролями и пользователями в рамках созданного экземпляра PostgreSQL. ## Общая информация о пользователе При инициализации сервиса автоматически создаётся пользователь: ```nginx client ``` Данный пользователь является основной учётной записью для административной работы в рамках предоставленного экземпляра PostgreSQL. Он предназначен для самостоятельного управления в пределах выданных привилегий: - базами данных; - ролями; - правами доступа. ## Выданные права и ограничения Пользователю `client` назначается набор атрибутов и привилегий, позволяющих выполнять административные операции в рамках своего экземпляра базы данных. #### Атрибуты роли Пользователь создаётся со следующими атрибутами: - `CREATEDB` — разрешено создание и удаление баз данных; - `CREATEROLE` — разрешено создание ролей и пользователей, а также управление их. Атрибут `SUPERUSER` пользователю не предоставляется. Соответственно, доступ к системным операциям уровня кластера и настройкам сервера отсутствует. #### Права на системную базу postgres: К стандартной базе данных `postgres` пользователю предоставлено только право подключения — `CONNECT` **Иные привилегии (создание объектов, изменение схем и т.д.) на данную базу не выдаются.** ## Мониторинг и системные представления Для выполнения базовых задач мониторинга пользователю дополнительно предоставлены: - членство в роли `pg_monitor`; - право `SELECT` на системное представление: ```sql pg_catalog.pg_stat_replication ``` Доступ к системной информации предоставляется исключительно **в режиме чтения**. Изменение системных представлений и параметров сервера недоступно. ## Изменение пароля После первого подключения к базе данных пользователь `client` обязан выполнить изменения пароля. Изменить пароля можно: - в открытом виде (с передачей нового значения пароля); - с указанием заранее сгенерированного хэша. На сервере используется алгоритм шифрования паролей: ``` scram-sha-256 ``` При использовании **SCRAM** применяется следующий формат хэша: ``` $:$: ``` | Операция | Описание | Команда SQL | |----------|----------|-------------| |Смена пароля в открытом виде | Для смены пароля в открытом виде | ```ALTER USER client WITH PASSWORD 'new_strong_password';``` | |Смена пароля с указанием хэша | Рекомендуется использовать сложный уникальный пароль, соответствующий требованиям информационной безопасности, и хранить его в защищённом хранилище | ```ALTER USER client WITH ENCRYPTED PASSWORD '$4096:...';``` | |Создание новой базы данных | Для создания базы данных | ```CREATE DATABASE app_db;``` | |Создание базы данных с указанием владельца | Пользователь, указанный как владелец, будет иметь полный контроль над базой данных, включая права на её удаление и изменение. По умолчанию владельцем создаваемой базы данных является пользователь, который её создает | ```CREATE DATABASE app_db OWNER client;``` | ## Создание пользователей и ролей Пользователь `client` имеет право создавать новые роли и пользователей для приложений, а также управлять их правами доступа. | Операция | Описание | Команда SQL | |----------|----------|-------------| |Создание роли без логина | Для входа в базу данных (например, для организации прав доступа) | ```CREATE ROLE app_role; ```| |Создание пользователя с паролем | Для создания пользователя с паролем. После выполнения этой команды новый пользователь `app_user` будет иметь возможность входа в базу данных, используя указанный пароль. | ```CREATE USER app_user WITH PASSWORD 'app_password';``` | |Назначение роли пользователю | Для назначения роли пользователю. Данная команда позволяет управлять правами пользователя в рамках определённой роли. После выполнения этой команды пользователь `app_user` станет членом роли `app_role`, и будет наследовать все права, связанные с этой ролью. | ```GRANT app_role TO app_user; ``` | ## Управление правами доступа После создания пользователей и ролей необходимо назначить им соответствующие права доступа. | Операция | Описание | Команда SQL | |----------|----------|-------------| |Передача владельца базы данных | Для передачи прав владения базой данных другому пользователю. После выполнения этой команды база данных `app_db` будет принадлежать пользователю `app_user`, и он будет иметь полный контроль над ней.| ```ALTER DATABASE app_db OWNER TO app_user;``` | |Выдача прав на подключение к базе данных | Для предоставления прав к подключению к базе данных. После выполнения этой команды пользователь может `app_user` подключаться к базе данных `app_db`. | ```GRANT CONNECT ON DATABASE app_db TO app_user;```| |Предоставление прав на схему public | Для предоставления прав на использование схемы `public`. После выполнения этой команды пользователь `app_user` может использовать объекты в схеме `public`, а также создавать новые объекты внутри неё. | ```GRANT USAGE, CREATE ON SCHEMA public TO app_user;```| |Предоставление прав на существующие таблицы | Для предоставления доступа пользователю к существующим таблицам в схеме `public`. После выполнения этой команды пользователь `app_user` может выполнять операции чтения, вставки, обновления и удаления данных в существующих таблицах схемы `public`.| ```GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;``` | |Предоставление прав на будущие таблицы | Если необходимо автоматически предоставить пользователю права на новые таблицы, создаваемые в схеме `public`. После выполнения этой команды все будущие таблицы, создаваемые в схеме `public`, будут автоматически иметь права для пользователя `app_user` на чтение, вставку, обновление и удаление данных. | ```ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;```| ## Мониторинг репликации Пользователь `client` имеет доступ к системным представлениям для мониторинга состояния репликации в кластере PostgreSQL. | Операция | Описание | Команда SQL | |----------|----------|-------------| |Просмотр состояния репликации | Для просмотра текущего статуса репликации. Этот запрос возвращает информацию о всех репликах, подключённых к основному (primary) серверу. |```SELECT * FROM pg_stat_replication;```| ::: warning Ограничения доступа реплкации Пользователь `client` имеет доступ к данным в представлении `pg_stat_replication` только в режиме **read-only**. Это означает, что он может просматривать состояние репликации, но не может изменять или вмешиваться в процесс репликации. :::