1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG065-PG客户端认证配置:pg_hba.conf详解与权限配置

本文档风哥主要介绍PostgreSQL数据库客户端认证配置文件pg_hba.conf相关知识,包括文件格式、认证方法、本地认证配置、远程认证配置、SSL认证配置等内容,风哥教程参考PostgreSQL官方文档Client Authentication章节,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 PostgreSQL数据库pg_hba.conf文件概述

pg_hba.conf是PostgreSQL数据库的客户端认证配置文件,用于控制客户端如何连接到数据库服务器以及如何进行身份验证。HBA是Host-Based Authentication(基于主机的认证)的缩写。该文件定义了哪些主机、哪些用户、使用哪种认证方法可以访问哪些数据库。更多视频教程www.fgedu.net.cn

pg_hba.conf文件特点:

  • 位于数据目录($PGDATA)中
  • 按顺序匹配规则,首次匹配生效
  • 修改后需要重新加载配置(pg_reload_conf)
  • 支持多种认证方法
  • 支持主机名、IP地址、CIDR格式

1.2 PostgreSQL数据库pg_hba.conf文件格式

pg_hba.conf配置文件格式说明:

# pg_hba.conf文件格式
# TYPE DATABASE USER ADDRESS METHOD

# 字段说明:
# TYPE:连接类型
# – local:Unix域套接字连接
# – fgedu.net.cn:TCP/IP连接(SSL或非SSL)
# – fgedu.net.cnssl:仅SSL连接
# – fgedu.net.cnnossl:仅非SSL连接
# – replication:复制连接

# DATABASE:数据库名称
# – all:所有数据库
# – samefgedu:与用户名相同的数据库
# – samerole:与角色名相同的数据库
# – 具体数据库名:如postgres, fgedudb
# – 多个数据库用逗号分隔

# USER:用户名称
# – all:所有用户
# – 具体用户名:如postgres, fgedu_fgedu
# – 多个用户用逗号分隔
# – +组名:组成员

# ADDRESS:客户端地址
# – 本地连接:留空
# – IP地址:192.168.1.100
# – CIDR格式:192.168.1.0/24
# – 主机名:fgedu.net.cn
# – all:所有地址

# METHOD:认证方法
# – trust:无条件信任
# – reject:拒绝连接
# – md5:MD5加密密码
# – scram-sha-256:SCRAM-SHA-256加密
# – password:明文密码
# – ident:操作系统用户映射
# – peer:操作系统用户名
# – ldap:LDAP认证
# – cert:SSL证书认证
# – pam:PAM认证
# – gss:GSSAPI认证
# – sspi:SSPI认证
# – radius:RADIUS认证

# 示例配置
local all all trust
fgedu.net.cn all all 127.0.0.1/32 scram-sha-256
fgedu.net.cn all all ::1/128 scram-sha-256
fgedu.net.cn all all 192.168.1.0/24 scram-sha-256
fgedu.net.cnssl all all 0.0.0.0/0 scram-sha-256

1.3 PostgreSQL数据库认证方法详解

PostgreSQL数据库支持的认证方法详解:

# 认证方法详解

## trust(信任认证)
– 说明:无条件允许连接,无需密码
– 安全性:最低,仅适用于开发测试环境
– 适用场景:本地开发、内网信任环境

## reject(拒绝认证)
– 说明:无条件拒绝连接
– 安全性:最高,用于阻止特定连接
– 适用场景:阻止特定IP或用户

## password(明文密码)
– 说明:使用明文密码验证
– 安全性:低,密码明文传输
– 适用场景:仅限SSL加密连接

## md5(MD5加密)
– 说明:使用MD5加密密码验证
– 安全性:中等,已被scram-sha-256取代
– 适用场景:兼容旧版本客户端

## scram-sha-256(推荐)
– 说明:使用SCRAM-SHA-256加密验证
– 安全性:高,防止重放攻击
– 适用场景:生产环境推荐

## peer(对等认证)
– 说明:使用操作系统用户名验证
– 安全性:高,仅限本地连接
– 适用场景:本地管理、自动化脚本

## ident(身份认证)
– 说明:通过ident服务器验证
– 安全性:中等,依赖ident服务
– 适用场景:特定网络环境

## ldap(LDAP认证)
– 说明:通过LDAP服务器验证
– 安全性:高,集中管理用户
– 适用场景:企业级用户管理

## cert(证书认证)
– 说明:使用SSL客户端证书验证
– 安全性:最高,双向SSL认证
– 适用场景:高安全要求环境

