安全与权限
pg_hba.conf、Role、SSL、RLS。
35 分钟
角色、权限与日常管理
PG 用 ROLE 统一用户与组;权限可细化到表、列、schema。与 /roadmaps/postgresql-dba 管理节点对齐。
学习目标
- 创建角色并授予
CONNECT、USAGE、SELECT等权限 - 使用
\du、\dp审计权限 - 掌握
VACUUM、ANALYZE与连接数查看
核心概念
角色与授权
CREATE ROLE app_read LOGIN PASSWORD 'readpass';
CREATE DATABASE codeforge_pg OWNER dba;
\c codeforge_pg
CREATE SCHEMA app AUTHORIZATION dba;
GRANT USAGE ON SCHEMA app TO app_read;
GRANT SELECT ON ALL TABLES IN SCHEMA app TO app_read;
ALTER DEFAULT PRIVILEGES IN SCHEMA app
GRANT SELECT ON TABLES TO app_read;
只读账号不给 CREATE、INSERT;应用账号与 DBA 超级用户分离。
日常巡检 SQL
SELECT count(*) FROM pg_stat_activity;
SELECT datname, numbackends FROM pg_stat_database;
SELECT schemaname, relname, n_live_tup, last_vacuum, last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 10;
# 维护(低峰执行)
VACUUM (VERBOSE, ANALYZE) app.cf_track;
pg_hba.conf 片段
# TYPE DATABASE USER ADDRESS METHOD
host codeforge_pg app_read 10.0.0.0/8 scram-sha-256
改 pg_hba.conf 后需 SELECT pg_reload_conf(); 或重启实例。
与 MySQL/Spring Boot 对照
| 项 | PostgreSQL | MySQL 8 |
|---|---|---|
| 用户模型 | ROLE(可 LOGIN) | USER |
| 授权 | GRANT ON schema/table | GRANT ON db.table |
| 只读 | GRANT SELECT | GRANT SELECT |
| 维护 | VACUUM / autovacuum | 无等价(InnoDB purge 自动) |
| Spring 用户 | spring.datasource.username | 同左,换驱动即可 |
本站 MySQL 应用账号通常具备 DDL 迁移权限(Flyway);PG 生产应拆 迁移账号 与 运行时账号。