1. 课程导入与安全治理全景

PostgreSQL 作为开源关系型数据库的代表,被广泛用于金融、电信、政务、互联网等对数据敏感度极高的场景。然而,很多团队在部署 PostgreSQL 时,往往把注意力集中在性能调优、高可用和备份恢复上,安全治理则被简化为“设置一个强密码”或“限制一下 IP”。这种认知偏差,正是数据泄露、越权访问、审计缺失等问题的根源。本课程要建立的,是一套覆盖身份、权限、数据、审计、加密与合规的完整安全治理体系,而不是零散的安全技巧集合。

什么是 PostgreSQL 安全治理

PostgreSQL 安全治理,是指围绕 PostgreSQL 数据库实例及其承载的数据资产,通过制度、流程与技术手段,对谁能访问、能访问什么、能做什么操作、操作是否可追溯、数据是否受保护这五个核心问题给出持续、可验证的答案。它不等同于“打补丁”,也不等同于“买一个安全产品”,而是一套贯穿数据库全生命周期的管理活动。

从对象上看,治理范围包括:数据库实例本身、集群角色与用户、数据库与模式、表与视图、函数与存储过程、外部表与扩展、备份文件、日志与审计记录、连接链路以及密钥与证书。从过程上看,它覆盖规划、部署、配置、运行、变更、审计、应急与下线各个阶段。任何一个环节的缺失,都可能让其他环节的加固失效。

安全治理的目标与核心原则

安全治理的目标可以归纳为四点:保密性,确保数据只被授权主体读取;完整性,确保数据不被未授权篡改;可用性,确保授权用户在需要时能正常访问;可审计性,确保任何敏感操作都有记录、可追溯、可定责。这四个目标之间并非总是同向,例如过度收紧权限会影响可用性,因此治理的本质是在风险与效率之间做出有依据的权衡。

围绕这些目标,PostgreSQL 安全治理应遵循以下核心原则:

  • 最小权限:任何角色只拥有完成其职责所必需的最小权限,默认拒绝,按需授予。
  • 职责分离:系统管理、安全审计、业务开发、数据使用等角色相互制衡,避免超级用户权限被滥用。
  • 纵深防御:网络层、实例层、数据库层、对象层、数据层多道防线叠加,单点失效不导致整体失守。
  • 默认安全:新装实例应关闭不必要的监听、限制默认权限、启用必要日志,而不是先开放再补救。
  • 可审计与可追溯:关键操作留痕,日志集中管理,审计记录不可被普通用户篡改。
  • 持续治理:安全不是一次性配置,而是随版本升级、业务变更、人员流动持续调整的过程。

治理框架全景

为了把上述原则落地,本课程采用一个分层治理框架,自下而上分为五个层次,并与管理支撑和合规要求相衔接。下图展示了该框架的结构与各层之间的支撑关系。

PostgreSQL 安全治理框架全景 合规与制度支撑:等级保护 · 数据安全法 · 行业规范 · 内部安全策略 ① 身份与访问层 角色体系 · 认证方式(scram-sha-256/证书/LDAP)· pg_hba.conf 连接控制 · 连接加密 ② 权限与对象层 GRANT/REVOKE · 模式与对象权限 · 默认权限 · 行级安全 RLS · 安全定义函数 ③ 数据保护层 透明加密 · 列级加密 · 脱敏视图 · 备份加密 · 密钥与证书管理 ④ 审计与监控层 pgaudit · 日志采集 · 异常行为告警 · 审计记录防篡改 · 定期复核 ⑤ 运维与应急层 补丁与版本管理 · 配置基线 · 变更审批 · 应急响应 · 恢复演练 治理目标:保密性 · 完整性 · 可用性 · 可审计性

这五层并非孤立存在。身份与访问层决定“门是否关好”,权限与对象层决定“进门后能进哪些房间”,数据保护层决定“房间里的保险柜是否上锁”,审计与监控层决定“是否有人记录并发现异常”,运维与应急层决定“出现问题时能否快速响应与恢复”。合规与制度支撑则贯穿始终,为各层提供依据和约束。

从原则到落地:一个最小示例

以“为业务系统创建一个只读报表账号”为例,可以直观看到治理框架如何落地。假设业务库为 appdb,报表用户为 rpt_user,只允许从 10.20.30.0/24 网段通过密码认证连接,且只能查询 report 模式下的表。

-- 1. 创建角色,禁止其创建数据库和角色
CREATE ROLE rpt_user LOGIN PASSWORD '示例强密码' NOSUPERUSER NOCREATEDB NOCREATEROLE;

-- 2. 授予连接与模式使用权限
GRANT CONNECT ON DATABASE appdb TO rpt_user;
GRANT USAGE ON SCHEMA report TO rpt_user;

-- 3. 授予现有表的只读权限
GRANT SELECT ON ALL TABLES IN SCHEMA report TO rpt_user;

-- 4. 设置默认权限,保证后续新建表同样只读
ALTER DEFAULT PRIVILEGES IN SCHEMA report GRANT SELECT ON TABLES TO rpt_user;

-- 5. 回收 public 模式的默认权限(PostgreSQL 15 之前需显式处理)
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

在 pg_hba.conf 中增加一行,限定来源网段与认证方式:

host    appdb    rpt_user    10.20.30.0/24    scram-sha-256

执行后可通过以下方式验证:使用 rpt_user 从允许网段连接,执行 SELECT * FROM report.sales_summary LIMIT 5; 应成功;执行 INSERT INTO report.sales_summary VALUES (...); 应返回权限不足错误;从非允许网段连接应被拒绝。这三步验证分别对应权限、对象和网络三个层面的控制是否生效。示例中的密码、网段和表名均为教学假设,实际部署时应替换为真实值并纳入配置管理。

课程学习路径

本课程共 30 章,按照“认知—加固—审计—运营”的主线推进。前段帮助建立治理框架与风险意识,中段逐层展开身份认证、权限模型、行级安全、数据加密、审计日志等关键技术,后段聚焦备份安全、补丁管理、应急响应、合规检查与持续治理。学习时建议边学边在测试实例上复现,每完成一层加固,就用查询权限、尝试越权、检查日志三种方式验证效果。安全治理的成效不体现在配置有多复杂,而体现在攻击面是否收敛、异常是否可发现、责任是否可追溯。

学习本课程时,请准备一个独立的 PostgreSQL 测试实例(建议 14 及以上版本),所有权限、加密、审计操作先在测试环境验证,再按变更流程应用到生产环境。