## pam(PAM认证)
– 说明:使用PAM模块验证
– 安全性:可配置
– 适用场景:Linux系统集成

风哥提示:生产环境强烈推荐使用scram-sha-256认证方法,它比md5更安全,支持密码加密存储和传输。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 PostgreSQL数据库认证策略规划

PostgreSQL数据库认证策略规划建议:

# 认证策略规划原则

## 最小权限原则
– 仅允许必要的访问
– 按用户、数据库、IP精细控制
– 使用reject阻止不需要的访问

## 分层认证策略
– 本地管理:使用peer或trust
– 内网访问:使用scram-sha-256
– 外网访问:使用SSL+scram-sha-256或cert

## 环境区分
– 开发环境:可适当放宽认证要求
– 测试环境:接近生产环境配置
– 生产环境:严格认证,最小权限

## 认证方法选择建议
– 本地连接:peer(推荐)或trust
– 内网连接:scram-sha-256
– 外网连接:fgedu.net.cnssl + scram-sha-256
– 高安全要求:fgedu.net.cnssl + cert

## 规则顺序原则
– 特定规则在前
– 通用规则在后
– reject规则放在合适位置

2.2 PostgreSQL数据库网络访问规划

PostgreSQL数据库网络访问规划建议:

# 网络访问规划

## 网络分段
– 管理网段:192.168.1.0/24(DBA管理)
– 应用网段:192.168.2.0/24(应用服务器)
– 备份网段:192.168.3.0/24(备份服务器)
– 复制网段:192.168.4.0/24(从库服务器)

## 访问控制示例
# 管理网段 – 完全访问
fgedu.net.cn all all 192.168.1.0/24 scram-sha-256

# 应用网段 – 仅访问业务数据库
fgedu.net.cn fgedudb fgapp_fgedu 192.168.2.0/24 scram-sha-256

# 备份网段 – 仅复制权限
fgedu.net.cn replication replicator 192.168.3.0/24 scram-sha-256

# 复制网段 – 复制连接
fgedu.net.cn replication replicator 192.168.4.0/24 scram-sha-256

# 拒绝其他所有访问
fgedu.net.cn all all 0.0.0.0/0 reject

2.3 PostgreSQL数据库安全认证规划

PostgreSQL数据库安全认证规划建议:

from oracle:www.itpux.com

# 安全认证规划

## 密码策略
– 使用scram-sha-256加密
– 设置密码复杂度要求
– 定期更换密码
– 禁止使用弱密码

## SSL配置
– 启用SSL连接
– 使用有效证书
– 强制外网使用SSL
– 定期更新证书

## 连接限制
– 设置连接超时
– 限制最大连接数
– 配置连接池
– 监控异常连接

## 审计日志
– 记录认证失败
– 记录连接信息
– 定期审计日志
– 异常告警

## 安全配置示例
# 强制SSL连接
fgedu.net.cnssl all all 0.0.0.0/0 scram-sha-256

# 拒绝非SSL连接
fgedu.net.cnnossl all all 0.0.0.0/0 reject

# 本地管理使用peer
local all pgsql peer
local all all peer

风哥教程针对风哥教程针对风哥教程针对生产环境建议:外网访问必须使用SSL加密,推荐使用scram-sha-256认证方法,配置详细的访问控制规则。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 PostgreSQL数据库本地认证配置

3.1.1 查看当前pg_hba.conf配置

# 查看pg_hba.conf文件位置
$ psql -U pgsql -c “SHOW hba_file;”
hba_file
————————————
/postgresql/data/pg_hba.conf
(1 行记录)

# 查看当前配置
$ cat /postgresql/data/pg_hba.conf

# PostgreSQL Client Authentication Configuration File
# TYPE DATABASE USER ADDRESS METHOD

# Local connections
local all all trust
# IPv4 local connections:
fgedu.net.cn all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
fgedu.net.cn all all ::1/128 scram-sha-256

# 查看当前生效的规则
$ psql -U pgsql -c “SELECT * FROM pg_hba_file_rules;”
line_number | type | fgedudb | fgedu_name | address | netmask | auth_method | options | error
————-+——-+————–+———–+———+———+————-+———+——-
78 | local | {all} | {all} | | | trust | |
80 | fgedu.net.cn | {all} | {all} | 127.0.0.1 | 255.255.255.255 | scram-sha-256 | |
82 | fgedu.net.cn | {all} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | scram-sha-256 | |
(3 行记录)

