墨墨导读:PostgreSQL使用session_exec插件实现用户密码验证失败几次后自动锁定,本文介绍一种处理方案。
一、插件session_exec安装配置篇
下载插件并编译安装。
https://github.com/okbob/session_exec
$解压缩session_exec-master.zip
$ cd session_exec-master/
$ make pg _ config=/opt/pgsql/bin/pg _ config
$ make pg _ config=/opt/pgsql/bin/pg _ config install
配置postgresql.conf。
session _ preload _ libraries=' session _ exec '
session_exec.login_name='login '
注意:上面第一个变量是设置会话_唐山快照优化预加载库(_ l)而不是通常设置的共享_预加载_库。
第二个变量是需要自定义实现的登录函数。
重启数据库服务。
1美元sudo系统CTL重启PostgreSQL-12
二、自定义登录函数篇
创建t_login表用于存储提取自数据库日志中登录失败的信息。
创建表t_login
(
带时区的login_time timestamp(3)插入时间,
用户名文本-数据库登录用户,
标志int4 -标志位,0代表过期数据,1代表正常状态数据
);
使用文件fdw(_ f)外部表记录数据库日志信息。
文件fdw(_ f)如果未配置过,参见下面步骤。
$ CD/opt/Postgresql-12.5/contrib/file _ fdw
$ make make install
创建扩展名文件_ fdw
创建服务器日志FOREDIAN数据包装器文件fdw(_ f)
建立外部表postgres_log,关联数据库日志中登录失败的信息。
创建外键表后缀_日志(
带时区的log_time时间戳(3 ),
用户名文本,
数据库名称文本,
进程id整数,
连接(_from)文本,
会话自我文本,
session_line_num bigint,
命令标签文本,
带有时区的会话开始时间时间戳,
虚拟事务id文本
transaction_id bigint,
错误严重性文本,
sql_state_code文本,
消息文本,
详细文本,
提示文本,
内部查询文本,
internal_query_pos integer,
上下文文本,
查询文本,
query_pos integer,
位置文本,
应用程序名称文本
)SERVER pglog
OPTIONS(program ' find/opt/pg _ log _ 5432-type f-name ' * .' CSV '-mtime-1-exec cat { } \;',格式为“CSV”);
注意:
1./opt/pg_log_5432需要修改为实际环境日志目录。
2.不同宜在家长指导下观看的版本战斗支援车(战斗支援车的缩写)日志格式可能有所差异,参考宜在家长指导下观看的官网文档运行时配置日志记录章节(http://postgres。cn/docs/12/runtime-config-logging。html)。