我的数据集
ODS · 测试实例
我负责的数据集
14个
已发布 11 · 草稿 3
昨日调用
8,412次
工作台模拟 37 次已记审计
失败率
1.7%
较上周 +0.9pt,集中在费用汇总
查询耗时 P95
2.8s
阈值 3s,2 个数据集逼近
我负责的数据集
按昨日调用量排序| 数据集 | 状态 | 权限维度 | 调用 | 失败率 | P95 | 数据截止 |
|---|---|---|---|---|---|---|
mkt_fee_summary 营销费用汇总 |
v3 已发布 | office | 3,204 | 3.1% | 2.9s | 09-21 14:30 |
mkt_fee_detail 费用单据明细 |
v2 已发布 | officedivision | 1,887 | 0.4% | 1.2s | 09-21 14:30 |
sales_daily_office 办事处日销 |
v5 已发布 | office | 1,540 | 0.2% | 0.7s | 09-21 15:02 |
prod_output_plant 基地产量 |
v1 已发布 | plant | 986 | 0.0% | 0.5s | 09-21 13:00 |
fin_budget_dept 部门预算执行 |
v2 待发布 | dept | 0 | 0.0% | 2.1s | 09-20 T+1 |
卡住的草稿
闸门未过
mkt_fee_ratio
SQL 未声明 {{XJ_SCOPE}} 占位符,且 7 个字段缺中文名
fin_budget_dept
越权用例 V5 未通过:dept 维度未标 is_required
hr_headcount_dept
缺口径 Owner 工号
越权尝试告警
近 7 天
mkt_fee_detail · 4 次
同一工号构造 office_id 参数尝试跨区,已被丢弃并记审计
sales_daily_office · 1 次
密级 L2 用户请求 gross_profit_amt,字段已物理删除
mkt_fee_ratio
草稿 v2
SQL 模板 · SQL Server 方言
只读参数 #{}
占位符已声明
1
2
3
4
5
6
7
8
9-- dataset_code: mkt_fee_ratio · 口径 Owner: 谌辉 100871
SELECT office_id, office_name, month_id,
fee_apply_amt, fee_verify_amt, sales_amt,
/* L3 */ gross_profit_amt,
CAST(fee_verify_amt AS DECIMAL(18,4)) / NULLIF(sales_amt,0) AS fee_sales_ratio
FROM dm.dm_mkt_fee_summary
WHERE month_id BETWEEN #{monthFrom} AND #{monthTo}
{{XJ_SCOPE}}
ORDER BY month_id DESC, office_id
占位符检查通过
切面会在执行前把 {{XJ_SCOPE}} 替换为参数化条件。客户端传入的同名权限参数一律丢弃。
缺少 {{XJ_SCOPE}} 占位符,禁止发布
这条 SQL 会返回全量数据。要发布无权限过滤的公开数据集,需单独提交豁免申请并经审批。
字段登记
从 SELECT 列表自动解析,共 7 个字段
批量设置密级
已勾选 0 个
| 字段名 | 中文名 | 类型 | 密级 | 同义词 | 脱敏策略 |
|---|
0 个字段缺中文名
每个对外字段必须有中文名与密级,否则数据集不允许发布。同义词可留空,由口径 Owner 后续补充。
行级权限规则
声明本数据集按哪个维度过滤
必须是 SELECT 里真实存在的列
SELF 通配符由运行时解析
约 200 名业务员共用一条 scope_value='SELF' 的规则,运行时解析为其当前归属值。调岗后权限自动跟随,这里无需为个人配置任何东西。
参数白名单
未登记参数一律丢弃并记日志| 参数名 | 类型 | 必填 | 客户端可传 | 校验规则 |
|---|---|---|---|---|
| monthFrom | string | 是 | 是 | ^\d{6}$ |
| monthTo | string | 是 | 是 | ^\d{6}$ |
| brandCode | enum | 否 | 是 | XJ01,XJ02,XJ07 |
| office_id | string | 否 | 否 | 权限保留参数,客户端传值一律丢弃 |
归属与可见性
谌辉 · 营销管理部。无责任人的数据集不可发布。
默认关闭。P1 阶段 AI 问数整体禁用,此开关打开也不会生效。
mkt_fee_ratio
草稿 v2 试跑走生产权限链路,仅把身份换为模拟主体每次模拟写一条审计,channel=workbench,params_json 记录 simulated_as。以他人视角取数的能力本身受 R_DATA_DEV 单独授权约束。
注入后的最终 SQL
陈立 视角全部参数化
SELECT office_id, office_name, month_id,
fee_apply_amt, fee_verify_amt, sales_amt,
/* gross_profit_amt 已由后置切面物理删除 */
CAST(fee_verify_amt AS DECIMAL(18,4)) / NULLIF(sales_amt,0) AS fee_sales_ratio
FROM dm.dm_mkt_fee_summary
WHERE month_id BETWEEN ? AND ?
AND office_id IN (?, ?)
ORDER BY month_id DESC, office_id
绑定参数
1'202601'
2'202609'
3'CS01'scope
4'ZZ02'scope
范围值走绑定参数,不进 SQL 字符串。构造含注入特征的参数不会改变 SQL 结构。
越权用例 V1-V8
7 通过 · 1 失败
V1
客户端构造 office_id 参数
41ms
传入的 office_id 被丢弃,生效范围仍为服务端计算值
V2
SQL 注入特征参数
38ms
传入 '; DROP TABLE 后 SQL 结构未变,作为字面量绑定
V3
未订阅数据集调用
12ms
返回 403 / 40301,且不泄露数据集是否存在
V4
L2 用户请求 L3 字段
55ms
响应体中不存在 gross_profit_amt 这个 key
V5
无范围用户取数
2.1s
office 维度无范围时应返回空集,实测返回全量
期望 rowCount 0
实际 rowCount 1248
原因 office 维度 is_required = 0
V6
deny 表覆盖 allow
63ms
被拒绝的办事处不出现在结果中
V7
缓存跨用户串数据
29ms
两个不同范围的用户命中不同缓存键
V8
过期授权继续调用
18ms
valid_to 已过的 granted 记录不参与范围计算
影响分析
订阅关系 + 近 30 天审计日志经营分析门户 · 费用板块
4,102 次
dataui 前端,3 个图表引用
帆软 · 月度经营分析报表
612 次
AppKey FR_MONTHLY,每月 1 日批量调用
角色 R_DIV_GM · R_FIN_ALL · R_MKT_HQ
47 人
共 47 名用户已订阅
指标 m_fee_sales_ratio
1 个
费销比,口径 Owner 谌辉
版本历史
v2
草稿 · 待发布
许金 · 09-21 16:40 · 新增 fee_sales_ratio 与 division 维度
闸门未过
v1
当前生效
许金 · 09-12 10:22 · 首次发布
生效中
版本差异
v1 对比 v2 草稿 SELECT office_id, office_name, month_id,
fee_apply_amt, fee_verify_amt, sales_amt,
+ gross_profit_amt,
+ CAST(fee_verify_amt AS DECIMAL(18,4)) / NULLIF(sales_amt,0) AS fee_sales_ratio
FROM dm.dm_mkt_fee_summary
WHERE month_id BETWEEN #{monthFrom} AND #{monthTo}
{{XJ_SCOPE}}
+2字段登记:gross_profit_amt (L3)、fee_sales_ratio (L1)
+1权限规则:division 维度,过滤列 division_id
!新增 L3 字段会改变低密级用户的响应结构,需重跑 V4