mcpField
D
db-security-access

db-security-access

github.com/hainrixz安全2172 次安装3 天前更新
代码仓库

关于 db-security-access

db-security-access 是用于检查数据库访问控制和数据保护的安全审计技能,面向数据库设计审查。它检查 RLS、PII、明文凭据、传输加密配置及可能的 SQL 注入,并标记需要运行时验证的事项。

主要功能

  1. 01检查租户表的 RLS 状态
  2. 02识别未受保护的个人信息
  3. 03检测明文凭据和秘密
  4. 04检查连接的 TLS 配置
  5. 05识别拼接用户输入的 SQL

适用场景

  1. 01审查多租户表的行级访问控制
  2. 02检查架构和迁移中的凭据存储
  3. 03排查连接配置中的禁用 TLS
  4. 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。

检查内容

  1. 行级安全性(RLS) — 对于 Postgres/Supabase,存放按租户或按用户划分的行,且由非超级用户/anon/authenticated 角色访问的表,是否启用了 RLS?此类表若关闭 RLS,则为 severity:5、fail。(租户隔离逻辑属于 M9;M10 负责 RLS 的启用/关闭状态。)
  2. PII 暴露 — 名称/类型表明包含个人数据(电子邮件、SSN、电话、出生日期、地址、card/pan)的列,是否在未加密/令牌化的情况下存储或被记录。
  3. 明文密钥 — 在架构中将密码、API 密钥、令牌以 text/varchar 存储且没有哈希说明,或在 DDL/迁移/默认值中嵌入字面凭据。severity:5。
  4. 传输加密 — 连接配置强制设置 sslmode=disable(或远程主机未启用 TLS)时,严重性为 severity:4。静态可见时,会标记缺少静态存储加密的情况。
  5. 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,绝不可断言缺少该设置。
  • 仅基于源码得出的 directional RLS/注入信号,绝不能触发严重性 5 的上限 — 应先通过 Tier-1 或生成的 DDL 确认。

评论

支持 Markdown