Предисловие
У 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())
Комментарии