关于 db-security-access
db-security-access 是用于检查数据库访问控制和数据保护的安全审计技能,面向数据库设计审查。它检查 RLS、PII、明文凭据、传输加密配置及可能的 SQL 注入,并标记需要运行时验证的事项。
主要功能
- 01检查租户表的 RLS 状态
- 02识别未受保护的个人信息
- 03检测明文凭据和秘密
- 04检查连接的 TLS 配置
- 05识别拼接用户输入的 SQL
适用场景
- 01审查多租户表的行级访问控制
- 02检查架构和迁移中的凭据存储
- 03排查连接配置中的禁用 TLS
- 04审查 ORM 源码中的 SQL 拼接
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill db-security-access安装后在 Claude Code 中输入/db-security-access确认已加载。
详细介绍
db-security-access (M10)
安全性属于设计与完整性(轴 design)范畴:即使架构完全规范化,也仍可能泄露所有行。本模块检查谁能够读取/写入数据,以及数据本身在静态存储和传输过程中是否受到保护。对于依赖 RLS 的多租户/Supabase 表,若 RLS 关闭,以及明文密钥/SQL 注入,严重性上限均为 5。
检查内容
- 行级安全性(RLS) — 对于 Postgres/Supabase,存放按租户或按用户划分的行,且由非超级用户/
anon/authenticated角色访问的表,是否启用了 RLS?此类表若关闭 RLS,则为severity:5、fail。(租户隔离逻辑属于 M9;M10 负责 RLS 的启用/关闭状态。) - PII 暴露 — 名称/类型表明包含个人数据(电子邮件、SSN、电话、出生日期、地址、
card/pan)的列,是否在未加密/令牌化的情况下存储或被记录。 - 明文密钥 — 在架构中将密码、API 密钥、令牌以
text/varchar存储且没有哈希说明,或在 DDL/迁移/默认值中嵌入字面凭据。severity:5。 - 传输加密 — 连接配置强制设置
sslmode=disable(或远程主机未启用 TLS)时,严重性为severity:4。静态可见时,会标记缺少静态存储加密的情况。 - SQL 注入 — 使用原始字符串拼接/f 字符串/模板字面量构造包含用户输入的 SQL(在 ORM 源码或迁移辅助代码中可见)。
severity:5、design。
评分 / 轴
仅计入 design(类别 安全性,与 M9/M20/M21 共用关系权重 14;每个 NoSQL 配置文件中也有对应的 安全性 类别)。
Tier-0(静态)
解析 DDL/迁移/ORM 源码和连接配置:检测 text 类型的密钥列、字面凭据(与 redactSecrets() 交叉核对)、sslmode=disable、原始字符串拼接 SQL,以及名称涉及 PII 的列。声明式 DDL 中可检测 RLS 启用情况(ALTER TABLE … ENABLE ROW LEVEL SECURITY);如果无法从文件确认 RLS 状态,则标记为 needs_api(绝不默认通过)。
Tier-1(验证查询,Postgres)
SELECT c.relname,
c.relrowsecurity AS rls_enabled,
c.relforcerowsecurity AS rls_forced,
(SELECT count(*) FROM pg_policies p WHERE p.tablename = c.relname) AS policy_count
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'public' AND c.relkind = 'r';
方法 schema_introspect/constraint_check。若某个存放租户/用户行的表满足 rls_enabled = false,则确认 M10.rls.* 为 established,并触发上限。运行时才能检查的项目(实际静态存储加密、实时 TLS 协商)在 Tier-0 中标记为 needs_api。
发现项
按 schema/finding.schema.json 输出发现项。示例:
M10.tenants.rls_disabled— 按租户划分的表关闭了 RLS(severity:5、fail、轴design,Tier-1 时置信度为established/ 从 DDL 推断时为directional,fixable: proposed)。M10.users.password_plaintext— 密钥以text存储且未哈希(severity:5、fail、established、fixable: advisory)。M10.conn.sslmode_disable— 远程主机使用sslmode=disable(severity:4、warn、fixable: proposed)。M10.repo.sql_string_concat— 将用户输入拼接进 SQL(severity:5、fail,根据源码判断为directional,fixable: advisory)。
每项发现:evidence.observed 引用 DDL/连接行/查询内容,逐字保留并对密钥脱敏;verification.reproduce 为上述目录查询(引用 $DATABASE_URL)或用于搜索违规模式的 grep;expected_impact 使用分档并标注置信度(不得只给出百分比)。
诚信原则
- “存在 PII”不自动判定为失败 — 标记未受保护的 PII;许多列以明文存储是合理的。建议应针对加密/令牌化,而不是删除数据。
- 静态存储加密通常是平台设置(云 KMS/卷),在文件中不可见:报告
needs_api,绝不可断言缺少该设置。 - 仅基于源码得出的
directionalRLS/注入信号,绝不能触发严重性 5 的上限 — 应先通过 Tier-1 或生成的 DDL 确认。