PostgreSQL使用session_exec和file_fdw实现失败次数锁定用户策略
使用session_exec 、file_fdw以及自定义函数实现该功能。
缺陷:实测发现锁用户后,进去解锁特定用户。只能允许一次登陆,应该再次登陆的时候,触发函数,把之前的日志里的错误登陆的信息也计算到登录次数里了。而且foreign table不能在数据库里清理。需要删除对应的pg_log,才能使foreign table信息清理掉,来重制该用户的密码错误记录。
https://github.com/okbob/session_exec
unzip session_exec-master.zip
cd session_exec-master/
make pg_config=$PGHOME/bin/pg_config
make pg_config=$PGHOME/bin/pg_config install

更改配置文件
logging_collector = on
log_destination = 'csvlog'
session_preload_libraries='session_exec'
session_exec.login_name='login'
更改完之后需要重启数据库
pg_ctl restart
安装file_fdw扩展
cd contrib/file_fdw/
# 安装命令
make && make install

创建外部表postgres_log
create extension file_fdw;CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;CREATE FOREIGN TABLE public.postgres_log(
log_time timestamp(3) with time zone,user_name text,database_name text,process_id integer,connection_from text,session_id text,session_line_num bigint,command_tag text,session_start_time timestamp with time zone,virtual_transaction_id text,transaction_id bigint,error_severity text,sql_state_code text,message text,detail text,hint text,internal_query text,internal_query_pos integer,context text,query text,query_pos integer,location text,application_name text
) SERVER pglog
OPTIONS ( program 'find /home/pg13/data/log/ -type f -name "*.csv" -mtime -1 -exec cat {} \;', format 'csv' );grant SELECT on postgres_log to PUBLIC;

如下设置的是5次 5次登录失败就锁定用户
create or replace function public.login() returns void as $$
declare
res record;
failed_login_times int = 5;
failed_login int = 0;
begin
--获取数据库中所有可连接数据库的用户
for res in select rolname from pg_catalog.pg_roles where rolcanlogin= 't' and rolname !='postgres'
loopraise notice 'user: %!',res.rolname;--获取当前用户最近连续登录失败次数select count(*)from (select log_time,user_name,error_severity,message,detail from public.postgres_log where command_tag = 'authentication' and user_name = res.rolname and (detail is null or detail not like 'Role % does not exist.%') order by log_time desc limit failed_login_times) AWHERE A.error_severity='FATAL'into failed_login ;raise notice 'failed_login_times: %! failed_login: %!',failed_login_times,failed_login;--用户最近密码输入错误次数达到5次或以上if failed_login >= failed_login_times then--锁定用户EXECUTE format('alter user %I nologin',res.rolname);raise notice 'Account % is locked!',res.rolname;end if;
end loop;
end;
$$ language plpgsql strict security definer set search_path to 'public'; 
用户是否被锁/是否允许登陆,可以查看pg_roles系统视图里的rolcanlogin字段。
验证密码失败:
使用如下语句,可以查询登陆失败的记录。
select log_time,user_name,error_severity,message,detail from public.postgres_log where command_tag = 'authentication' order by log_time desc limit 10 offset 0; 

