[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Sharded PostgreSQL](../index.md) > [Пошаговые инструкции](index.md) > Подключение к базе данных

# Подключение к кластеру Sharded PostgreSQL


К хостам кластера Managed Service for Sharded PostgreSQL можно подключиться:

* Через интернет, если вы настроили публичный доступ для нужного хоста. К таким хостам подключиться можно только с использованием SSL-соединения.

* С виртуальных машин Yandex Cloud, расположенных в той же [облачной сети](../../vpc/concepts/network.md). Если к хосту нет публичного доступа, для подключения с таких виртуальных машин необязательно использовать SSL-соединение.


Подключение возможно ко всем [типам хостов](../concepts/index.md): `INFRA`, `ROUTER`, `COORDINATOR`, хосты PostgreSQL-кластера. Подключение выполняется через порт `6432`. К хостам типа `COORDINATOR`, а также к консоли администратора Sharded PostgreSQL необходимо подключаться от имени пользователя `spqr-console` к базе данных `spqr-console`. Консоль администратора позволяет настроить правила шардирования. Подробнее читайте в [документации SPQR](https://pg-sharding.tech/welcome/get_started).


## Настройка групп безопасности {#configuring-security-groups}

Для подключения к кластеру необходимо, чтобы [группы безопасности](../../vpc/concepts/security-groups.md) содержали правила, которые разрешают трафик с определенных портов, IP-адресов или из других групп безопасности.

Настройки групп безопасности будут различаться в зависимости от выбранного способа подключения:

{% list tabs group=connection_method %}

- Через интернет {#internet}

    [Настройте все группы безопасности](../../vpc/operations/security-group-add-rule.md) кластера так, чтобы они разрешали входящий трафик с любых IP-адресов на порт `6432`. Для этого создайте следующее правило для входящего трафика:

    * **Диапазон портов** — `6432`.
    * **Протокол** — `TCP`.
    * **Источник** — `CIDR`.
    * **CIDR блоки** — `0.0.0.0/0`.

    Если в общей группе безопасности кластера и шардов настроены правила для подключения роутера к хостам шарда, дополнительная настройка групп безопасности для доступа к кластеру через интернет не требуется.

- С ВМ в Yandex Cloud {#cloud}

    1. [Настройте все группы безопасности](../../vpc/operations/security-group-add-rule.md) кластера так, чтобы они разрешали входящий трафик из группы безопасности, в которой находится ВМ, на порт `6432`. Для этого создайте в этих группах следующее правило для входящего трафика:

        * **Диапазон портов** — `6432`.
        * **Протокол** — `TCP`.
        * **Источник** — `Группа безопасности`.
        * **Группа безопасности** — если кластер и ВМ находятся в одной и той же группе безопасности, выберите значение `Текущая` (`Self`). В противном случае укажите группу безопасности ВМ.

    1. [Настройте группу безопасности](../../vpc/operations/security-group-add-rule.md), в которой находится ВМ так, чтобы можно было подключаться к ВМ и был разрешен трафик между ВМ и хостами кластера.

        Пример правил для ВМ:

        * Для входящего трафика:
            * **Диапазон портов** — `22`.
            * **Протокол** — `TCP`.
            * **Источник** — `CIDR`.
            * **CIDR блоки** — `0.0.0.0/0`.

            Это правило позволяет [подключаться](../../compute/operations/vm-connect/ssh.md#vm-connect) к ВМ по протоколу [SSH](../../glossary/ssh-keygen.md).

        * Для исходящего трафика:
            * **Диапазон портов** — `0-65535`.
            * **Протокол** — `Любой` (`Any`).
            * **Назначение** — `CIDR`.
                * **CIDR блоки** — `0.0.0.0/0`.

            Это правило разрешает любой исходящий трафик, что позволяет не только подключаться к кластеру, но и устанавливать на ВМ необходимые для этого сертификаты и утилиты.

{% endlist %}

{% note info %}

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

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

{% endnote %}


## Получение SSL-сертификата {#get-ssl-cert}

Хосты Sharded PostgreSQL с публичным доступом поддерживают только шифрованные соединения. Чтобы использовать их, получите SSL-сертификат:

{% list tabs group=operating_system %}

- Linux (Bash)/macOS (Zsh) {#linux-macos}

   ```bash
   mkdir -p ~/.postgresql && \
   wget "https://storage.yandexcloud.kz/cloud-certs/CA.pem" \
        --output-document ~/.postgresql/root.crt && \
   chmod 0655 ~/.postgresql/root.crt
   ```

   Сертификат будет сохранен в файле `~/.postgresql/root.crt`.

- Windows (PowerShell) {#windows}

   ```powershell
   mkdir $HOME\.postgresql; curl.exe -o $HOME\.postgresql\root.crt https://storage.yandexcloud.kz/cloud-certs/CA.pem
   ```

   Сертификат будет сохранен в файле `$HOME\.postgresql\root.crt`.
   
   Корпоративные политики и антивирус могут блокировать скачивание сертификата. Подробнее читайте в разделе [Вопросы и ответы](../../managed-postgresql/qa/connection.md#get-ssl-error).

{% endlist %}

## FQDN хоста Sharded PostgreSQL {#fqdn}

Для подключения к хосту потребуется его [FQDN](../../glossary/fqdn.md) — доменное имя.

FQDN можно посмотреть в консоли управления:

1. Перейдите на страницу кластера.
1. Перейдите в раздел **Хосты**.
1. Скопируйте значение в столбце **FQDN хоста**.

## Подключение с помощью Bash {#bash}

Перед подключением установите зависимости:

```bash
sudo apt update && sudo apt install --yes postgresql-client
```

{% list tabs group=connection %}

- Подключение без SSL {#without-ssl}

    1. Подключитесь к базе данных:

        ```bash
        psql "host=<FQDN_хоста> \
              port=6432 \
              sslmode=disable \
              dbname=<имя_БД> \
              user=<имя_пользователя> \
              target_session_attrs=read-write"
        ```

        Где `target_session_attrs` определяет тип запроса к хосту. Например, значение `read-write` дает возможность чтения и записи. Подробнее читайте в [документации SPQR](https://docs.pg-sharding.tech/routing/hints#__spqr__target_session_attrs).

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

    1. Для проверки успешности подключения выполните запрос:

        ```bash
        SELECT version();
        ```

- Подключение с SSL {#with-ssl}

    1. Подключитесь к базе данных:

        ```bash
        psql "host=<FQDN_хоста> \
              port=6432 \
              sslmode=verify-full \
              dbname=<имя_БД> \
              user=<имя_пользователя> \
              target_session_attrs=read-write"
        ```

        Где `target_session_attrs` определяет тип запроса к хосту. Например, значение `read-write` дает возможность чтения и записи. Подробнее читайте в [документации SPQR](https://pg-sharding.tech/routing/hints#spqr-target-session-attrs).

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

    1. Для проверки успешности подключения выполните запрос:

        ```bash
        SELECT version();
        ```

{% endlist %}

## Подключение из pgAdmin 4 {#connection-pgadmin}


Подключение проверялось для [pgAdmin 4](https://www.pgadmin.org) версии 9.1 в Windows 10.

Подключаться из pgAdmin 4 можно только к хостам кластера в публичном доступе с [использованием SSL-сертификата](#get-ssl-cert).

Создайте новое подключение к серверу:

1. Выберите в меню **Object** → **Register** → **Server...**
1. На вкладке **General** в поле **Name** укажите имя, под которым кластер будет отображаться в интерфейсе pgAdmin 4. Имя может быть любым.
1. На вкладке **Connection** укажите параметры подключения:

    * **Host name/address** — [FQDN хоста](#fqdn);
    * **Port** — `6432`;
    * **Maintenance database** — имя БД для подключения;
    * **Username** — имя пользователя, от имени которого выполняется подключение;
    * **Password** — пароль пользователя.

1. На вкладке **Parameters**:

    * Установите параметр **SSL mode** в значение `verify-full`.
    * Добавьте новый параметр **Root certificate** и укажите в нем путь к сохраненному файлу SSL-сертификата.

1. Нажмите кнопку **Save**, чтобы сохранить настройки подключения к серверу.

Кластер появится в списке серверов в навигационном меню.