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
- 位于数据目录($PGDATA)中
- 按顺序匹配规则,首次匹配生效
- 修改后需要重新加载配置(pg_reload_conf)
- 支持多种认证方法
- 支持主机名、IP地址、CIDR格式
1.2 PostgreSQL数据库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系统集成
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
Part03-生产环境项目实施方案
3.1 PostgreSQL数据库本地认证配置
3.1.1 查看当前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认证
$ 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 配置内网远程访问
$ 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连接
$ 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
Part04-生产案例与实战讲解
4.1 PostgreSQL数据库企业级认证方案
4.1.1 企业级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 行记录)
Part05-风哥经验总结与分享
5.1 PostgreSQL数据库认证管理最佳实践
PostgreSQL数据库认证管理最佳实践风哥教程风哥教程风哥教程总结:
- 最小权限原则:仅授予必要的访问权限
- 分层认证策略:本地、内网、外网使用不同认证方式
- 强制SSL加密:外网访问必须使用SSL
- 使用scram-sha-256:推荐使用最安全的认证方法
- 定期审计:定期检查认证规则,清理不必要的访问
- 日志记录:启用认证日志,便于问题排查
5.2 PostgreSQL数据库认证配置检查清单
## 安全检查
□ 无trust认证规则(除非必要)
□ 外网访问强制SSL
□ 使用scram-sha-256认证
□ 无全IP全用户访问规则
□ 复制连接有独立规则
## 权限检查
□ 超级用户访问受限
□ 应用用户权限最小化
□ 只读用户权限正确
□ 复制用户权限正确
## 配置检查
□ pg_hba.conf文件权限正确
□ 规则顺序正确
□ 无重复规则
□ 注释清晰
## 审计检查
□ 认证日志已启用
□ 定期审计认证规则
□ 异常连接告警配置
□ 密码策略配置正确
5.3 PostgreSQL数据库认证管理工具推荐
PostgreSQL数据库认证管理相关工具推荐:
- pg_hba.conf编辑器:可视化配置工具
- pgAdmin:图形化管理工具,支持用户权限管理
- LDAP集成:企业级用户认证管理
- pgAudit:审计日志扩展
- pghero:安全检查工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