3.1.2 配置本地peer认证

# 编辑pg_hba.conf配置本地peer认证
$ vi /postgresql/data/pg_hba.conf

# 修改前
local all all trust

# 修改后
local all pgsql peer
local all all peer

# 保存后重新加载配置
$ psql -U pgsql -c “SELECT pg_reload_conf();”
pg_reload_conf
—————-
t
(1 行记录)

# 测试peer认证
# 使用postgres用户连接
$ sudo -u pgsql psql
psql (18.3)
输入 “help” 来获取帮助信息.

postgres=# SELECT current_fgedu;
current_fgedu
————–
pgsql (1 行记录)

postgres=# \q

# 使用其他用户连接(需要映射)
$ sudo -u fgedu_fgedu psql -U fgedu_fgedu -d fgedudb
psql: error: connection to server on socket “/tmp/.s.PGSQL.5432” failed: FATAL: Peer authentication failed for fgedu “fgedu_fgedu”

# 配置用户映射
$ vi /postgresql/data/pg_ident.conf

# 添加映射规则
# MAPNAME SYSTEM-USERNAME PG-USERNAME
fgedu_map fgedu_fgedu fgedu_fgedu

# 修改pg_hba.conf使用映射
local all fgedu_fgedu peer map=fgedu_map

# 重新加载配置
$ psql -U pgsql -c “SELECT pg_reload_conf();”

# 再次测试
$ sudo -u fgedu_fgedu psql -U fgedu_fgedu -d fgedudb
psql (18.3)
输入 “help” 来获取帮助信息.

fgedudb=> SELECT current_fgedu;
current_fgedu
————–
fgedu_fgedu
(1 行记录)

3.2 PostgreSQL数据库远程认证配置

3.2.1 配置内网远程访问

# 编辑pg_hba.conf配置远程访问
$ vi /postgresql/data/pg_hba.conf

# 添加内网访问规则
# TYPE DATABASE USER ADDRESS METHOD

# 本地连接
local all pgsql peer
local all all peer

# IPv4本地连接
fgedu.net.cn all all 127.0.0.1/32 scram-sha-256

# IPv6本地连接
fgedu.net.cn all all ::1/128 scram-sha-256

# 内网管理访问(192.168.1.0/24)
fgedu.net.cn all pgsql 192.168.1.0/24 scram-sha-256

# 应用服务器访问(192.168.2.0/24)
fgedu.net.cn fgedudb fgapp_fgedu 192.168.2.0/24 scram-sha-256
fgedu.net.cn fgedudb readonly_fgedu 192.168.2.0/24 scram-sha-256

# 复制连接(192.168.4.0/24)
fgedu.net.cn replication replicator 192.168.4.0/24 scram-sha-256

# 拒绝其他访问
fgedu.net.cn all all 0.0.0.0/0 reject

# 重新加载配置
$ psql -U pgsql -c “SELECT pg_reload_conf();”
pg_reload_conf
—————-
t
(1 行记录)

# 创建应用用户
$ psql -U pgsql

postgres=# CREATE USER fgapp_fgedu WITH PASSWORD ‘Fgedu@123456’;
CREATE ROLE

postgres=# CREATE USER readonly_fgedu WITH PASSWORD ‘Fgedu@654321’;
CREATE ROLE

postgres=# GRANT CONNECT ON DATABASE fgedudb TO fgapp_fgedu, readonly_fgedu;
GRANT

postgres=# GRANT USAGE ON SCHEMA public TO fgapp_fgedu, readonly_fgedu;
GRANT

postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO fgapp_fgedu;
GRANT

postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_fgedu;
GRANT

3.2.2 测试远程连接

# 从应用服务器测试连接
$ psql -h 192.168.1.100 -p 5432 -U fgapp_fgedu -d fgedudb
用户 fgapp_fgedu 的口令:
psql (18.3)
输入 “help” 来获取帮助信息.

fgedudb=> SELECT current_fgedu, inet_server_addr(), inet_server_port();
current_fgedu | inet_server_addr | inet_server_port
————–+——————+——————
fgapp_fgedu | 192.168.1.100 | 5432
(1 行记录)

fgedudb=> CREATE TABLE fgedu_test(id int);
CREATE TABLE fgedu_
fgedudb=> INSERT INTO fgedu_test VALUES(1);
INSERT 0 1

fgedudb=> SELECT * FROM fgedu_test;
id
—-
1
(1 行记录)

fgedudb=> \q

