关于 introspect
introspect 是只读数据库审计技能,用于收集仅凭文件无法确认的运行时信息。它检查数据库目录,优先使用 DB MCP 服务的只读工具,并标明需要 API 访问的检查项。
主要功能
- 01读取数据库目录
- 02检查索引、约束和 RLS
- 03收集引擎版本与表大小
- 04执行只读查询规则
- 05报告需要 API 访问的检查
适用场景
- 01核实实时索引和约束状态
- 02检查行级安全配置
- 03收集数据库审计所需的运行时信息
MCP 相关
它优先通过 DB MCP 服务连接,并仅使用查询、读取、列表、描述和架构等只读工具。它避免调用变更数据的工具,并对通用查询工具应用只读校验。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill introspect安装后在 Claude Code 中输入/introspect确认已加载。
详细介绍
introspect(第 1 层——实时只读)
第 0 层读取文件。许多检查需要文件无法提供的运行时实况:实际索引使用情况、缺少索引的外键连接、表和行的大小、RLS 状态、扩展、引擎版本、自动清理和回绕状态。introspect 是获取这些信息的唯一途径,并且按约定只读。参见 references/data-tiers.md。
连接路径(优先使用 MCP)
- 数据库 MCP 服务(首选)——权限边界更清晰。仅使用名称匹配
*query*/*read*/*list*/*describe*/*schema*的读取类工具。具有通用写入能力的query工具会经过下方相同的只读验证器;mcp__.*上的 PreToolUse 钩子也会提供保护。先列出可用工具;绝不调用会修改数据的工具。 - 否则,使用从环境变量中的
$DATABASE_URL读取的最小权限只读连接字符串——绝不回显,也绝不写入发现项。redactSecrets()会清除任何进入发现项、报告或日志的凭据。 - 两者均不可用 → 对每项依赖此连接的检查输出
status: needs_api,并说明原因和所需的最低授权。绝不默默通过,也绝不伪造行数、大小或查询计划。
只读约定(在执行任何查询前强制执行)
SET default_transaction_read_only = on;- 设置有界的
statement_timeout(例如SET statement_timeout = '15s';)。 - 仅允许
SELECT/EXPLAIN(除计划外,不产生ANALYZE写入副作用)/ 目录读取。拒绝其他所有操作。
读取的目录(不读取行数据)
- Postgres:
version()、information_schema、pg_catalog、pg_class、pg_index、pg_indexes、pg_constraint、pg_policies、pg_extension。第 2 层会增加pg_stat_user_indexes/pg_stat_user_tables、pg_stat_statements、age(datfrozenxid)。 - MySQL/MariaDB:
information_schema(TABLES、STATISTICS、KEY_COLUMN_USAGE)、SHOW ENGINE INNODB STATUS(读取)。 - Mongo:
db.stats()、$indexStats、$collStats(第 2 层)。 - Cassandra:
system_schema、nodetool tablehistograms(第 2 层)。
对发现项的影响
有实时证据支持的检查会升级为 confidence: established,因此可能限制评分(例如,确认 int4/serial 主键接近耗尽、TXID 即将回绕、被依赖的表已关闭 RLS)。没有实时访问权限时,同样的检查会保持为 directional 或变为 needs_api——绝不会仅凭静态信号限制评分。每项发现仍须符合 schema/finding.schema.json;verification.reproduce 引用 $DATABASE_URL,绝不包含明文凭据。
输出
返回调用方审计器所需的目录事实(索引清单、RLS 状态、版本、大小),并清晰说明哪些检查仍为 needs_api 及其原因。使用用户的语言作答(EN/ES)。
评论
支持 Markdown