Пароль PostgreSQL — изменить, сбросить, файл .pgpass

Управление паролями в PostgreSQL: изменить через ALTER USER, сбросить если забыли через pg_hba.conf, настроить .pgpass для подключения без ввода пароля. Разбираем все сценарии — от смены в psql до полного сброса superuser.

PostgreSQL база знаний: перейти в рубрику с уроками на русском языке

Изменить пароль пользователя

-- В psql — изменить пароль своего пользователя:
\password
-- Запросит новый пароль и подтверждение (пароль не отображается)

-- Изменить пароль через ALTER USER (нужны права superuser для других пользователей):
ALTER USER postgres WITH PASSWORD 'новый_пароль';
ALTER USER appuser WITH PASSWORD 'новый_пароль';

-- Синоним ALTER ROLE:
ALTER ROLE appuser WITH PASSWORD 'новый_пароль';

-- Удалить пароль (только через Unix-сокет или trust-авторизация):
ALTER USER appuser WITH PASSWORD NULL;

-- Установить срок действия пароля:
ALTER USER appuser WITH PASSWORD 'пароль' VALID UNTIL '2025-12-31';
-- Снять ограничение:
ALTER USER appuser WITH VALID UNTIL 'infinity';

-- Проверить текущих пользователей и метаданные паролей:
SELECT rolname, rolpassword IS NOT NULL AS has_password, rolvaliduntil
FROM pg_authid
WHERE rolcanlogin = TRUE;

Сброс пароля через pg_hba.conf

Если забыли пароль пользователя postgres — нужно временно разрешить вход без пароля через pg_hba.conf:

# Шаг 1: Найти pg_hba.conf
# Linux:
find /etc/postgresql -name pg_hba.conf
# /etc/postgresql/16/main/pg_hba.conf

# macOS (Homebrew):
# /usr/local/var/postgresql@16/pg_hba.conf

# Windows:
# C:\Program Files\PostgreSQL\16\data\pg_hba.conf

# Шаг 2: Открыть файл и найти строку для localhost:
# TYPE  DATABASE  USER  ADDRESS     METHOD
host    all       all   127.0.0.1/32  scram-sha-256

# Изменить METHOD на trust (вход без пароля):
host    all       all   127.0.0.1/32  trust

# Шаг 3: Перезапустить PostgreSQL:
# Linux:
sudo systemctl restart postgresql
# macOS Homebrew:
brew services restart postgresql@16
# Windows:
net stop postgresql-x64-16 && net start postgresql-x64-16

# Шаг 4: Подключиться без пароля и изменить пароль:
psql -U postgres
ALTER USER postgres WITH PASSWORD 'новый_надёжный_пароль';

# Шаг 5: Вернуть scram-sha-256 в pg_hba.conf и перезапустить PostgreSQL!

Файл .pgpass — подключение без ввода пароля

# Файл .pgpass позволяет psql/pg_dump читать пароль автоматически
# Формат: hostname:port:database:username:password

# Создать файл:
# Linux/macOS:
nano ~/.pgpass

# Содержимое (можно использовать * как wildcard):
localhost:5432:mydb:appuser:мой_пароль
localhost:5432:*:postgres:пароль_postgres
*:5432:analytics:readonly:readonly_pass
# * означает любое значение в этой позиции

# Установить права 600 (только владелец может читать):
chmod 600 ~/.pgpass
# Без этих прав PostgreSQL ИГНОРИРУЕТ .pgpass с предупреждением

# Windows — файл называется %APPDATA%\postgresql\pgpass.conf
# %APPDATA% обычно: C:\Users\Username\AppData\Roaming

# Проверить что .pgpass работает:
psql -U appuser -h localhost mydb
# Должен подключиться без запроса пароля

# Или через переменную окружения (только для текущей сессии):
export PGPASSWORD='мой_пароль'
psql -U appuser -h localhost mydb
# Это небезопасно — пароль виден в переменных окружения!

pg_hba.conf — методы аутентификации

МетодОписаниеПрименение
scram-sha-256Хэшированный пароль (современный стандарт)Рекомендуется для всех новых установок
md5MD5 хэш пароляСовместимость со старыми клиентами
passwordПароль в открытом видеТолько в защищённых сетях, не рекомендуется
trustБез пароля, все допускаютсяТолько для локальной разработки
peerПо имени системного пользователя UnixЛокальные соединения через Unix-сокет
rejectВсегда отказыватьБлокировать определённые IP

Строка подключения с паролем

-- Подключиться psql с паролем в командной строке (небезопасно, видно в history):
psql "postgresql://username:password@localhost:5432/dbname"
psql -U username -h localhost -d dbname -W
# -W — запросить пароль интерактивно (безопаснее)

-- Connection string для приложений:
postgresql://appuser:password@localhost:5432/mydb
postgresql://appuser:password@localhost:5432/mydb?sslmode=require

-- Через переменные окружения (безопаснее чем в строке подключения):
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=mydb
export PGUSER=appuser
export PGPASSWORD=password
psql  # подключится используя переменные

-- pg_dump с паролем:
pg_dump -U appuser -h localhost mydb > backup.sql
# Пароль попросит интерактивно, или читает из .pgpass

Часто задаваемые вопросы

Как сбросить пароль postgres если его не помню?

Нужен доступ к серверу и права на редактирование pg_hba.conf. Алгоритм: 1) Найти pg_hba.conf (find /etc/postgresql -name pg_hba.conf на Linux). 2) Изменить метод для localhost с scram-sha-256 на trust. 3) Перезапустить PostgreSQL: sudo systemctl restart postgresql. 4) Подключиться без пароля: psql -U postgres. 5) Установить новый пароль: ALTER USER postgres WITH PASSWORD 'новый_пароль';. 6) Вернуть scram-sha-256 в pg_hba.conf и перезапустить PostgreSQL снова. Без доступа к серверу сбросить пароль невозможно.

Ошибка «password authentication failed» — что делать?

Проверить по порядку: 1) Правильный пользователь? Пользователь PostgreSQL и системный пользователь — разные вещи. 2) Пароль точно верный, без лишних пробелов? 3) К какой базе подключаетесь? psql -U postgres -d postgres — подключение к базе postgres, не к своей. 4) Метод в pg_hba.conf соответствует клиенту? Если в pg_hba.conf стоит md5, а клиент отправляет scram — может не совпасть. 5) Просмотреть логи: tail -f /var/log/postgresql/postgresql-*.log — там подробная причина ошибки.

Безопасно ли хранить пароль в .pgpass?

Относительно безопасно при правильных правах файла. Обязательно установите chmod 600 ~/.pgpass — PostgreSQL игнорирует файл с более широкими правами. Файл хранит пароль в открытом виде, поэтому не помещайте его в git-репозиторий. Добавьте в .gitignore: .pgpass. Альтернатива для продакшн: переменные окружения через secrets manager (Vault, AWS Secrets Manager), сертификаты SSL вместо паролей, pg_service.conf для хранения параметров подключения без пароля.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x