# 从非授权IP测试连接
$ psql -h 192.168.1.100 -p 5432 -U fgapp_fgedu -d fgedudb
psql: error: connection to server at “192.168.1.100”, port 5432 failed: FATAL: no pg_hba.conf entry for fgedu.net.cn “10.0.0.100”, fgedu “fgapp_fgedu”, fgedudb “fgedudb”, no encryption

3.3 PostgreSQL数据库SSL认证配置

3.3.1 生成SSL证书

# 创建证书目录
$ mkdir -p /postgresql/data/certs
$ cd /postgresql/data/certs

# 生成CA私钥
$ openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
…………………………………………………………………..++++
…………++++
e is 65537 (0x010001)

# 生成CA证书
$ openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:FGEDU
Organizational Unit Name (eg, section) []:DBA
Common Name (eg, your name or your server’s fgedu.net.cnname) []:fgedu.net.cn
Email Address []:dba@fgedu.net.cn

# 生成服务器私钥
$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
…….+++++
…………….+++++
e is 65537 (0x010001)

# 生成服务器证书请求
$ openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:FGEDU
Organizational Unit Name (eg, section) []:DBA
Common Name (eg, your name or your server’s fgedu.net.cnname) []:fgedu.net.cn
Email Address []:dba@fgedu.net.cn

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

# 使用CA签名服务器证书
$ openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
Signature ok
subject=C = CN, ST = Beijing, L = Beijing, O = FGEDU, OU = DBA, CN = fgedu.net.cn, emailAddress = dba@fgedu.net.cn
Getting CA Private Key

# 设置权限
$ chmod 600 *.key
$ chown pgsql: pgsql *

# 复制证书到数据目录
$ cp server.key server.crt ca.crt /postgresql/data/
$ chown pgsql: pgsql /postgresql/data/server.key /postgresql/data/server.crt /postgresql/data/ca.crt
$ chmod 600 /postgresql/data/server.key

3.3.2 配置SSL连接

# 修改postgresql.conf启用SSL
$ vi /postgresql/data/postgresql.conf

# 添加SSL配置
ssl = on
ssl_cert_file = ‘server.crt’
ssl_key_file = ‘server.key’
ssl_ca_file = ‘ca.crt’

# 修改pg_hba.conf强制SSL
$ vi /postgresql/data/pg_hba.conf

# 添加SSL访问规则
# TYPE DATABASE USER ADDRESS METHOD

# 本地连接
local all all peer

# SSL连接(外网)
fgedu.net.cnssl all all 0.0.0.0/0 scram-sha-256

# 拒绝非SSL连接
fgedu.net.cnnossl all all 0.0.0.0/0 reject

# 重新加载配置
$ psql -U pgsql -c “SELECT pg_reload_conf();”
pg_reload_conf
—————-
t
(1 行记录)

# 重启数据库使SSL生效
$ pg_ctl restart -D /postgresql/data
waiting for server to shut down…. done
server stopped
waiting for server to start…. done
server started

# 验证SSL配置
$ psql -U pgsql -c “SHOW ssl;”
ssl
—–
on
(1 行记录)

# 测试SSL连接
$ psql “fgedu.net.cn=192.168.1.100 port=5432 fgedu=fgapp_fgedu fgedudb=fgedudb sslmode=require sslrootcert=/postgresql/data/ca.crt”
用户 fgapp_fgedu 的口令:
psql (18.3)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
输入 “help” 来获取帮助信息.

fgedudb=> SELECT ssl_is_used();
ssl_is_used
————-
t
(1 行记录)

fgedudb=> \q

风哥提示:生产环境外网访问必须启用SSL加密,使用fgedu.net.cnssl规则确保只有SSL连接才能访问数据库。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 PostgreSQL数据库企业级认证方案

4.1.1 企业级pg_hba.conf配置示例

