web-dev-qa-db-ja.com

プレーンテキストのパスワードなどの機密情報をログから非表示にするにはどうすればよいですか?

Postgresのインストールにアクセスできないため、確認できません。

私はセキュリティ担当者であり、ログにプレーンテキストのパスワードが表示されています。

create user user1 with password 'PLAINTEXT PASSWORD'

DBAは、パスワードをログに記録せずにパスワードを変更または作成するにはどうすればよいですか?

私は this を見てきました。これは、パスワードのmd5ハッシュを使用できることを示していますが、ハッシュも平文です。もっと良い方法はありますか?

10
schroeder

log_statementallに設定されているようです。

log_statementALTER USER/ALTER ROLEをキャプチャする値に設定されているときにパスワードがログに表示されないようにしたい場合は、パスワードを変更するときにそれを上書きする必要があります。例えば.

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

これを行うには、スーパーユーザーである必要があります。通常のユーザーはロギングルールを上書きできません。

PostgreSQLがステートメント(または関数)への一部のパラメータのフラグ付けをセキュリティの影響を受けやすいものとしてサポートし、ユーザーがログ、pg_stat_statementspg_stat_activityなどでそれらをマスクすることを要求できるようにした場合、それは良いことです。現在そのような機能はありますが、パッチは大歓迎です。本当に興味がある場合は、実際のコードを書く前にpgsql-hackersに投稿して、アドバイスやコメントを得ることができます。代わりに、契約開発を行う人に話します。

一般に、PostgreSQLはログを機密情報として扱うことを想定しています。

ロギングが重大なセキュリティ問題である他の領域があります。たとえば、一部のpgcrypto関数はパラメーターとして暗号鍵を受け取ります。

11
Craig Ringer

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ユーティリティを使用することができますコマンド。私はたまたま共有システム上にいなかったので、それは私には関係ありませんでした。)

3
robut