Предисловие

У postgresql за логирование запросов отвечает параметр log_statement, который может принимать значения:

  • none - не вести логирование запросов
  • ddl - записывать CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, TRUNCATE, COPY
  • all - собственно записывает всё, в том числе и SELECT

Проблема

При установленном значении log_statement = dll или all также записывается и команды CREATE USER и ALTER USER. В целом ничего страшного, но есть одно но: записывается и пароль для команды.

Воспроизведение

Создаём пользователя

psql -U postgres -d postgres
CREATE USER aaaaa WITH PASSWORD 'EEEEeee111++';

Проверяем логи Postgres

cat /pg_db_path/log/postgresql-2020-11-11_000000.log | grep PASSWORD

В результате получаем: statement: CREATE USER aaaaa WITH PASSWORD 'EEEEeee111++';

Решение

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

psql -U postgres -d postgres
SET LOCAL log_statement = 'none';
CREATE USER aaaaa11 WITH PASSWORD 'EEEEeee111++';

И наверное самый лучший вариант это закодировать пароль в md5 и уже подставить это значение в PASSWORD

CREATE USER aaaaa33 WITH PASSWORD 'md5e723ge6ge7623ge76g3e3287eg932e';

Генерация md5 пароля

python
import hashlib
print("md5" + hashlib.md5("password" + "user").hexdigest())