找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

465

积分

0

好友

57

主题
发表于 昨天 00:03 | 查看: 5| 回复: 0

每日一题趣味插图

在管理 PostgreSQL 数据库时,pg_hba.conf 文件是控制客户端认证的核心。一个错误的配置可能导致连接失败,或者更糟——引发安全风险。下面我们就通过一个具体的配置问题,来深入理解其正确写法。

题目场景还原:
需要配置允许用户 report_user 从任意 IPv4 远程地址连接到数据库 report_db,并且要求使用 PostgreSQL 10+ 版本推荐的安全认证方式 SCRAM-SHA-256。以下哪项是 pg_hba.conf 中正确的配置行?

选项分析:

A、host report_db report_user 0.0.0.0/0 scram-sha-256

  • 格式解析host 表示 TCP/IP 连接;report_db 是目标数据库名;report_user 是用户名;0.0.0.0/0 是标准的 CIDR 表示法,代表所有 IPv4 地址;scram-sha-256 是指定的认证方法。
  • 结论:此配置完全符合题目要求,语法正确,是正确答案

*B、`host report_db report_user scram-sha-256`**

  • 错误点:在 pg_hba.conf 的地址字段中,* 是一个无效的符号。要表示“所有主机”,正确的写法是 0.0.0.0/0(针对 IPv4)或 ::/0(针对 IPv6)。使用 * 会导致配置无效。

C、host all report_user all trust

  • 多重错误
    1. 地址字段 all 无效,应使用 0.0.0.0/0
    2. 认证方法 trust 极度危险,它允许指定用户无需密码直接连接,这与题目要求的 SCRAM-SHA-256 安全认证方式严重不符。
    3. 虽然 all 作为数据库名是合法的(代表所有数据库),但结合 trust 方法,此配置会为 report_user 开放无密码访问所有数据库的权限,存在巨大安全隐患。

D、allow report_user all password

  • 根本性错误pg_hba.conf 的配置行必须以连接类型开头,如 local, host, hostssl, hostnossl 等。allow 不是一个合法的连接类型关键字,因此这行配置完全无效,不会被 PostgreSQL 识别。

配置要点总结与避坑指南

  1. 格式牢记pg_hba.conf 每行的基本格式为:连接类型 数据库 用户 地址 认证方法。字段间用空格或制表符分隔。
  2. 地址表示:对于 IP 地址,务必使用标准的 CIDR 掩码格式(如 192.168.1.0/24),所有主机用 0.0.0.0/0
  3. 认证方法:在生产环境中,应优先使用 scram-sha-256(PostgreSQL 10+)等强密码认证方式,避免使用已被认为不安全的 md5,并绝对禁止使用 trust
  4. 生效方式:修改 pg_hba.conf 后,必须重新加载配置(pg_ctl reloadSELECT pg_reload_conf();)才能使更改生效,但无需重启数据库服务。

云栈社区的技术板块中,你可以找到更多关于 PostgreSQL 高可用配置、性能调优等进阶话题的深度讨论。

点赞手势表情




上一篇:深度解析Redis Sentinel故障转移:从主观下线到主从切换全流程
下一篇:AviatorScript规则引擎:为Java项目实现灵活的动态配置逻辑
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-18 16:47 , Processed in 0.220060 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表