удалена дублирующая директория
This commit is contained in:
@@ -1,87 +0,0 @@
|
|||||||
# Cloud PostgreSQL
|
|
||||||
|
|
||||||
## Назначение сервиса
|
|
||||||
|
|
||||||
**Cloud PostgreSQL** - это управляемый облачный сервис реляционной базы данных PostgreSQL. Он позволяет развернуть и использовать отказоустойчивый кластер базы данных без необходимости самостоятельно настраивать серверы, репликацию и механизмы отказоустойчивости.
|
|
||||||
|
|
||||||
PostgreSQL - это современная система управления базами данных, которая поддерживает стандарт SQL и используется для хранения и обработки данных приложений.
|
|
||||||
|
|
||||||
В **Cloud PostgreSQL** все основные операции по управлению кластером выполняются автоматически.
|
|
||||||
|
|
||||||
Сервис самостоятельно:
|
|
||||||
- управляет ролями серверов базы данных (основной сервер и реплики);
|
|
||||||
- отслеживает состояние узлов;
|
|
||||||
- автоматически переключает основной сервер при сбоях.
|
|
||||||
|
|
||||||
Для обеспечения стабильной работы сервиса используется несколько инфраструктурных компонентов:
|
|
||||||
- **Patroni** - управляет кластером PostgreSQL и автоматическим переключением при отказах;
|
|
||||||
- **etcd** - хранит состояние кластера и обеспечивает согласованность работы узлов;
|
|
||||||
- **HAProxy** - обеспечивает единую точку подключения и распределяет клиентские подключения между узлами.
|
|
||||||
|
|
||||||
Подключение к базе данных выполняется через прокси-узлы сервиса. Пользователю не требуется подключаться к отдельным серверам кластера — все операции производятся через единую точку доступа.
|
|
||||||
|
|
||||||
Для управления базами данных и пользователями доступен web-интерфейс **pgAdmin**, позволяющий выполнять администрирование непосредственно через браузер.
|
|
||||||
|
|
||||||
## Конфигурации кластера
|
|
||||||
|
|
||||||
Сервис Cloud PostgreSQL поддерживает версии СУБД с 13 по 17 включительно.
|
|
||||||
|
|
||||||
Кластер предоставляется в архитектуре Primary–Standby, которая обеспечивает:
|
|
||||||
|
|
||||||
- синхронную репликацию данных;
|
|
||||||
- повышенную отказоустойчивость.
|
|
||||||
|
|
||||||
В рамках данной конфигурации создаётся кластер из виртуальных серверов, включающий:
|
|
||||||
|
|
||||||
- **Primary** (основной сервер) — обязательный узел, на котором выполняются операции записи данных;
|
|
||||||
- **Replica** (реплики) — дополнительные узлы (от 0 до 4), создаваемые по желанию пользователя.
|
|
||||||
|
|
||||||
Реплики являются полноценными участниками кластера PostgreSQL и могут использоваться для выполнения запросов, не изменяющих данные (например, SELECT).
|
|
||||||
|
|
||||||
В многоузловой конфигурации серверы кластера размещаются на разных физических хостах гипервизора, что повышает устойчивость сервиса к отказам оборудования.
|
|
||||||
|
|
||||||
## Режимы репликации
|
|
||||||
|
|
||||||
По умолчанию фиксация изменений выполняется в **синхронном режиме**. Это означает, что операция записи считается завершённой только после того, как данные будут зафиксированы как на основном сервере, так и на одной из реплик.
|
|
||||||
|
|
||||||
Если в кластере настроено несколько реплик, синхронный режим применяется только к одной из них. Остальные реплики работают в асинхронном режиме — изменения передаются на них без ожидания подтверждения.
|
|
||||||
|
|
||||||
При необходимости режим репликации может быть изменён на полностью **асинхронный**. В этом случае изменения сначала фиксируются на основном сервере, а затем передаются на реплики с задержкой.
|
|
||||||
|
|
||||||
## Доступ к серверам и оптимизация соединений
|
|
||||||
|
|
||||||
Прямой доступ к серверам кластера (например, по протоколу SSH) не предоставляется. Пользователь взаимодействует с базой данных исключительно через точки подключения, предоставленные сервисом.
|
|
||||||
|
|
||||||
На каждом узле кластера установлен пулер соединений **PgBouncer**, который может использоваться для ускорения работы приложений за счёт оптимизации подключений к базе данных.
|
|
||||||
|
|
||||||
::: warning Примечание
|
|
||||||
|
|
||||||
Использование PgBouncer не является обязательным - подключение возможно как напрямую к PostgreSQL, так и через пулер, а также одновременно обоими способами.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Возможности сервиса
|
|
||||||
|
|
||||||
**Cloud PostgreSQL** предоставляет набор возможностей, позволяющих использовать PostgreSQL в облаке без необходимости самостоятельного администрирования инфраструктуры.
|
|
||||||
|
|
||||||
Сервис обеспечивает:
|
|
||||||
|
|
||||||
- автоматическое управление кластером PostgreSQL;
|
|
||||||
- высокую доступность за счёт репликации и автоматического переключения primary-узла;
|
|
||||||
- единую точку подключения к базе данных через прокси;
|
|
||||||
- автоматическое переключение при отказе узлов кластера без вмешательства пользователя;
|
|
||||||
- web-доступ к управлению базами данных и пользователями через pgAdmin;
|
|
||||||
- совместимость со стандартными клиентскими инструментами PostgreSQL;
|
|
||||||
- возможность установки расширений PostgreSQL в базу данных.
|
|
||||||
|
|
||||||
## Сценарии использования сервиса
|
|
||||||
|
|
||||||
**Cloud PostgreSQL** подходит для использования в системах, где требуется надёжное хранение данных и упрощённое управление инфраструктурой базы данных.
|
|
||||||
|
|
||||||
Сервис может применяться в следующих сценариях:
|
|
||||||
|
|
||||||
- размещение production-баз данных с высокими требованиями к доступности;
|
|
||||||
- использование PostgreSQL в микросервисной архитектуре с единой точкой подключения к базе данных;
|
|
||||||
- хранение критичных данных с минимальным временем простоя при отказах инфраструктуры;
|
|
||||||
- быстрое развёртывание PostgreSQL-кластера без необходимости ручной настройки репликации и failover;
|
|
||||||
- администрирование баз данных через веб-интерфейс без прямого доступа к серверам кластера.
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
# О разделе
|
|
||||||
|
|
||||||
Данный раздел содержит описание технических параметров кластера PostgreSQL и порядок их первичной конфигурации.
|
|
||||||
|
|
||||||
Настройка указанных параметров выполняется администратором облачного провайдера на этапе развёртывания сервиса. Пользователь не имеет прямого доступа к их самостоятельной установке.
|
|
||||||
|
|
||||||
Перед созданием кластера клиент предоставляет перечень требуемых параметров менеджеру. Администратор облачного провайдера выполняет конфигурацию в соответствии с согласованными требованиями.
|
|
||||||
|
|
||||||
## Выбор типа и размера дискового хранилища
|
|
||||||
|
|
||||||
Производительность базы данных напрямую зависит от скорости, с которой она может читать и записывать данные на диск. При заказе кластера необходимо выбрать тип дискового хранилища, который определит максимальную скорость работы (IOPS) и время отклика.
|
|
||||||
|
|
||||||
**IOPS (Input/Output Operations Per Second)** — количество операций чтения или записи, которые диск может выполнить за секунду. Чем выше этот показатель, тем быстрее база данных обрабатывает запросы.
|
|
||||||
|
|
||||||
## Доступные типы хранилищ:
|
|
||||||
|
|
||||||
| Название | Лимит IOPS | Время отклика |
|
|
||||||
| ---------------| ------------------ | ------------- |
|
|
||||||
| **Fast SAS** | до 2 IOPS на 1 ГБ | до 10 мс |
|
|
||||||
| **SSD** | до 5 IOPS на 1 ГБ | до 7 мс |
|
|
||||||
| **Fast SSD** | до 10 IOPS на 1 ГБ | до 5 мс |
|
|
||||||
| **Ultra NVMe** | до 25 IOPS на 1 ГБ | до 3 мс |
|
|
||||||
|
|
||||||
::: warning Примечание
|
|
||||||
|
|
||||||
После выбора типа диска необходимо указать объем дискового хранилища, который будет выделен под данные кластера PostgreSQL. Минимальный объем - 50 ГБ.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Конфигурация вычислительных ресурсов
|
|
||||||
|
|
||||||
В данном разделе определяются вычислительные мощности кластера: процессорные ресурсы, оперативная память и количество серверов (нод), из которых будет состоять кластер PostgreSQL.
|
|
||||||
|
|
||||||
### Количество нод в кластере
|
|
||||||
|
|
||||||
Количество нод определяет отказоустойчивость кластера и возможность распределять запросы на чтение между репликами. Чем больше нод, тем выше надёжность и производительность операций чтения.
|
|
||||||
|
|
||||||
Количество нод выбирается в диапазоне **от 1 до 5**.
|
|
||||||
|
|
||||||
### Процессор (CPU)
|
|
||||||
|
|
||||||
Процессор — это вычислительная мощность, выделяемая каждой ноде кластера. Количество vCPU определяет, насколько быстро база данных сможет:
|
|
||||||
|
|
||||||
- обрабатывать запросы;
|
|
||||||
- выполнять сложные операции (сортировки, объединения таблиц);
|
|
||||||
- обслуживать одновременные подключения.
|
|
||||||
|
|
||||||
Доступный диапазон: **от 2 до 24 vCPU** на ноду.
|
|
||||||
|
|
||||||
### Оперативная память (RAM)
|
|
||||||
|
|
||||||
Оперативная память — один из ключевых ресурсов для производительности базы данных. Данные, помещающиеся в RAM, обрабатываются максимально быстро, без обращения к диску.
|
|
||||||
|
|
||||||
Доступный диапазон: **от 4 до 768 ГБ RAM** на ноду.
|
|
||||||
|
|
||||||
### Доступ в интернет
|
|
||||||
|
|
||||||
При заказе сервиса можно выбрать пропускную способность канала связи, через который будет осуществляться доступ к кластеру PostgreSQL из сети интернет.
|
|
||||||
|
|
||||||
**Доступные варианты скорости:**
|
|
||||||
- 50 Мбит/с;
|
|
||||||
- 100 Мбит/с;
|
|
||||||
- 200 Мбит/с;
|
|
||||||
- 300 Мбит/с;
|
|
||||||
- 400 Мбит/с;
|
|
||||||
- 500 Мбит/с;
|
|
||||||
- 1000 Мбит/с (1 Гбит/с).
|
|
||||||
|
|
||||||
::: warning Примечание
|
|
||||||
|
|
||||||
Для выбранного канала предоставляется статический белый IP-адрес.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Параметры конфигурации IPSEC
|
|
||||||
|
|
||||||
Ниже приведены основные параметры, задаваемые при развёртывании кластера PostgreSQL. Часть параметров определяется клиентом на этапе заказа услуги, часть — фиксирована и не подлежит изменению.
|
|
||||||
|
|
||||||
### Данные о конфигурации IPSEC
|
|
||||||
|
|
||||||
Параметры подключения (имя туннеля, устройство, публичный IP-адрес) заполняются вручную на основании информации, предоставленной заказчиком.
|
|
||||||
|
|
||||||
### Версия IKE (Internet Key Exchange)
|
|
||||||
|
|
||||||
Версия IKE выбирается из выпадающего списка, который содержит два значения:
|
|
||||||
|
|
||||||
- **IKE v1** — более ранняя версия протокола;
|
|
||||||
- **IKE v2** — более современная версия, обеспечивающая лучшую устойчивость соединения и более гибкую обработку ошибок.
|
|
||||||
|
|
||||||
Рекомендуется использовать IKE v2, если оборудование заказчика это поддерживает.
|
|
||||||
|
|
||||||
### Метод аутентификации
|
|
||||||
|
|
||||||
Метод аутентификации выбирается из выпадающего списка, который содержит два варианта:
|
|
||||||
|
|
||||||
- **PSK** (Pre-Shared Key) — аутентификация с использованием заранее согласованного общего ключа;
|
|
||||||
- **Certificate** (сертификат) — аутентификация с использованием цифровых сертификатов.
|
|
||||||
|
|
||||||
## Этап 1 - установка защищенного соединения
|
|
||||||
|
|
||||||
На данном этапе задаются параметры шифрования и аутентификации для защищённого канала связи. Все параметры выбираются вручную из выпадающих списков.
|
|
||||||
|
|
||||||
### Алгоритм хэширования
|
|
||||||
|
|
||||||
Определяет алгоритм хэширования для защиты управляющего канала. Параметр заполняется вручную из выпадающего списка:
|
|
||||||
|
|
||||||
- **SHA1** — формирует хэш длиной 160 бит, имеет коллизии (уязвимости), в современных системах считается устаревшим, используется только для совместимости со старым оборудованием.
|
|
||||||
- **SHA2-256** — формирует хэш длиной 256 бит, существенно более устойчив к атакам, оптимальный баланс между безопасностью и производительностью.
|
|
||||||
- **SHA2-384** — длина хэша составляет 384 бита, имеет повышенную криптостойкость, требует больше вычислительных ресурсов, чем SHA-1 и SHA2-256. Используется в средах с повышенными требованиями к безопасности.
|
|
||||||
- **SHA2-512** — длина хэша составляет 512 бит, обеспечивает самый высокий уровень стойкости из перечисленных, создает наибольшую нагрузку на процессор. Обычно применяется в системах с повышенными требованиями к криптографии.
|
|
||||||
|
|
||||||
### Шифрование (Hash)
|
|
||||||
|
|
||||||
Определяет алгоритм симметричного шифрования. Параметр заполняется вручную из выпадающего списка:
|
|
||||||
|
|
||||||
AES 128 — использует 128-битный ключ, обеспечивает быстрое шифрование, имеет достаточный уровень безопасности для большинства задач.
|
|
||||||
AES 256 — использует 256-битный ключ, обеспечивает более высокую криптостойкость, оказывает немного большую нагрузку на CPU.
|
|
||||||
AES GCM 128 / AES GCM 192 / AES GCM 256 — данные алгоритмы совмещают шифрование и контроль целостности, обладают более современным режимом работы, считаются более эффективными по производительности, рекомендуются в современных конфигурациях. Разница между алгоритмами — в длине ключа.
|
|
||||||
|
|
||||||
### DH Group (группа Диффи — Хеллмана)
|
|
||||||
|
|
||||||
Механизм Diffie-Hellman используется для безопасной генерации общего секретного ключа между сторонами туннеля без передачи этого ключа по сети. Чем выше номер группы и длина ключа, тем выше криптографическая стойкость соединения.
|
|
||||||
|
|
||||||
Параметр заполняется вручную из выпадающего списка:
|
|
||||||
|
|
||||||
group 2;
|
|
||||||
group 5;
|
|
||||||
group 14;
|
|
||||||
group 15;
|
|
||||||
group 16;
|
|
||||||
group 19;
|
|
||||||
group 20;
|
|
||||||
group 21.
|
|
||||||
|
|
||||||
### IKE Mode (только для IKEv1)
|
|
||||||
|
|
||||||
Параметр **IKE Mode** определяет способ установления соединения на этапе 1 при использовании протокола IKEv1.
|
|
||||||
|
|
||||||
Доступны два режима: Main и Aggressive. Они отличаются количеством сообщений при установке соединения и уровнем защиты идентификационных данных.
|
|
||||||
|
|
||||||
- **Main Mode** — стандартный и более безопасный режим работы IKEv1;
|
|
||||||
- **Aggressive Mode** — упрощённый и ускоренный режим установления соединения с более низким уровнем защиты данных.
|
|
||||||
|
|
||||||
### Время жизни (Lifetime)
|
|
||||||
|
|
||||||
Параметр определяет, как долго действуют согласованные ключи в рамках первой фазы. После истечения времени выполняется повторная генерация ключей.
|
|
||||||
|
|
||||||
## Этап 2 - передача данных
|
|
||||||
|
|
||||||
Этап 2 IPsec-соединения отвечает за шифрование и защиту пользовательского трафика после того, как защищённый канал был установлен на этапе 1. Этот этап регулирует передачу данных между сторонами через безопасный туннель, который обеспечивает конфиденциальность и целостность данных.
|
|
||||||
|
|
||||||
### Алгоритм хэширование (Hash)
|
|
||||||
|
|
||||||
Аналогично этапу 1, параметр Hash используется для защиты целостности передаваемых данных. Он обеспечивает проверку того, что данные не были изменены при передаче. Доступны следующие алгоритмы:
|
|
||||||
|
|
||||||
- SHA1;
|
|
||||||
- SHA2-256;
|
|
||||||
- SHA2-384;
|
|
||||||
- SHA2-512.
|
|
||||||
|
|
||||||
## Шифрование
|
|
||||||
|
|
||||||
Этап 2 отвечает за шифрование пользовательского трафика. Это важнейший параметр, который защищает данные при их передаче по сети. Доступны следующие алгоритмы:
|
|
||||||
|
|
||||||
- AES 128;
|
|
||||||
- AES 256;
|
|
||||||
- AES GCM 128;
|
|
||||||
- AES GCM 192;
|
|
||||||
- AES GCM 256.
|
|
||||||
|
|
||||||
### PFS
|
|
||||||
|
|
||||||
**Enable perfect forward secrecy (PFS)** - параметр, активирующий генерацию нового ключа на этапе 2. При включенном PFS группа Diffie-Hellman (DH) будет такая же как и на 1-й фазе.
|
|
||||||
|
|
||||||
Данный параметр представлен в виде чекбокса. При его включении:
|
|
||||||
|
|
||||||
- на этапе 2 выполняется дополнительный обмен ключами DH;
|
|
||||||
- для каждой новой IPsec-сессии формируется новый независимый криптографический секрет;
|
|
||||||
- ключи шифрования пользовательского трафика не зависят от ключей этапа 1.
|
|
||||||
|
|
||||||
### DH Group (группа Диффи — Хеллмана)
|
|
||||||
|
|
||||||
Группа DH определяет параметры обмена ключами между сторонами. Чем выше номер группы, тем выше криптографическая стойкость и безопасность обмена.
|
|
||||||
|
|
||||||
Данный параметр так же содержит в себе выпадающий список, состоящий из следующих значений:
|
|
||||||
|
|
||||||
- group 2;
|
|
||||||
- group 5;
|
|
||||||
- group 14;
|
|
||||||
- group 15;
|
|
||||||
- group 16;
|
|
||||||
- group 19;
|
|
||||||
- group 20;
|
|
||||||
- group 21.
|
|
||||||
|
|
||||||
### Время жизни (Lifetime)
|
|
||||||
|
|
||||||
Определяет, как долго действуют согласованные ключи в рамках второй фазы.
|
|
||||||
|
|
||||||
- рекомендуемое значение: 3600 секунд (1 час);
|
|
||||||
- после истечения времени выполняется повторная генерация ключей.
|
|
||||||
|
|
||||||
### Префиксы локальной сети заказчика
|
|
||||||
|
|
||||||
Этот параметр определяет, какие сети на стороне заказчика будут маршрутизироваться через **IPsec-туннель**. Префиксы задаются в формате `192.168.1.0/24`, который позволяет указать диапазон IP-адресов.
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
# Общая схема подключения
|
|
||||||
|
|
||||||
Доступ к кластеру PostgreSQL осуществляется через прокси. Клиентские подключения принимаются прокси, который маршрутизирует трафик к соответствующим узлам кластера (master или replica) в зависимости от выбранного порта. Прямое подключение к узлам базы данных не используется.
|
|
||||||
|
|
||||||
Подключение к кластеру **Cloud PostgreSQL** осуществляется через прокси-сервер. Прокси является единой точкой входа для всех клиентских подключений и принимает входящие соединения от приложений, административных инструментов и пользователей.
|
|
||||||
|
|
||||||
В зависимости от выбранного порта прокси автоматически направляет трафик:
|
|
||||||
- на активный primary-узел - для операций чтения и записи
|
|
||||||
- на реплики - для операций только чтения
|
|
||||||
|
|
||||||
Прямое подключение к отдельным узлам базы данных не используется и не предоставляется. Взаимодействие с кластером всегда выполняется через прокси-сервер.
|
|
||||||
|
|
||||||
## Подключение к базе данных
|
|
||||||
|
|
||||||
Для подключения к базе данных необходимо использовать IP-адрес прокси-сервера, который предоставляется после заказа услуги.
|
|
||||||
|
|
||||||
Этот IP-адрес является единой точкой входа для работы с кластером PostgreSQL. Все подключения к базе данных - как из приложений, так и из клиентских инструментов - выполняются через него.
|
|
||||||
|
|
||||||
Использование других IP-адресов или попытка прямого подключения к отдельным узлам кластера не предусмотрены.
|
|
||||||
|
|
||||||
## Доступные порты
|
|
||||||
|
|
||||||
Для разных типов нагрузки используются разные порты:
|
|
||||||
|
|
||||||
|Порт |Назначение |
|
|
||||||
|------|-----------------------------------------|
|
|
||||||
|5432 |Primary (чтение и запись) |
|
|
||||||
|15432 |Replica (только чтение) |
|
|
||||||
|6432 |Primary через PgBouncer (чтение и запись)|
|
|
||||||
|16432 |Replica через PgBouncer (только чтение) |
|
|
||||||
|
|
||||||
### Особенности работы портов
|
|
||||||
|
|
||||||
- Порты для чтения и записи (5432, 6432) всегда направляют трафик на активный primary-узел. При смене primary переключение происходит автоматически;
|
|
||||||
- Порты только для чтения (15432, 16432) направляют трафик на активные реплики. Если реплик несколько, нагрузка распределяется между ними по принципу round-robin;
|
|
||||||
- Если в кластере отсутствуют реплики, порты для чтения не используются - подключение по ним не устанавливается.
|
|
||||||
|
|
||||||
### Рекомендации по выбору порта
|
|
||||||
|
|
||||||
- Для OLTP-нагрузки и большого количества соединений рекомендуется использовать **порты PgBouncer (6432 или 16432)**;
|
|
||||||
- Для операций записи используйте **master-порты (5432 или 6432)**;
|
|
||||||
- Для read-only запросов можно использовать **replica-порты (15432 или 16432)**.
|
|
||||||
|
|
||||||
## Доступ к pgAdmin
|
|
||||||
|
|
||||||
Для администрирования базы данных используется web-интерфейс pgAdmin.
|
|
||||||
Доступ осуществляется по DNS-имени, которое нужно прописать локально в инфраструктуре откуда будет происходить доступ к web-интерфейсу сервиса:
|
|
||||||
`10.X.X.4 <domain>.cloud-pg.dfcloud.ru`
|
|
||||||
|
|
||||||
После добавления записи pgAdmin будет доступен по адресу:
|
|
||||||
`https://<domain>.cloud-pg.dfcloud.ru`
|
|
||||||
|
|
||||||
Авторизация выполняется с использованием учётных данных, предоставленных вместе с доступом к сервису.
|
|
||||||
|
|
||||||
::: warning Важно
|
|
||||||
|
|
||||||
- подключение к базе данных возможно только через указанный прокси-IP;
|
|
||||||
- в интерфейсе pgAdmin уже добавлен сервер базы данных, созданный для данной инсталляции. Для подключения требуется ввести пароль от учётной записи базы данных;
|
|
||||||
- pgAdmin предназначен для администрирования и не рекомендуется для выполнения тяжёлых или длительных запросов в production-среде.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Примеры подключения к PostgreSQL
|
|
||||||
|
|
||||||
Подключение к primary:
|
|
||||||
`psql -h 10.X.X.4 -p 5432 -U <username> -d <database>`
|
|
||||||
|
|
||||||
Подключение через PgBouncer:
|
|
||||||
`psql -h 10.X.X.4 -p 6432 -U <username> -d <database>`
|
|
||||||
|
|
||||||
### Подключение через DBeaver / DataGrip
|
|
||||||
|
|
||||||
При создании подключения укажите:
|
|
||||||
- Host: 10.X.X.4;
|
|
||||||
- Port: 5432 или 6432;
|
|
||||||
- Database: `<database>`;
|
|
||||||
- User / Password: согласно выданным доступам;
|
|
||||||
- Тип подключения: PostgreSQL.
|
|
||||||
|
|
||||||
### Пример строки подключения
|
|
||||||
|
|
||||||
Primary:
|
|
||||||
`postgresql://<username>:<password>@10.X.X.4:5432/<database>`
|
|
||||||
|
|
||||||
Через PgBouncer:
|
|
||||||
`postgresql://<username>:<password>@10.X.X.4:6432/<database>`
|
|
||||||
@@ -1,203 +0,0 @@
|
|||||||
# Создание сервиса Cloud PostgreSQL
|
|
||||||
|
|
||||||
Данный раздел описывает права, которые предоставляются пользователю PostgreSQL при создании сервиса **Cloud PostgreSQ**L**, а также перечень административных операций, доступных ему для самостоятельного выполнения.
|
|
||||||
|
|
||||||
При развертывании сервиса автоматически создаётся пользователь базы данных с преднастроенными атрибутами и привилегиями. Эти права позволяют заказчику самостоятельно управлять своими базами данных, ролями и пользователями в рамках созданного экземпляра 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 применяется следующий формат хэша:
|
|
||||||
|
|
||||||
```
|
|
||||||
$<iterations>:<salt>$<storedkey>:<serverkey>
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример смены пароля в открытом виде
|
|
||||||
|
|
||||||
```sql
|
|
||||||
ALTER USER client WITH PASSWORD 'new_strong_password';
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример смены пароля с указанием хэша
|
|
||||||
|
|
||||||
```sql
|
|
||||||
ALTER USER client WITH ENCRYPTED PASSWORD '$4096:...';
|
|
||||||
```
|
|
||||||
|
|
||||||
Рекомендуется использовать сложный уникальный пароль, соответствующий требованиям информационной безопасности, и хранить его в защищённом хранилище.
|
|
||||||
|
|
||||||
## Создание новой базы данных
|
|
||||||
|
|
||||||
Пользователь `client` имеет право создавать новые базы данных в рамках своего экземпляра PostgreSQL.
|
|
||||||
|
|
||||||
### Пример создания базы данных
|
|
||||||
|
|
||||||
Для создания базы данных используется стандартная команда:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE DATABASE app_db;
|
|
||||||
```
|
|
||||||
|
|
||||||
Если необходимо назначить владельца базы данных, можно указать соответствующего пользователя. По умолчанию владельцем создаваемой базы данных является пользователь, который её создает.
|
|
||||||
|
|
||||||
### Пример создания базы данных с указанием владельца
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE DATABASE app_db OWNER client;
|
|
||||||
```
|
|
||||||
|
|
||||||
В этом примере база данных `app_db` будет принадлежать пользователю `client`. Пользователь, указанный как владелец, будет иметь полный контроль над базой данных, включая права на её удаление и изменение.
|
|
||||||
|
|
||||||
## Создание пользователей и ролей
|
|
||||||
|
|
||||||
Пользователь `client` имеет право создавать новые роли и пользователей для приложений, а также управлять их правами доступа.
|
|
||||||
|
|
||||||
### Создание роли без логина
|
|
||||||
|
|
||||||
Если требуется создать роль, которая не будет иметь возможности входа в базу данных (например, для организации прав доступа), можно использовать команду:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE ROLE app_role;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Создание пользователя с паролем
|
|
||||||
|
|
||||||
Для создания пользователя с паролем используется команда:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE USER app_user WITH PASSWORD 'app_password';
|
|
||||||
```
|
|
||||||
|
|
||||||
После этого новый пользователь `app_user` будет иметь возможность входа в базу данных, используя указанный пароль.
|
|
||||||
|
|
||||||
### Назначение роли пользователю
|
|
||||||
|
|
||||||
Для назначения роли пользователю используется команда `GRANT`. Это позволяет управлять правами пользователя в рамках определённой роли:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
GRANT app_role TO app_user;
|
|
||||||
```
|
|
||||||
|
|
||||||
После выполнения этой команды пользователь `app_user` станет членом роли `app_role`, и будет наследовать все права, связанные с этой ролью.
|
|
||||||
|
|
||||||
### Передача владельца базы данных
|
|
||||||
|
|
||||||
Если необходимо передать право владения базой данных другому пользователю, это можно сделать с помощью следующей команды:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
ALTER DATABASE app_db OWNER TO app_user;
|
|
||||||
```
|
|
||||||
|
|
||||||
Теперь база данных `app_db` будет принадлежать пользователю `app_user`, и он будет иметь полный контроль над ней.
|
|
||||||
|
|
||||||
### Управление правами доступа
|
|
||||||
|
|
||||||
После создания пользователей и ролей необходимо назначить им соответствующие права доступа.
|
|
||||||
|
|
||||||
### Выдача прав на подключение к базе данных
|
|
||||||
|
|
||||||
Для того чтобы пользователь мог подключаться к базе данных, нужно предоставить ему соответствующие права:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
GRANT CONNECT ON DATABASE app_db TO app_user;
|
|
||||||
```
|
|
||||||
|
|
||||||
Эта команда разрешает пользователю `app_user` подключаться к базе данных `app_db`.
|
|
||||||
|
|
||||||
### Права на схему public
|
|
||||||
|
|
||||||
Для предоставления пользователю прав на использование схемы `public` можно выполнить следующую команду:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
GRANT USAGE, CREATE ON SCHEMA public TO app_user;
|
|
||||||
```
|
|
||||||
|
|
||||||
Эти права позволяют пользователю `app_user` использовать объекты в схеме `public`, а также создавать новые объекты внутри неё.
|
|
||||||
|
|
||||||
### Права на существующие таблицы
|
|
||||||
|
|
||||||
Чтобы предоставить пользователю доступ к существующим таблицам в схеме `public`, можно использовать команду:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
|
|
||||||
```
|
|
||||||
|
|
||||||
Эта команда позволяет пользователю `app_user` выполнять операции чтения, вставки, обновления и удаления данных в существующих таблицах схемы `public`.
|
|
||||||
|
|
||||||
### Права на будущие таблицы
|
|
||||||
|
|
||||||
Если необходимо автоматически предоставить пользователю права на новые таблицы, создаваемые в схеме `public`, используйте команду:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
||||||
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;
|
|
||||||
```
|
|
||||||
|
|
||||||
Эта команда обеспечит, что все будущие таблицы, создаваемые в схеме `public`, будут автоматически иметь права для пользователя `app_user` на чтение, вставку, обновление и удаление данных.
|
|
||||||
|
|
||||||
## Мониторинг репликации
|
|
||||||
|
|
||||||
Пользователь `client` имеет доступ к системным представлениям для мониторинга состояния репликации в кластере PostgreSQL.
|
|
||||||
|
|
||||||
### Просмотр состояния репликации
|
|
||||||
|
|
||||||
Для того чтобы просмотреть текущий статус репликации, пользователь может выполнить запрос к системному представлению:
|
|
||||||
|
|
||||||
``` SQL
|
|
||||||
SELECT * FROM pg_stat_replication;
|
|
||||||
```
|
|
||||||
Этот запрос возвращает информацию о всех репликах, подключённых к основному (primary) серверу.
|
|
||||||
|
|
||||||
### Ограничения доступа
|
|
||||||
|
|
||||||
Пользователь `client` имеет доступ к данным в представлении `pg_stat_replication` только в режиме **read-only**. Это означает, что он может просматривать состояние репликации, но не может изменять или вмешиваться в процесс репликации.
|
|
||||||
Reference in New Issue
Block a user