Подключение к PostgreSQL из командной строки

В предыдущей статье мы с вами установили PostgreSQL на ВМ. Будем считать, что установлена 15 версия СУБД.

По умолчанию после установки у нас открыт доступ к СУБД только с localhost (IP 127.0.0.1) – ВМ на которой он и установлен.

Для подключения у СУБД используется консольная утилита, входящая в состав поставки – psql.

Обратите внимание, что при запуске psql без параметров, она пытается подключиться к БД по порту 5432 по Unix Socket – специальный механизм, который проверяет авторизацию пользователя ОС – и если он авторизован, считается, что пользователь доверенный и он с тем же именем имеет право входа в СУБД. В нашем случае, если мы просто попробуем зайти, то получим ошибку:

Связано это с тем, что при установке СУБД создается пользователь Linux – postgres и также внутри СУБД создается пользователь postgres. Это разные пользователи – один для ОС, другой для СУБД, просто их имя совпадает, как раз для целей авторизации и предоставления доступа. Роли СУБД aeugene, естественно, не создается. Для того, чтобы зайти в СУБД нам необходимо или создать пользователя aeugene в СУБД с соответствующими правами (а как нам это сделать, если мы еще не зашли?) или стандартный вариант – запустить psql под пользователем postgres.

Для этого есть два варианта. Первый – переключиться под пользователя ОС postgres и выполнить psql:

sudo su postgres

psql

Здесь можно обратить внимание на ошибку – после переключения на пользователя postgres он ожидаемо не может получить доступ к домашнему каталогу моего пользователя aeugene. Безопасность! Но при этом psql запускается, несмотря на ошибку – она с его запуском не связана, и предоставляет нам доступ к СУБД.

Второй способ – сразу выполнить psql из под пользователя postgres:

sudo -u postgres psql

Здесь мы используем не переключение юзера (su), а ключ переключения контекста пользователя:

Обратите внимание на разницу последнего символа в строке приглашения для ввода команды – $ в ОС и # в СУБД. Это очень важно, так как команды для ОС и СУБД разные, как и поведение на них.

Для того, чтобы открыть доступ по сети, в том числе доступ по сети к localhost – нам необходимо выполнить ряд действий. А именно:

Первое – задаём пароль пользователю СУБД postgres через утилиту psql:
ALTER USER postgres PASSWORD ‘Postgres123#’;

или используя встроенную команду psql:
\password

Второе – включаем listener (процесс, слушающий подключения на сетевом интерфейсе) в postgresql.conf, раскомментируем соответствующую
строчку, убрав символ # в текстовом редакторе nano57:
sudo nano /etc/postgresql/15/main/postgresql.conf
listen_addresses = ‘ # IP адреса, на которых PostgreSQL принимает сетевые подключения, например, localhost, 10...


Установив значение * мы откроем доступ на всех сетевых адаптерах,
но так делать на рабочих проектах не стоит, открываем только для приватной сети. Выход из nano – Ctrl+X, потом Y, если хотим сохранить изменения и N, если отменить, и ENTER

или альтернативный вариант через утилиту psql, при этом изменение попадёт в файл postgresql.auto.conf (обратите внимание, что кавычки должны быть прямые):
SHOW listen_addresses;
ALTER SYSTEM SET listen_addresses = ‘*’;

Третье – Указываем вход по паролю в pg_hba.conf и меняем маску подсети, откуда будет разрешён доступ к нашему кластеру (для выхода из СУБД в ОС используем команду exit):
sudo nano /etc/postgresql/15/main/pg_hba.conf
host all all 0.0.0.0/0 scram-sha-256

Здесь мы открыли доступ везде, установив маску 0.0.0.0/0, так
делать не стоит и желательно указывать маску максимально узко.
Также мы разрешили доступ от имени всех пользователей all –
желательно тоже подходить к этому вопросу более тщательно.

Обязательно указываем метод шифрования пароля:

scram-sha-256 – современный метод шифрования, доступен с 14 версии
md5 – устарел с выходом 14 версии. Передается в зашифрованном виде. Используется для совместимости со старыми клиентами.
password – пароль будет передан в открытом виде и может быть перехвачен злоумышленником. Не рекомендовано!

И на заключительном этапе перезагружаем кластер для применения изменений через утилиту pg_ctlcluster из под линукс-пользователя aeugene:
sudo pg_ctlcluster 15 main restart

Протестируем доступ с ноутбука/компьютера извне ВМ:
psql -h 34.122.117.246 -U postgres -W

Вуаля, доступ получен.

В следующей статье мы разберем как подключиться у СУБД из графического интерфейса.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

одиннадцать + 16 =