安全 · 2026 年 7 月 5 日 · 8 分钟
权限是系统能力,不是一段提醒文字
公开避坑写过:权限必须前置,不能先查再判断有没有资格看。个人问数同样:行级范围写进 WHERE,列级范围写进 SELECT。提醒文字挡不住一条已经跑出去的结果。
行级
只能看自己部门,就在谓词里写 department = 当前人部门。
列级
看不到成本,SELECT 里就没有成本。
角色在账号上
换人换账号,不要换一句「请注意权限」。
一次完整的问法可以先写成下面这样:
当前人只能看华东。华东写进谓词,不是写进聊天。
落到语句上,草稿常常是:
SELECT city, SUM(pay_amount) AS gmv
FROM orders
WHERE pay_time >= DATE '2026-03-01'
AND pay_time < DATE '2026-04-01'
AND region = '华东'
AND pay_status = 'paid'
GROUP BY city;
谓词里的地区是权限,不是分析兴趣。分析兴趣可以改,权限不能因为好奇改。
安全是前置条件,不是附录提醒
公开落地把只读、限行、限时、脱敏、权限前置、审计写成清单。个人问数同样适用。权限写进谓词和账号,不写进「请注意」四个字。先查出结果再删敏感行,算泄露。
用户原话不要拼进语句。城市走白名单,时间自己算成起止。练习库和生产库两套连接,写在不同文件里。生产默认拒绝探索,没有卡片编号就不跑。
痕迹要留:问题原文、最终语句、返回行数。没有痕迹的漂亮数字,出了事无法复盘。安全看起来胆小。问数里,胆大和改数据只隔着一个分号。
读完这一辑可以做什么
给自己的练习账号取消一切写权限。把手机号、证件、邮箱从 SELECT 默认列表里拿掉。做完这两件,再谈下一次提问。
权限写进谓词。写进提醒文字的权限,等于没有。