PostgreSQL用户登录失败自动锁定的处理方案
  • 作者:admin
  • 发表时间:2021-04-22 07:51
  • 来源:未知

墨墨导读: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)。