BI 只读脱敏查询
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_03fbb66c/guoyuanxin-bi-safe-query。
技能介绍
解决什么问题
在 BI 分析场景中,让分析师或自动化脚本直接访问业务数据库往往意味着高风险:一句拼错的 SQL 可能就能把生产表清空,一条 UPDATE 或 DELETE 语句足以破坏核心业务数据。更棘手的是隐私合规:查询结果里往往包含客户姓名、具体金额、销售负责人等敏感字段,这些内容一旦通过飞书或企业微信等外部渠道流转,就可能造成数据泄露。
如果完全靠人工审核 SQL 来规避风险,流程会变得极其笨重,也难以保证每一次查询都被完整记录。我们需要一种机制:既能让分析师自由探索数据,又能确保数据库不会被误写,敏感字段在流出内部环境前被自动剥离,且每一次查询都有明确的审计痕迹。
技能如何工作
这个技能是 integration-contract 五条契约在 BI 查询场景下的参考实现,通过多层防线将风险降到最低:
- 物理层只读隔离:数据库侧只创建
bi_ro@%账号,GRANT SELECT ON bi_sandbox.*是唯一授权。即使凭证泄露,攻击者也无法执行任何写操作。 - 应用层强制拦截:
query_bi.py在发送 SQL 前会调用is_select_only()检查,非SELECT语句直接抛出PermissionError。查询超时通过connect_timeout=5控制,防止长连接拖垮数据库。 - 敏感字段脱敏:
desensitize.py根据PERSONA.md中定义的规则,自动剥离customer_name、amount、sales_manager等字段。脱敏策略按调用渠道路由:内部渠道返回原始数据,外部渠道自动应用脱敏规则。 - 全量审计留痕:每次查询都会调用
audit()函数,将操作人、时间戳、SQL 语句、返回行数、调用渠道写入audit/audit.log.jsonl。审计日志在运行时生成,发布包本身不包含演示日志。
切换到生产环境时,只需完成三步:将 bi_ro 的授权指向真实业务 schema(如 GRANT SELECT ON bi_prod.*),删除沙箱演示数据,然后根据调用方渠道传递对应的 channel 参数即可。
适用边界
- 当前技能处于沙箱验证阶段,已跑通核心逻辑,但尚未接入真实业务 schema。生产部署前需要在你自己的 CloudBase 环境中重新配置数据库账号和连接信息。
- 配置文件
config.local.example.json中的口令仅用于本地演示,生产环境应通过 CloudBase 环境变量注入,不要将真实凭证提交到代码仓库。 - 脱敏规则基于
PERSONA.md中预设的字段列表,如果你的业务有额外的敏感字段需要处理,需要自行扩展desensitize.py的逻辑。 - 审计日志目前写入本地文件,适合单实例或小规模使用场景。如果需要集中式审计或与 SIEM 系统集成,需要额外开发日志上报机制。
使用场景
- 分析师通过飞书调用数据库查询,需要自动剥离客户姓名等敏感字段
- 团队需要让脚本查询生产库,但要避免误执行写操作
- 管理员需要记录所有BI查询的操作人、时间和SQL内容
- 本地开发时验证脱敏逻辑,无需连接真实数据库
适合人员
- 数据分析师:需要在安全环境下查询业务数据,同时确保敏感信息不泄露
- 运维工程师:需要部署数据库查询服务,确保只读和审计机制生效
- 合规负责人:需要验证BI查询是否符合隐私保护要求,有完整的审计记录
- 开发工程师:需要参考安全的查询实现,构建自己的BI工具