安全 · 2026 年 7 月 9 日 · 10 分钟
留下痕迹:问题、语句、行数、谁在问
公开可观测性建议保存 SQL、工具轨迹、结果摘要。个人练习没有平台,也可以有一份日志:时间、问题原文、最终语句、返回行数、是否对上报表。日志不是为了监视自己,是为了下周还认得这串数。
问题原文要存
后来改口径时,才知道当时问的是哪句。
语句要存
结果不能复现,往往是语句没留。
行数要存
同一句话从 20 行变成 2 万行,是事故信号。
一次完整的问法可以先写成下面这样:
日志一行:2026-07-09 / 昨日上海 GMV / 语句哈希 / 1 行。
落到语句上,草稿常常是:
SELECT CURRENT_DATE AS asked_on, '昨日上海GMV' AS question, COUNT(*) AS rows_returned
FROM (
SELECT SUM(pay_amount) AS gmv
FROM orders
WHERE pay_time >= CURRENT_DATE - INTERVAL '1 day'
AND pay_time < CURRENT_DATE
AND city = '上海'
AND pay_status = 'paid'
) t;
痕迹丑一点没关系。没有痕迹的漂亮数字,才像凭空出现。
安全是前置条件,不是附录提醒
公开落地把只读、限行、限时、脱敏、权限前置、审计写成清单。个人问数同样适用。权限写进谓词和账号,不写进「请注意」四个字。先查出结果再删敏感行,算泄露。
用户原话不要拼进语句。城市走白名单,时间自己算成起止。练习库和生产库两套连接,写在不同文件里。生产默认拒绝探索,没有卡片编号就不跑。
痕迹要留:问题原文、最终语句、返回行数。没有痕迹的漂亮数字,出了事无法复盘。安全看起来胆小。问数里,胆大和改数据只隔着一个分号。
读完这一辑可以做什么
给自己的练习账号取消一切写权限。把手机号、证件、邮箱从 SELECT 默认列表里拿掉。做完这两件,再谈下一次提问。
行数从二十变成两万,是事故信号。信号只能写在痕迹里。