Как скрыть конфиденциальную информацию, такую ​​как незашифрованные пароли, из журналов?

10

У меня нет доступа к установке Postgres, поэтому я не могу проверить.

Я - охранник, и я вижу незашифрованные пароли в журналах:

create user user1 with password 'PLAINTEXT PASSWORD'

Как администраторы могут изменять или создавать свои пароли без пароля в открытом виде в журналах?

Я видел это , в котором говорится, что вы можете использовать хэш-пароль md5, но затем этот хеш также в открытом виде. Есть ли способ лучше?

Schroeder
источник
1
Если вы доверяете своим администраторам баз данных (потому что не можете применять их), скажите им использовать \passwordкоманду psql.
Дезсо

Ответы:

11

Звучит как log_statementустановлено all.

Если вы хотите, чтобы пароли не появлялись в журналах, в то время log_statementкак установлено значение, которое захватывает ALTER USER/, ALTER ROLEто вы захотите изменить это при смене паролей. например

BEGIN;
SET LOCAL log_statement = 'none';
ALTER USER ... SET PASSWORD ...;
COMMIT;

Вы должны быть суперпользователем, чтобы сделать это. Обычные пользователи не могут переопределить правила ведения журнала.

Было бы хорошо , если PostgreSQL поддерживается маркировки некоторых параметров в операторы (или даже функцию) в качестве защиты чувствительных и позволил пользователям с просьбой , чтобы они были замаскированы в виде бревен, pg_stat_statements, pg_stat_activityи т.д. Существует в настоящее время не любая такая особенность - но эй, патчи добро пожаловать. Если вы действительно заинтересованы, напишите на pgsql-hackers, прежде чем писать какой-либо реальный код, чтобы вы могли получить советы и комментарии. Кроме того, поговорите с кем-то, кто занимается контрактной разработкой.

В общем, PostgreSQL ожидает, что вы будете рассматривать журналы как конфиденциальные.

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

Крейг Рингер
источник
3

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

Вместо этого у меня сработало локальное создание хэша пароля:

$ username='some_user'; dbpass='some_pass'; echo -n "${dbpass}${username}" | md5sum | awk '{print "md5" $1}'
md5dcca63c0632e24746a19448231cac29c

Затем вставив это:

ALTER USER some_user WITH UNENCRYPTED PASSWORD 'md5dcca63c0632e24746a19448231cac29c';

(Примечание по безопасности: в зависимости от того, где вы генерируете вышеупомянутое, вы можете запретить вашей оболочке регистрироваться в своей истории, или в общей системе вы можете использовать утилиту * nix, которая запрашивает пароль, а не фактически включает его в Я оказался не в общей системе, так что меня это не беспокоило.)

robut
источник
1
Отлично. Одна вещь, которую я бы добавил с некоторым акцентом, это то, что просто не следует устанавливать пароли в открытом виде.
Дезсо
2
Да, я учел это и упомянул об этом в вопросе. Это все еще недостаточно для моих требований.
Шредер