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
重载配置两种方式
- systemd服务方式
service postgresql reload
输出 Reload PostgreSQL: OK 代表生效。
- 源码编译无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吗?
