db-readonly

🗄️ 安全只读的数据库查询专家

编辑精选

基于白名单机制的安全只读查询工具,通过环境变量管理凭据,实现零风险数据探查与报表生成。

收藏
4.8k
安装
2k
版本
v1.0.0
CLS 安全性认证2026-05-02
点击查看完整报告 >

使用说明

db-readonly 是一款专为数据安全场景设计的 Skill,旨在为用户提供零风险的数据库查询体验。它通过严格的 SQL 白名单机制和环境变量管理,确保在 PostgreSQL 和 MySQL 数据库上仅能执行只读操作,从根本杜绝误删改数据的风险。

核心用法方面,该 Skill 通过读取标准环境变量(如 PGHOST、PGUSER、PGPASSWORD 或 MYSQL_HOST、MYSQL_USER 等)建立数据库连接,仅接受 SELECT、WITH、EXPLAIN 三类 SQL 语句。用户可通过 scripts/db_readonly.sh 脚本直接执行查询,或将结果导出为 CSV、TSV、JSON 格式便于后续分析。例如执行 scripts/db_readonly.sh postgres "SELECT * FROM users LIMIT 100" --format csv --out /tmp/users.csv 即可完成数据采样与导出。

显著优点体现在其多重安全防护设计上。首先,采用正则表达式严格过滤 SQL 语句,明确阻止 INSERT、UPDATE、DELETE、DROP、ALTER、CREATE、TRUNCATE 等一切写操作,从代码层面强制只读,即使误输入危险命令也会被拦截。其次,敏感凭据完全通过环境变量注入,避免了密码硬编码或命令行参数泄露的风险。此外,脚本实现了完善的错误处理和参数校验,使用 set -euo pipefail 确保健壮性,在环境变量缺失或参数错误时给予清晰提示。

潜在缺点在于功能局限性。该 Skill 仅支持 PostgreSQL 和 MySQL,无法适用于 MongoDB、SQLite 或其他数据库。同时,它依赖系统预装 psql 或 mysql 客户端工具,且需要用户手动配置一系列环境变量,对新手而言有一定配置门槛。此外,作为纯只读工具,它天然无法满足数据写入、Schema 变更等数据库运维需求,遇到此类需求需使用其他工具。

适合的目标群体主要包括:数据库管理员(DBA)进行日常巡检、容量评估和故障排查;数据分析师提取数据样本进行探索性分析(EDA);后端开发者验证数据状态或调试复杂查询语句;以及运维人员生成定期数据报告。任何需要频繁查看生产环境数据但又要严格避免误操作的技术人员都会从中受益。

使用风险主要集中在性能与配置方面。由于工具本身不对查询复杂度做硬性限制,用户若执行缺乏 WHERE 条件或 LIMIT 限制的大表全量查询,可能导致数据库服务器 CPU/IO 资源耗尽、网络传输超时甚至影响生产环境稳定性。建议始终遵循"小步快跑"原则,先通过 COUNT 或 LIMIT 10 探查数据规模。另外,虽然凭据通过环境变量管理,但用户仍需确保 shell 配置文件(如 .bashrc)或启动脚本中的变量设置具有适当的文件权限(如 600),防止本地凭据被其他用户读取。

安全解读

核心用法

db-readonly 是一款专注于安全数据库只读查询的 CLI 工具,支持 PostgreSQL 和 MySQL 两大主流数据库。用户通过环境变量配置连接信息后,即可执行 SELECT / WITH / EXPLAIN 三类查询语句,结果可导出为 CSV/TSV/JSON 格式。

基本操作

  • PostgreSQL: scripts/db_readonly.sh postgres "SELECT now();"
  • MySQL: scripts/db_readonly.sh mysql "SELECT NOW();"
  • 导出 CSV: scripts/db_readonly.sh postgres "SELECT * FROM users LIMIT 100" --format csv --out /tmp/users.csv

连接配置

| PostgreSQL | MySQL |
|-----------|-------|
| `PGHOST`, `PGDATABASE`, `PGUSER`, `PGPASSWORD`, `PGPORT`(默认5432) | `MYSQL_HOST`, `MYSQL_DATABASE`, `MYSQL_USER`, `MYSQL_PASSWORD`, `MYSQL_PORT`(默认3306) |

---

显著优点

1. 安全边界极其清晰
采用正则表达式白名单机制,硬性拦截 INSERT/UPDATE/DELETE/DROP/ALTER 等所有非读操作,从代码层面杜绝误操作风险。脚本启用 set -euo pipefail 严格模式,错误处理规范。

2. 零外部依赖攻击面
仅依赖系统原生工具(psql/mysql),无第三方包、无动态加载、无网络 API 调用,供应链攻击风险趋近于零。

3. 隐私合规达标
不采集用户敏感信息,数据库凭据仅通过环境变量注入,符合 GDPR/CCPA 数据最小化原则。

4. 来源可信
托管于 openclaw GitHub 组织仓库,作者 ryanhong666 为活跃开发者,版本管理规范(语义化 v1.0.0)。

---

潜在局限

  • 功能单一: 仅支持只读场景,任何数据修改需求需切换其他工具或人工介入
  • 无审计日志: 当前版本不记录查询历史,无法追溯操作轨迹
  • 行数无硬限制: 依赖用户自觉遵守 LIMIT 建议,超大结果集可能导致内存压力
  • 注释注入风险: 当前正则未显式过滤 SQL 注释语法,理论上存在 --/* */ 绕过可能(实践中低危)

---

适合人群

  • 数据分析师: 快速探查表结构、抽样数据、生成报表
  • 运维工程师: 线上故障排查、性能诊断(配合 EXPLAIN)
  • 开发人员: 本地开发环境的数据验证与调试
  • 安全敏感场景: 需要严格只读权限的生产环境数据查询

---

常规风险

| 风险类型 | 说明 | 缓解措施 |
|---------|------|---------|
| 凭据泄露 | 环境变量中的密码可能被进程泄露 | 使用专用只读账号、最小权限原则、避免明文存储 |
| 大查询拖库 | `SELECT *` 无 LIMIT 可能导致全表扫描 | 强制使用 LIMIT、在 huge 表上禁用 `SELECT *` |
| 网络嗅探 | 数据库连接未强制加密时传输暴露 | 配置 SSL/TLS 连接、使用私有网络 |

---

CLS-Certify 安全认证:S级(100分),T2来源可信度

db-readonly 内容

references文件夹
scripts文件夹
手动下载zip · 2.9 kB
query-cookbook.mdtext/markdown
请选择文件