跳转到正文
报告库
用途分类 / 数据分析

Postgresql Table Design Skill 安全审计

作者说它能做什么(原文)

Use this skill when designing or reviewing a PostgreSQL-specific schema. Covers best-practices, data types, indexing, constraints, performance patterns, and advanced features

第三方安全检查结论

先别安装或运行

已检查文件
2
发现的风险
3
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 1 项风险
中风险

把事务回滚描述成“安全测试”忽略了 ALTER TABLE 的生产锁风险

原文依据:2 处
发现了什么

指导将 `BEGIN; ALTER TABLE...; ROLLBACK;` 表述为安全测试,但事务回滚只能撤销大多数结构变化,不能避免 `ALTER TABLE` 获取强锁、阻塞其他会话或执行耗时扫描。主文件又明确把该 Skill 用于在线数据库变更。

为什么需要注意

若在繁忙的生产数据库中测试,操作即使最终回滚,也可能阻塞读写、堆积连接并造成服务超时。

主文件明确将在线、无停机的数据库变更纳入用途,而详细指导把可回滚事务称为“安全测试”。回滚能撤销多数 DDL 结果,但可见内容没有提醒 `ALTER TABLE` 仍可能获取强锁、阻塞会话或进行耗时工作。因此在生产库照做存在可用性风险。用户可要求作者补充锁级别、超时、预演和维护窗口条件。

SKILL.md:13来自说明文档打开原文件
- Deciding whether and how to partition a large table, or how to store semi-structured data.- Planning a schema change on a live database without downtime.
查看另外 1 个位置
references/details.md:62来自说明文档打开原文件
### Safe schema evolution- **Transactional DDL**: most DDL operations can run in transactions and be rolled back—`BEGIN; ALTER TABLE...; ROLLBACK;` for safe testing.- **Concurrent index creation**: `CREATE INDEX CONCURRENTLY` avoids blocking writes but can't run in transactions.- **Volatile defaults cause rewrites**: adding `NOT NULL` columns with volatile defaults (e.g., `now()`, `gen_random_uuid()`) rewrites entire table. Non-volatile defaults are fast.
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 1 项风险
中风险

批量加载建议包含未限定环境的删除索引操作

原文依据:1 处
发现了什么

为提高批量加载速度,参考文件直接建议“drop index, load data, recreate indexes”,但没有把它限定在维护窗口或可重建的暂存表,也没有要求在加载失败后保证恢复索引。删除索引是持久的数据库结构变更。

为什么需要注意

若在生产表上照做,查询可能显著变慢;父表更新或删除可能出现更严重的锁等待。若任务在重建前失败,性能保护会持续缺失。

这是面向插入密集型工作负载的直接建议;删除索引属于持久的数据库结构变更。上下文确实是批量加载优化,但没有把操作限制于暂存表或维护窗口,也没有说明加载失败时如何确保重建。若代理把该建议应用到生产表,查询性能、唯一性保障或运维恢复可能受影响。用户可要求只在明确批准的表和维护流程中执行,并在删除前确认索引用途。

references/details.md:46来自说明文档打开原文件
### Insert-heavy workloads- **Minimize indexes**—only create what you query; every index slows inserts.- **Use `COPY` or multi-row `INSERT`** instead of single-row inserts.- **UNLOGGED tables** for rebuildable staging data—much faster writes.- **Defer index creation** for bulk loads—>drop index, load data, recreate indexes.- **Partition by time/hash** to distribute load. **TimescaleDB** automates partitioning and compression of insert-heavy data.- **Use a natural key for primary key** such as a (timestamp, device_id) if enforcing global uniqueness is important many insert-heavy tables don't need a primary key at all.
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
高风险

示例行级安全策略可能信任可由数据库会话伪造的用户 ID

原文依据:1 处
发现了什么

指导建议把行所有者与 `current_setting('app.user_id')` 比较,却没有要求该值只能由受信任的数据库端代码设置,也没有说明表所有者等角色可能绕过 RLS。若普通应用会话可以更改这个自定义设置,策略会把会话自报的身份当成授权依据。

为什么需要注意

能够执行 `SET app.user_id` 或等效操作的数据库客户端,可能冒充另一用户读取或修改其行;拥有绕过 RLS 权限的应用角色也可能完全不受策略约束。

该内容是实际设计指导,不是警告或否定示例。它允许 RLS 策略信任应用设置的 `app.user_id`,但可见文本没有要求仅由受信任角色设置该值,也未提示哪些数据库角色可绕过 RLS。若普通应用会话能够更改该设置,用户可能以其他 ID 访问行。用户可要求作者说明设置该值所需的角色隔离、连接池处理及 RLS 强制策略。

references/details.md:33来自说明文档打开原文件
## Row-level securityEnable with `ALTER TABLE tbl ENABLE ROW LEVEL SECURITY`. Create policies: `CREATE POLICY user_access ON orders FOR SELECT TO app_users USING (owner = current_user)` when database roles map to users, or compare against an app-set setting such as `current_setting('app.user_id')::bigint`. Built-in user-based access control at the row level.
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

8 个说明模块

该 Skill 是 PostgreSQL 表结构设计参考,内容涵盖数据类型、约束、索引、分区、行级安全和结构变更;提供的是建议与 SQL 示例,没有指示代理自动连接数据库、读取凭据、访问网络或执行命令。

查看原文
SKILL.md:10来自说明文档打开原文件
- Designing a new PostgreSQL schema, or reviewing one before it ships.- Choosing column types, keys, constraints, or indexes for PostgreSQL specifically.- Deciding whether and how to partition a large table, or how to store semi-structured data.- Planning a schema change on a live database without downtime.

主文件明确要求仅在相关章节指向时读取随附参考文件;所提供的引用目标存在,且内容仍属于 PostgreSQL 设计指导。

查看原文
SKILL.md:15来自说明文档打开原文件
The rules and decision points for a PostgreSQL schema. The full data-type catalog, workloadpatterns (update-heavy, insert-heavy, upsert, schema evolution), extensions, JSONB indexing,and worked DDL examples are in `references/details.md`; open it when a section below points there.
references/details.md:3来自说明文档打开原文件
Deep material for the `postgresql-table-design` skill. `SKILL.md` carries the rules andthe decision points; this file carries the full data-type catalog, workload patterns,extensions, JSONB indexing, and worked DDL.
从这里开始 · 工作说明SKILL.md
postgresql-table-design
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。 另有 1 个章节,可在原文件中查看。

文件引用关系图

1 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录2 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • references/details.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • references/details.md配套文件
读取了多少行
292
文件校验值(用于核对版本)
d176dd6356e5e758b88afbceae5b7c26c764631b9a96829a3df73b7bb82c6052