PostgreSQL / PGSQL DDL审核工具

DeltaScope 是一个离线优先的 PostgreSQL DDL审核工具,用于 PG 表结构变更审核。它审核 CREATE TABLE、ALTER TABLE、GRANT 等语句,覆盖表结构变更、权限分配、复合类型生命周期和扩展生命周期。无需连接数据库。

工作原理

使用 --dialect postgresql 传入 PostgreSQL SQL 语句,DeltaScope 解析语句并评估所有适用规则。

$ deltascope audit --dialect postgresql \
    --sql "GRANT ALL PRIVILEGES ON TABLE users TO analyst;"

Verdict: review
Statements: 1
Blockers:   0
Warnings:   1
Notices:    1

Statement 1: GRANT TABLE
- [notice]  ddl.pg.grant.table_privilege.notice: granting privilege on table "users"
- [warning] ddl.pg.grant.table_privilege.all.warn: granting ALL PRIVILEGES is broader than needed

PostgreSQL DDL 审核覆盖范围

PG 表结构变更审核在 CI 中使用

# 审核一个 PostgreSQL 迁移文件
deltascope audit \
  --dialect postgresql \
  --file ./migrations/20260409_add_column.sql \
  --format github-actions \
  --fail-on warning

支持的输出格式:jsongithub-actionssarifgitlab-codequalitytext

DeltaScope 不是什么

常见问题

需要连接 PostgreSQL 数据库吗?
不需要。DeltaScope 离线解析 SQL 文本,不需要网络连接。可选的元数据感知模式可以连接数据库读取表统计信息,但这不是必须的。
支持哪些 PostgreSQL DDL 语句?
CREATE TABLE(含约束、外键、CHECK 子句)、ALTER TABLE(增删改列、重命名)、GRANT 表权限、复合类型生命周期、扩展生命周期、DROP TABLE、TRUNCATE TABLE、CREATE VIEW。
ddl.pg.grant.table_privilege 规则是干什么的?
它审核 GRANT 表权限语句。ddl.pg.grant.table_privilege.notice 对所有表权限授予发出提醒。ddl.pg.grant.table_privilege.all.warn 对 ALL PRIVILEGES 授予发出警告,因为 ALL 通常比实际需要的权限更宽泛。
可以和 MySQL 审核一起使用吗?
可以。通过 --dialect postgresql--dialect mysql 切换方言。引擎、配置格式和 CI 集成在两种方言之间完全一致。
和 pgAudit 有什么区别?
pgAudit 是 PostgreSQL 扩展,在 SQL 执行后记录活动。DeltaScope 是预执行的静态分析器。两者互补:用 DeltaScope 在部署前发现风险,用 pgAudit 在部署后观察数据库活动。