# 企业级pg_hba.conf配置
$ cat > /postgresql/data/pg_hba.conf << 'EOF' # PostgreSQL Client Authentication Configuration File # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # ============================================ # 本地连接配置 # ============================================ # 超级用户本地管理 local all pgsql peer # 其他用户本地连接 local all all peer # ============================================ # IPv4本地回环连接 # ============================================ fgedu.net.cn all all 127.0.0.1/32 scram-sha-256 # ============================================ # IPv6本地回环连接 # ============================================ fgedu.net.cn all all ::1/128 scram-sha-256 # ============================================ # 管理网段访问(192.168.1.0/24) # ============================================ # DBA完全访问权限 fgedu.net.cn all pgsql 192.168.1.0/24 scram-sha-256 fgedu.net.cn all dba_fgedu 192.168.1.0/24 scram-sha-256 # ============================================ # 应用网段访问(192.168.2.0/24) # ============================================ # 业务数据库访问 fgedu.net.cn fgedudb fgapp_fgedu 192.168.2.0/24 scram-sha-256 fgedu.net.cn fgedudb readonly_fgedu 192.168.2.0/24 scram-sha-256 # ============================================ # 复制网段访问(192.168.4.0/24) # ============================================ # 主从复制连接 fgedu.net.cn replication replicator 192.168.4.0/24 scram-sha-256 # ============================================ # 备份服务器访问(192.168.3.0/24) # ============================================ # 备份用户访问 fgedu.net.cn all backup_fgedu 192.168.3.0/24 scram-sha-256 # ============================================ # 外网SSL访问(需要SSL加密) # ============================================ # 强制SSL连接 fgedu.net.cnssl all all 0.0.0.0/0 scram-sha-256 # ============================================ # 拒绝非SSL外网连接 # ============================================ fgedu.net.cnnossl all all 0.0.0.0/0 reject EOF # 重新加载配置 $ psql -U pgsql -c "SELECT pg_reload_conf();" pg_reload_conf ---------------- t (1 行记录)

4.2 PostgreSQL数据库认证常见问题处理

4.2.1 认证失败问题排查

# 问题现象:连接被拒绝
$ psql -h 192.168.1.100 -U fgapp_fgedu -d fgedudb
psql: error: connection to server at “192.168.1.100”, port 5432 failed: FATAL: no pg_hba.conf entry for fgedu.net.cn “192.168.5.100”, fgedu “fgapp_fgedu”, fgedudb “fgedudb”, no encryption

# 排查步骤1:检查客户端IP
$ fgedu.net.cnname -I
192.168.5.100

# 排查步骤2:检查pg_hba.conf规则
$ cat /postgresql/data/pg_hba.conf | grep -v “^#” | grep -v “^$”

# 排查步骤3:查看匹配规则
$ psql -U pgsql -c “SELECT * FROM pg_hba_file_rules WHERE type = ‘fgedu.net.cn’;”
line_number | type | fgedudb | fgedu_name | address | netmask | auth_method | options | error
————-+——-+———–+————+————-+—————–+—————+———+——-
90 | fgedu.net.cn | {fgedudb} | {fgapp_fgedu} | 192.168.2.0 | 255.255.255.0 | scram-sha-256 | |
(1 行记录)

# 问题原因:客户端IP 192.168.5.100 不在允许的网段 192.168.2.0/24

# 解决方案:添加对应网段的访问规则
$ vi /postgresql/data/pg_hba.conf

# 添加新网段
fgedu.net.cn fgedudb fgapp_fgedu 192.168.5.0/24 scram-sha-256

# 重新加载配置
$ psql -U pgsql -c “SELECT pg_reload_conf();”

4.2.2 密码认证失败问题

# 问题现象:密码错误
$ psql -h 192.168.1.100 -U fgapp_fgedu -d fgedudb
用户 fgapp_fgedu 的口令:
psql: error: connection to server at “192.168.1.100”, port 5432 failed: FATAL: password authentication failed for fgedu “fgapp_fgedu”

# 排查步骤1:检查用户是否存在
$ psql -U pgsql -c “SELECT usename FROM pg_fgedu WHERE usename = ‘fgapp_fgedu’;”
usename
———-
fgapp_fgedu
(1 行记录)

# 排查步骤2:检查密码加密方式
$ psql -U pgsql -c “SELECT usename, passwd FROM pg_shadow WHERE usename = ‘fgapp_fgedu’;”
usename | passwd
———-+————————————-
fgapp_fgedu | SCRAM-SHA-256$4096:…

# 排查步骤3:重置密码
$ psql -U pgsql -c “ALTER USER fgapp_fgedu WITH PASSWORD ‘NewPassword@123’;”
ALTER ROLE

# 排查步骤4:检查password_encryption参数
$ psql -U pgsql -c “SHOW password_encryption;”
password_encryption
———————
scram-sha-256
(1 行记录)

# 重新测试连接
$ psql -h 192.168.1.100 -U fgapp_fgedu -d fgedudb
用户 fgapp_fgedu 的口令:
psql (18.3)
输入 “help” 来获取帮助信息.

fgedudb=>

