PG14:auth_delay 插件源码分析

这篇具有很好参考价值的文章主要介绍了PG14:auth_delay 插件源码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

auth_delay 让服务器在报告身份验证失败前短暂暂停,以增加对数据库密码进行暴力破解的难度。需要注意的是,这对阻止拒绝服务攻击毫无帮助,甚至可能加剧攻击,因为在报告身份验证失败前等待的进程仍会占用连接。

要使用这个模块必须要在 postgresql.conf 中配置参数

shared_preload_libraries = 'auth_delay'
auth_delay.milliseconds = '500'

这个代码比较简单,一共分为三个部分。

  1. hook 函数

在 libpq 中定义了一个 ClientAuthentication_hook 函数指针,代码如下:

typedef void (*ClientAuthentication_hook_type) (Port *, int);

/*
 * This hook allows plugins to get control following client authentication,
 * but before the user has been informed about the results.  It could be used
 * to record login events, insert a delay after failed authentication, etc.
 */
ClientAuthentication_hook_type ClientAuthentication_hook = NULL;

  1. _PG_init 函数
void
_PG_init(void)
{
	/* Define custom GUC variables */
	DefineCustomIntVariable("auth_delay.milliseconds",
							"Milliseconds to delay before reporting authentication failure",
							NULL,
							&auth_delay_milliseconds,
							0,
							0, INT_MAX / 1000,
							PGC_SIGHUP,
							GUC_UNIT_MS,
							NULL,
							NULL,
							NULL);
	/* Install Hooks */
	original_client_auth_hook = ClientAuthentication_hook;
	ClientAuthentication_hook = auth_delay_checks;
}

这个 _PG_init 函数会在模块调用之前执行,这个函数主要实现的功能是定义了一个 GUC 参数 auth_delay.milliseconds 这个参数我们需要在 postgresql.conf 中进行配置,然后它将原来的钩子函数保存在了 original_client_auth_hook 变量中,然后将我们自己的 auth_delay_checks 函数赋给了 ClientAuthentication_hook 变量,这样我们就可以让数据库调用我们的函数了。

  1. auth_delay_checks 函数
static void
auth_delay_checks(Port *port, int status)
{
	/*
	 * Any other plugins which use ClientAuthentication_hook.
	 */
	if (original_client_auth_hook)
		original_client_auth_hook(port, status);

	/*
	 * Inject a short delay if authentication failed.
	 */
	if (status != STATUS_OK)
	{
		pg_usleep(1000L * auth_delay_milliseconds);
	}
}

这个函数的意思是如果原来存在有钩子函数就先运行原来的钩子函数,然后我们看一下验证的状态 status 是不是正确,如果不正确,就延时 auth_delay_milliseconds 个时间。文章来源地址https://www.toymoban.com/news/detail-839879.html

到了这里,关于PG14:auth_delay 插件源码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Next14+Auth5实现Github、Google、Gitee平台授权登录和邮箱密码登录

    后面打算自己做一个独立产品,产品需要用到服务端渲染,而我比较擅长React,所以最近在学Next14。 刚开始学的时候,因为自己英文不好,中文文档又特别少,踩了不少坑。后面买了冴羽大佬的Next小册跟着学习,很快就上手了,小册质量很高,个人觉得很适合新手入门。 学

    2024年04月15日
    浏览(33)
  • Docker中为RabbitMQ安装rabbitmq_delayed_message_exchange插件

    rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延迟消息传递(或计划消息传递)的插件。 插件下载地址:https://www.rabbitmq.com/community-plugins.html 欢迎访问我的个人博客:https://wk-blog.vip 首先需要确定我们当前使用的RabbitMQ的版本,我们可以直接登录Web端的管理界面查看版本 也可

    2024年02月10日
    浏览(40)
  • pg_enterprise_views偶然发现的PG神仙插件!

    一直从事数据库相关的工作,对于PG而言最大的问题其实是在运维管理方面,其缺乏有效且直观成体系的系统表,苦觅良久,今日在PG官网中发现了一款新收录的免费插件,其提供了数十张系统表,内容涵盖了从操作系统到数据库的负载指标、等待事件、会话、客户端、SQL、

    2024年02月05日
    浏览(29)
  • Docker中为RabbitMQ安装rabbitmq_delayed_message_exchange延迟队列插件

    1、前言 rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延迟消息传递(或计划消息传递)的插件。 插件下载地址:https://www.rabbitmq.com/community-plugins.html 1、下载插件 首先需要确定我们当前使用的RabbitMQ的版本,我们可以直接登录Web端的管理界面查看版本   也可以在RabbitMQ容器中

    2024年02月12日
    浏览(37)
  • 为kong网关添加key-auth插件实现安全认证

    官方指导文档:https://docs.konghq.com/gateway/latest/get-started/key-authentication/ 这里我们新建一个username=luka的用户 这一步我们看到kong给我们分配一个key:mZiuw2s2mJvFTbwhVx1zpYzFGaUbS2t1 1、启用key-auth插件 2、不带key进行请求 3、携带错误的key进行请求 4、使用正确的key进行请求 1、查看当前已

    2024年02月06日
    浏览(33)
  • PG14归档失败解决办法archiver failed on wal_lsn

    昨晚Repmgr+PG14主备主库因wal日志撑爆磁盘,删除主库过期wal文件重做备库后上午进行主备状态巡查,主库向备库发送wal文件正常,但是查主库状态时发现显示有1条归档失败的记录。 postgres: archiver failed on 000000010000006F00000086 主库: walsender repmgr 172.28.32.23(36122) streaming 72/1BAC3A10

    2024年02月06日
    浏览(35)
  • 基于ora2pg迁移Oracle19C到postgreSQL14

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年02月05日
    浏览(30)
  • 安装Rabbit插件失败 {:plugins_not_found, [:rabbitmq_delayed_message_exchange]}

    今天再使用rabbitMQ延迟队列时,安装相关插件报错,蛋疼好几个小时没有安装好 下面来看下什么原因吧。。。。。。。 在github上面拉下 zip文件,并解压到**/plugins**目录,安装插件报错。 1.从github上面拉取下来的zip文件,解压后不能装成功 2.一定要 兼容自己的版本,比如你使

    2024年02月08日
    浏览(74)
  • Ubuntu22.04.1上 mosquitto安装及mosquitto-auth-plug 认证插件配置

    1、先上效果,可以根据mysql中mosquitto数据库的不同users角色登陆mosquitto: SELECT * FROM mosquitto.users; SELECT * FROM mosquitto.acls; 2、账号密码 123456

    2024年02月10日
    浏览(38)
  • Postgresql 模块插件之pg_stat_statements

    相关链接: pgsql编译安装 pgBouncer连接池 pg_stat_statements 提供了跟踪服务器执行的所有 SQL 语句的规划和执行统计信息的方法。当 pg_stat_statements 处于活动状态时,它会跟踪服务器上所有数据库的统计信息。该模块收集到的统计数据可以通过一个名为 pg_stat_statements 的视图进行访

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包