解锁用户命令如下:
alter user test_user login; 解锁同时需要删除pg_log下csv文件里的对应有改用户登陆失败的日志记录,重制密码登录错误的记录,否则可能会重复计算之前的错误登陆记录。
相关文章:
PostgreSQL使用session_exec和file_fdw实现失败次数锁定用户策略
使用session_exec 、file_fdw以及自定义函数实现该功能。 缺陷:实测发现锁用户后,进去解锁特定用户。只能允许一次登陆,应该再次登陆的时候,触发函数,把之前的日志里的错误登陆的信息也计算到登录次数里了。而且foreig…...
Jmeter实现阶梯式线程增加的压测
安装相应jmeter 插件 1:安装jmeter 管理插件: 下载地址:https://jmeter-plugins.org/install/Install/,将下载下来的jar包放到jmeter文件夹下的lib/ext路径下,然后重启jmeter。 2:接着打开 选项-Plugins Ma…...
Linux----防火墙之保存规则
一、关于iptables规则的保存 之前写的iptables的设置,但是都是临时生效的,一旦电脑重启,那么就会失效,如何永久保存,需要借助iptables-save命令,开机生效需要借助iptables-restore命令,并写入规…...
spring-orm:6 HibernateJpaVendorAdapter源码解析
版本 spring-orm:6.1.3 源码 org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {// 旧版本Hibernate的方言类是否存在标识private static final boolean oldDialectsPresent Clas…...
php捕获Fatal error错误与异常处理
在php5的版本中,如果出现致命错误是无法被 try {} catch 捕获的,如下所示: <?phperror_reporting(E_ALL); ini_set(display_errors, on);try {hello(); } catch (\Exception $e) {echo $e->getMessage(); } 运行脚本,最终…...
PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态
PyCharm 调试过程中控制台 [Console] 窗口内运行命令 - 实时获取中间状态 1. yongqiang.py2. Debugger -> Console3. Show Python PromptReferences 1. yongqiang.py #!/usr/bin/env python # -*- coding: utf-8 -*- # yongqiang chengfrom __future__ import absolute_imp…...
MacBook Pro如何安装rust编程环境
安装过程分为以下几步: 1. 安装Homebrew。Homebrew是一个流行的MacOS的包管理器,可用于方便地安装各种软件。打开终端,运行以下命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD…...
SparkUI任务启动参数介绍(148个参数)
文章目录 SparkUI任务启动参数介绍(148个参数)1 spark.app.id: Spark 应用程序的唯一标识符。2 spark.app.initial.jar.urls: Spark 应用程序的初始 Jar 包的 URL。3 spark.app.name: Spark 应用程序的名称。4 spark.app.startTime: Spark 应用程序的启动…...
nginx 安装
Nginx 简介 nginx一种十分轻量级的http服务器一种高性能的HTTP和反向代理服务器,同时是一个IMAP/POP3/SMTP 代理服务器其中官网网站 安装Nginx 使用源码编辑安装 #提前安装相关工具软件包 yum -y install net-tools tar unzip gcc make pcre-devel openssl-devel httpd-too…...
手撕扩散模型(一)| 训练部分——前向扩散,反向预测代码全解析
文章目录 1 直接使用 核心代码2 工程代码实现2.1 DDPM2.2 训练 三大模型VAE,GAN, DIffusion扩散模型 是生成界的重要模型,但是最近一段时间扩散模型被用到的越来越多的,最近爆火的OpenAI的 Sora文生视频模型其实也是用了这种的方…...
linux 防火墙
防火墙分类 按保护范围划分 主机防火墙:服务服务为当前一台主机 网络防火墙:服务服务为防火墙一侧的局域网 按实现方式分类划分 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一部分基于软件的实现 如:华为&#…...
Go应用性能分析实战
Go很适合用来开发高性能网络应用,但仍然需要借助有效的工具进行性能分析,优化代码逻辑。本文介绍了如何通过go test benchmark和pprof进行性能分析,从而实现最优的代码效能。原文: Profiling Go Applications in the Right Way with Examples…...
MySQL的索引类型
目录 1. 主键索引 (PRIMARY KEY) 2. 唯一索引 (UNIQUE) 3. 普通索引 (INDEX) 4. 全文索引 (FULLTEXT) 5. 空间索引 (SPATIAL) 6. 组合索引 (COMPOSITE INDEX) 7. 前缀索引 (PREFIX INDEX) 8. 覆盖索引 (COVERING INDEX) 1. 主键索引 (PRIMARY KEY) 描述:表…...
picker选择器-年月日选择
从底部弹起的滚动选择器。支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。 学习一下日期选择器 平台差异说明 日期选择默…...
【LeetCode-494】目标和(回溯动归)
目录 LeetCode494.目标和 题目描述 解法1:回溯法 代码实现 解法2:动态规划 代码实现 LeetCode494.目标和 题目链接 题目描述 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 和 -。对于数组中…...
力扣 188. 买卖股票的最佳时机 IV
题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ C题解:动态规划 思路同力扣 123. 买卖股票的最佳时机 III-CSDN博客,只是把最高2次换成k次。如果思路不清晰,可以将k从0写到4等找找规律…...
【Go语言】Go项目工程管理
GO 项目工程管理(Go Modules) Go 1.11 版本开始,官方提供了 Go Modules 进行项目管理,Go 1.13开始,Go项目默认使用 Go Modules 进行项目管理。 使用 Go Modules的好处是不再需要依赖 GOPATH,可以在任意位…...
美容小程序:让预约更简单,服务更贴心
在当今繁忙的生活节奏中,美容预约常常令人感到繁琐和疲惫。为了解决这个问题,许多美容院和SPA中心已经开始采用美容小程序来简化预约流程,并提供更加贴心的服务。在这篇文章中,我们将引导您了解如何制作一个美容小程序,…...
【递归】:原理、应用与案例解析 ,助你深入理解递归核心思想
递归 1.基础简介 递归在计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 例如 递归遍历环形链表 基本情况(Base Case):基本情况是递归函数中最简单的情况,它们通常是递…...
【 Maven 】花式玩法之多模块项目
目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目,并且想将这些模块发布到不同的仓库或目标位置&…...
【第五周】关键词解释:稀疏自编码器(Sparse Autoencoder,简称 SAE)
🧠 当我们在谈论"理解"大模型时,我们在谈论什么?今天我们要聊的关键词,可能是2024-2025年大模型可解释性领域最炙手可热的技术之一:稀疏自编码器(Sparse Autoencoder,简称 SAE&#x…...
天华新能冲刺港股:年营收75亿净利降56% 宁德时代是二股东 裴振华夫妻套现26亿
雷递网 雷建平 4月3日苏州天华新能源科技股份有限公司(简称:“天华新能”)日前递交招股书,准备在港交所上市。天华新能2014年在深交所上市,截至今日午盘,天华新能股价为58.6元,市值为487亿元。一…...
想搞懂AI智能体?小白也能看懂的四大核心模块,速收藏!
想搞懂AI智能体到底是怎么工作的?其实不用死磕复杂的技术文档,今天就用通俗的话,把它的核心架构拆明白,新手也能轻松看懂。 不管是我们常听说的LLM(大语言模型)驱动的智能体,还是各类自主决策AI…...
超越YOLO:在RGBT-Tiny上,为什么DETR和Diffusion模型对小目标检测更有效?
超越YOLO:DETR与Diffusion模型在小目标检测中的技术突破 深夜的海上搜救任务中,热成像画面里几个像素大小的落水者身影若隐若现;城市高空无人机巡检时,监控画面中88像素的违规车辆几乎与背景融为一体。这些真实场景揭示了计算机视…...
程序员因简单自动化放弃Python转C,底层逻辑令人震撼
一、一个“简单自动化”,逼得程序员放弃Python转C 拥有一个共识的程序员是很多的,那就是Python、JavaScript上手速度快,还省力,进行写自动化工具完全就是“降维打击”,又有谁会花费力气去写晦涩到难以理解的C语言呢&am…...
基于单片机金沙河粮仓环境监测系统设计与实现
一、摘要 本文围绕基于单片机的金沙河粮仓环境监测系统展开设计与实现研究。系统以单片机为核心,集成 DHT11 、MQ - 135 等传感器,可实时精准监测粮仓温湿度、气体成分等关键环境参数。借助 LoRa、ESP8266 实现数据的可靠传输与远程通信 ,OLE…...
**AI仿真人剧企业2025推荐,沉浸式交互体验与多场景商业落地解析**据中国信通院2025数字内容与人工智能融合应用白皮书显示,2025年国内AI仿真人剧市场规模预计突破120亿元,但能提供完整
AI仿真人剧企业2025推荐,沉浸式交互体验与多场景商业落地解析据中国信通院《2025数字内容与人工智能融合应用白皮书》显示,2025年国内AI仿真人剧市场规模预计突破120亿元,但能提供完整“技术内容运营”一体化解决方案的企业占比不足15%。行业…...
3大云平台统一监控:Telegraf多厂商集成实战指南
3大云平台统一监控:Telegraf多厂商集成实战指南 在当今多云架构盛行的时代,企业往往同时使用AWS、Azure和Google Cloud等多个云平台,这使得跨平台的监控变得复杂而棘手。Telegraf作为一款插件驱动的服务器代理,专为收集和报告指标…...
终极指南:OPAL外部数据源配置与API策略源实战
终极指南:OPAL外部数据源配置与API策略源实战 【免费下载链接】opal Policy and data administration, distribution, and real-time updates on top of Policy Agents (OPA, Cedar, ...) 项目地址: https://gitcode.com/gh_mirrors/opal1/opal OPAL…...
Delphi经典8大天坑|第五篇:ShortString与String混用,导致字符串截断/乱码
一、现象描述项目中同时使用ShortString和string两种字符串类型,赋值时出现字符串被莫名截断(超过255字符的部分丢失),或出现乱码,尤其是在Delphi D7及以下版本中,问题更常见。典型场景:将一个长…...
