pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍

该文件用于控制访问安全性,管理客户端对于PostgreSQL服务器的访问权限,内容包括:允许哪些用户连接到哪个数据库,允许哪些IP或者哪个网段的IP连接到本服务器,以及指定连接时使用的身份验证模式。

pg_hba.conf 配置详解

TYPE 参数设置

TYPE 表示主机类型,值可能为:

  • local:unix‑domain的socket本地套接字连接
  • host:普通TCP/IP socket连接
  • hostssl:SSL加密的TCP/IP socket连接

DATABASE 参数设置

DATABASE 表示数据库名称,值可能为: all ,sameuser,samerole,replication,数据库名称,多个数据库名称用逗号分隔。

注意:ALL 不匹配 replication。

USER 参数设置

USER 表示用户名称,值可以为: all、单个用户名、多个用户名(逗号隔开); 也可以在用户名前缀加 +; USER和DATABASE字段,也可以写带@前缀文件名,文件内部存放数据库名/用户名列表。

ADDRESS 参数设置

该参数可以为主机名称、IP/32(IPv4)、IP/128(IPv6); 主机名称以 .开头;samehost / samenet 用来匹配本机任意IP地址。

METHOD 参数设置

认证方式可选值:

"trust", "reject", "md5", "password", "scram‑sha‑256",
"gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"

注意:password 方式传输明文密码,生产环境不建议使用。

加载配置文件、生效

修改pg_hba.conf不需要完全重启数据库;如需外部IP访问,同时修改postgresql.conf的listen_addresses = '*'。

重载配置两种方式:

# 命令行重载,指定数据目录
pg_ctl reload -D /usr/local/pgsql/data
-- psql内SQL方式重载
SELECT pg_reload_conf();

配置实例参考

# TYPE DATABASE USER  ADDRESS         METHOD
host   all      all   10.10.56.17/32  md5

说明:

  • host:TCP网络连接
  • 第一个all:匹配所有数据库
  • 第二个all:匹配所有数据库用户
  • 10.10.56.17/32:仅允许该单个IPv4地址
  • md5:md5密码校验

允许指定IP,特定用户访问指定库:

# TYPE DATABASE USER  ADDRESS         METHOD
host   test     pgtest 10.10.56.17/32  md5

含义:地址10.10.56.17,用户pgtest,md5密码验证访问test数据库。

允许任意IP,指定用户访问指定库:

# TYPE DATABASE USER  ADDRESS         METHOD
host   test     pgtest 0.0.0.0/0      md5

免密访问示例(测试环境使用,生产禁止):

# TYPE DATABASE USER  ADDRESS         METHOD
host   test     pgtest 0.0.0.0/0      trust

trust:任意IP的pgtest用户无需密码直接登录test数据库。

补充:密码设置成功仍然免密登录问题

现象:设置数据库密码,但不输密码也可以登录,一般是pg_hba.conf认证规则为trust导致。

查找配置文件位置:

find / -name pg_hba.conf

编辑配置文件:

vi /home/postgres/pgsql/data/pg_hba.conf

末尾增加md5密码校验规则:

host all all 0.0.0.0/0 md5

重载配置两种方式

  1. systemd服务方式
service postgresql reload

输出 Reload PostgreSQL: OK 代表生效。

  1. 源码编译无service服务,使用pg_ctl 直接执行pg_ctl reload会报缺少数据目录,带上-D指定数据目录:
su - postgres
pg_ctl reload -D /var/lib/pgsql/9.5/data

输出 server signaled 表示配置已经生效。

修改postgresql默认超级用户postgres的密码

登录psql终端:

sudo -u postgres psql

修改密码(语句末尾分号不能省略)

alter user postgres with password '****';

返回 ALTER ROLE 代表修改成功。 退出psql:

\q

修改完成后,可使用pgAdmin/DBeaver等客户端验证密码登录。

指定用户可访问的数据库pg_hba.conf示例

# TYPE  DATABASE                  USER    ADDRESS    METHOD
local   all                       all                peer
host    community,community2      bret    0.0.0.0/0  md5
host    weather                   weather 0.0.0.0/0  md5
host    all                       postgres 0.0.0.0/0 md5

说明:

  • postgres 用户可以访问全部数据库;
  • bret 用户只能访问 community、community2;
  • weather 用户只能访问 weather 数据库。

图片引用标记: 在这里插入图片描述

原文链接:https://blog.csdn.net/LG_15011399296/article/details/134794358

这份可以直接追加到PostgreSQL文档末尾,需要我把前面所有PostgreSQL内容输出一份完整可直接复制的合并md吗?