文章目录
- 环境
- 症状
- 问题原因
- 解决方案
环境
系统平台:N/A
版本:4.1.1
症状
log_statement参数,一般设置为ddl级别以上的选项,但是该方式存在风险,任何修改用户密码的操作都将被明文记录到日志中,建议在修改用户密码前,临时关闭该参数。
问题原因
在生产环境中,数据库日志记录功能必不可少。
log_statement参数控制数据库日志记录哪些SQL,可以选择的选项有:none, ddl, mod, and all.
none: 不记录任何语句
ddl : 记录所有DDL 语句
mod: 记录所有DDL以及涉及到数据修改的语句
all: 记录所有语句
解决方案
例如:
highgo=# show log_statement;log_statement---------------ddl(1row)highgo=# select * from pg_file_settings where name ='log_statement';sourcefile|sourceline|seqno|name|setting|applied|error----------------------------------------------+------------+-------+---------------+---------+---------+-------/data/highgo/4.1.1/data/postgresql.auto.conf|10|31|log_statement|ddl|t|(1row)highgo=# alter user highgo encrypted password 'highgo';ALTERROLE 数据库日志记录如下:2018-04-1914:55:00.342CST,"highgo","highgo",3440,"[local]",5ad83cd7.d70,3,"idle",2018-04-1914:53:11CST,2/7,0,LOG,00000,"statement: alter user highgo encrypted password 'highgo';",,,,,,,,,"psql"综上所述,建议在修改密码或者其他涉密操作之前,临时关闭该参数: highgo=# set log_statement = 'none';SEThighgo=# alter user highgo encrypted password 'highgo';ALTERROLE该参数仅在当前会话生效,断开连接或退出登录后即失效。