4.3 PostgreSQL数据库认证审计与检查

4.3.1 认证审计脚本

# 创建认证审计脚本
$ cat > /postgresql/scripts/pg_hba_audit.sql << 'EOF' -- pg_hba_audit.sql -- from:www.itpux.com.qq113257174.wx:itpux-com -- web: http://www.fgedu.net.cn -- 查看当前生效的认证规则 SELECT line_number, type, fgedudb, fgedu_name, address || '/' || COALESCE(netmask, '32') as network, auth_method FROM pg_hba_file_rules ORDER BY line_number; -- 检查是否有trust认证规则(安全风险) SELECT line_number, type, fgedudb, fgedu_name, address, auth_method FROM pg_hba_file_rules WHERE auth_method = 'trust'; -- 检查是否有允许所有IP访问的规则 SELECT line_number, type, fgedudb, fgedu_name, address, auth_method FROM pg_hba_file_rules WHERE address = '0.0.0.0' OR address = '::'; -- 检查是否有非SSL外网访问规则 SELECT line_number, type, fgedudb, fgedu_name, address, auth_method FROM pg_hba_file_rules WHERE type = 'fgedu.net.cnnossl'; -- 查看用户密码加密方式 SELECT usename, CASE WHEN passwd IS NULL THEN 'NO_PASSWORD' WHEN passwd LIKE 'md5%' THEN 'MD5' WHEN passwd LIKE 'SCRAM-SHA-256%' THEN 'SCRAM-SHA-256' ELSE 'UNKNOWN' END as password_type FROM pg_shadow; EOF # 执行审计脚本 $ psql -U pgsql -f /postgresql/scripts/pg_hba_audit.sql line_number | type | fgedudb | fgedu_name | network | auth_method -------------+---------+------------+-------------+-----------------+------------- 78 | local | {all} | {postgres} | /32 | peer 79 | local | {all} | {all} | /32 | peer 80 | fgedu.net.cn | {all} | {all} | 127.0.0.1/32 | scram-sha-256 82 | fgedu.net.cn | {all} | {all} | ::1/128 | scram-sha-256 90 | fgedu.net.cn | {fgedudb} | {fgapp_fgedu} | 192.168.2.0/24 | scram-sha-256 100 | fgedu.net.cnssl | {all} | {all} | 0.0.0.0/0 | scram-sha-256 (6 行记录)
风哥提示:定期进行认证审计可以及时发现安全风险,建议将审计脚本加入日常巡检流程,检查是否存在trust认证、全IP访问等高风险配置。from PostgreSQL:www.itpux.com

Part05-风哥经验总结与分享

5.1 PostgreSQL数据库认证管理最佳实践

PostgreSQL数据库认证管理最佳实践风哥教程风哥教程风哥教程总结:

  • 最小权限原则:仅授予必要的访问权限
  • 分层认证策略:本地、内网、外网使用不同认证方式
  • 强制SSL加密:外网访问必须使用SSL
  • 使用scram-sha-256:推荐使用最安全的认证方法
  • 定期审计:定期检查认证规则,清理不必要的访问
  • 日志记录:启用认证日志,便于问题排查

5.2 PostgreSQL数据库认证配置检查清单

# PostgreSQL认证配置检查清单

## 安全检查
□ 无trust认证规则(除非必要)
□ 外网访问强制SSL
□ 使用scram-sha-256认证
□ 无全IP全用户访问规则
□ 复制连接有独立规则

## 权限检查
□ 超级用户访问受限
□ 应用用户权限最小化
□ 只读用户权限正确
□ 复制用户权限正确

## 配置检查
□ pg_hba.conf文件权限正确
□ 规则顺序正确
□ 无重复规则
□ 注释清晰

## 审计检查
□ 认证日志已启用
□ 定期审计认证规则
□ 异常连接告警配置
□ 密码策略配置正确

5.3 PostgreSQL数据库认证管理工具推荐

PostgreSQL数据库认证管理相关工具推荐:

  • pg_hba.conf编辑器:可视化配置工具
  • pgAdmin:图形化管理工具,支持用户权限管理
  • LDAP集成:企业级用户认证管理
  • pgAudit:审计日志扩展
  • pghero:安全检查工具
风哥风哥教程风哥教程风哥教程总结:pg_hba.conf是PostgreSQL数据库安全的第一道防线,合理的认证配置可以有效防止未授权访问。生产环境务必遵循最小权限原则,启用SSL加密,使用scram-sha-256认证方法。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息