type
Post
status
Published
date
May 21, 2026
slug
summary
数据库基线核查checklist
tags
数据库
等保
category
技术分享
icon
password
一、身份鉴别
1.1 账号管理
PostgreSQL 中每个角色(role)名称在集群内必须是唯一的,这是由系统强制保证的。但你可以通过以下 SQL 查询确认所有具有登录权限的角色:

PostgreSQL 的密码存储在
pg_authid 系统表中(需超级用户权限):
1.2 密码复杂度
PostgreSQL 原生不支持密码复杂度策略,但可通过以下扩展实现:
方法一:安装 pg_password_policy 扩展(第三方)
存在复杂度设置的示例:
方法二:使用 pam + pam_pwquality(通过 PAM 认证)
如果进行了PAM配置,则配置内容基本如下:
1.3 登录失败处理
在 PostgreSQL 中,原生并不直接提供“账户锁定”或“登录失败次数限制”等传统意义上的登录失败处理机制(如 Oracle、SQL Server 或 Windows AD 中的账户锁定策略)。但是可以通过第三方安全工具实现。
1.4 远程登录管理

*:允许监听任意IPv4地址,也可以将其替换为指定IPv4

常见的 “认证方式” 取值:
scram-sha-256:推荐的安全加密认证方式,比md5更安全。
md5:使用 MD5 哈希密码认证(兼容性较好,但安全性不如 SCRAM)。
peer/ident:仅适用于本地连接,通过操作系统用户名验证。
trust:无需密码直接允许连接(仅在绝对可信的内网环境中临时使用,生产环境禁止)。
1.5 双因素认证
PostgreSQL 原生不直接支持双因素认证(2FA / MFA),但可以通过 PAM配置来集成 2FA。
拿 Google Authenticator 举例,如果安装了 Google Authenticator PAM 模块(Linux) 则可以在
/etc/pam.d/postgresql 中找到如下的配置:二、访问控制
2.1 账户权限划分
结合 1.1账号管理的内容可以进行可登录账号的权限查看是否存在多种类型的可登录账户用以划分权限👇:

字段名 | 值 | 含义 |
rolname | postgres | 角色名称,这是 PostgreSQL 安装时默认创建的超级用户 |
rolsuper | t | 该角色是超级用户,拥有数据库的所有权限 |
rolcreaterole | t | 允许该角色创建其他数据库角色 |
rolcreatedb | t | 允许该角色创建新的数据库 |
rolcanlogin | t | 该角色允许登录数据库(这也是你查询的过滤条件) |
rolreplication | t | 该角色拥有流复制权限,可以用于主备复制场景 |
rolconnlimit | -1 | 对该角色的并发连接数无限制( -1 表示不限制) |
rolpassword | ***\* | 该角色已设置密码(出于安全考虑,密码显示为星号) |
rolbypassrls | t | 该角色可以绕过行级安全策略(RLS) |
2.2 默认账户/口令
PostgreSQL 在
initdb 初始化集群时,会创建一个与操作系统当前用户同名的角色(通常是 postgres)。该角色默认具有 SUPERUSER 权限,且无密码(依赖 peer 或 ident 认证本地登录)。结合 1.2 密码复杂度 判断是否存在默认口令、默认账户的情况。

2.3 共享账户
最佳判断方式是通过日志进行分析👇:

2.4 最小权限原则
结合 2.1 账户权限划分 判断账户权限是否按照最小权限原则进行权限划分。
检查
PUBLIC 角色是否被过度授权,PUBLIC 是隐式包含所有角色的组,对其授权等于对所有人授权。

2.5 由授权主体配置访问控制策略
检查授权主体,仅少数可信角色(如
postgres、db_sec_admin)具备授权能力,普通用户拥有 CREATEROLE权限,可自行授权 ,这违反了“由授权主体配置”:
2.6 访问控制的粒度
结合2.4 最小权限原则 中角色权限查看的信息进行判断,
PUBLIC 相当于“所有用户”,对其授权等于放弃访问控制粒度,任何返回结果均视为不符合细粒度要求。2.7 强访问控制
除极少数审计账号外,不应授予普通用户
BYPASSRLS。
三、安全审计
3.1 安全审计功能

参数 | 推荐值 | 作用 |
logging_collector | on | 启用日志收集 |
log_connections | on | 记录登录 |
log_disconnections | on | 记录登出 |
log_statement | 'ddl' 或 'mod' | - none:不记录- ddl:记录 DDL(CREATE/ALTER/DROP)- mod:DDL + DML(INSERT/UPDATE/DELETE)- all:记录所有 SQL(含 SELECT,慎用) |
log_line_prefix | '%t [%p]: user=%u,db=%d,host=%h,app=%a ' | 必须包含 %u(用户)、%h(IP)、%d(数据库) |
log_min_duration_statement | 1000(毫秒) | 可用于记录慢查询,辅助审计异常操作 |
3.2 审计记录信息
3.1 审计功能中的 log_line_prefix 参数提供了审计日志中提供的审计信息。
3.3 审计记录保护
日志是否防篡改:日志文件权限为
600,仅 DBA 可读。
四、入侵防范
4.1 限制终端接入
结合 1.3 远程登陆管理的检查信息进行分析。
4.2 补丁更新

各版本最新小版本对照表(截至 2026 年 2 月 2 日),2026 年 2 月 13 日可能发布 16.3、15.16 等 👇,数据库版本达到最新小版本即为安全补丁已经更新到最新状态:
大版本 | 当前最新小版本 | 发布日期 | 支持截止时间 | 是否仍在支持 |
16 | 16.2 | 2024-02-08 | 2028-11 | ✅ 是 |
15 | 15.15 | 2025-11-13 | 2027-11 | ✅ 是 |
14 | 14.11 | 2024-02-08 | 2026-11 | ✅ 是(即将 EOL) |
13 | 13.13 | 2023-11-09 | 2023-11 | ❌ 已停止支持 |
12 | 12.17 | 2023-11-09 | 2023-11 | ❌ 已停止支持 |
≤11 | — | — | 已过期多年 | ❌ 高危 |
五、可信验证
5.1 数据传输过程中的保密性与完整性
要求 | PostgreSQL 实现方式 |
通信保密性 | SSL/TLS + scram-sha-256 |
通信完整性 | TLS 内置 MAC 校验 |




5.2 数据存储过程中的保密性与完整性
配合数据库敏感信息的加密存储情况进行判断。

要求 | PostgreSQL 实现方式 |
存储保密性 | LUKS / 云盘加密 / 列加密( pgcrypto) |
存储完整性 | data_checksums = on + WAL |
六、数据备份恢复
6.1 本地备份
参数 | 合规值 | 说明 |
wal_level | replica 或 logical | 必须 ≥ replica 才能归档 |
archive_mode | on | 启用归档 |
archive_command | 非空(如 test ! -f /backup/wal/%f && cp %p /backup/wal/%f) | 实际归档命令 |
Pasted image 20260203163259.png
配合查找数据库系统中是否存在备份文件结合进行判断。
6.2 异地备份
访谈,是否存在异地备份,且备份是否符合异地备份要求。
6.3 冗余配置
访谈,是否存在冗余配置,且配置是否符合冗余配置要求。