如何从日志中隐藏敏感信息(如纯文本密码)?


10

我无权访问Postgres安装,因此无法检查。

我是安全人员,并且在日志中看到纯文本密码:

create user user1 with password 'PLAINTEXT PASSWORD'

没有日志中明文显示的密码,DBA如何更改或创建其密码?

我已经看到了this,它指出您可以使用密码的md5哈希,但是哈希也很明显。有没有更好的办法?


1
如果您信任您的DBA(因为您无法执行它),请告诉他们使用的\password命令psql
dezso

Answers:


11

听起来好像log_statement设置为all

如果您希望在将密码log_statement设置为可捕获ALTER USER/ 的值时防止密码出现在日志中,ALTER ROLE那么在更改密码时,您将希望覆盖该密码。例如

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

您必须是超级用户才能执行此操作。普通用户不能覆盖日志记录规则。

这将是很好,如果PostgreSQL的支持萎靡不振一些参数语句(或偶函数)作为安全敏感并允许用户请求他们在日志被屏蔽,pg_stat_statementspg_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实用程序,该实用程序将提示您输入密码,而不是实际将其包含在密码中。命令。我碰巧不在共享系统上,所以我不必担心。


1
很好。我要强调的一件事是,根本不应该以明文形式设置密码。
dezso

2
是的,我考虑过这一点,并在问题中提到了它。仍不足以满足我的要求。
schroeder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.