统一 Catalog 与权限治理
多引擎(Spark、Flink、Trino、StarRocks)读同一批湖表时,表元数据必须由同一个 Catalog 提供,否则同名表在不同引擎里指向不同元数据路径。统一 Catalog 解决的是「表在哪里」,权限治理解决的是「谁能读到哪些行和列」,这两件事要一起设计,缺一个都会出现「能查到表却读不到数据」或「不该看的字段被读到」。
基本信息
| 元数据 | 统一 Catalog 注册表 |
|---|---|
| 权限层级 | 库 / 表 / 行 / 列 / 视图 |
| 审计 | 访问日志加授权变更记录 |
| 变更流程 | 评审加影响面评估 |
| 常见实现 | Hive Metastore、REST Catalog、云托管目录 |
典型使用场景
- 新引擎接入前先确认它读哪个 Catalog,避免同一张表出现两份元数据
- 敏感字段收敛:列级权限粒度不够时,用脱敏视图替代直接授权
- 权限变更走统一审批:一次给一个组放开一批表,是最常见的失控入口
- 审计溯源:事前授权与事后访问日志都要能查到谁在什么时候读了什么
- 授权后逐引擎验证:在 Spark 能查不等于在 Trino 能查,每个引擎都要实测一次
授权与脱敏视图
授权与脱敏视图
GRANT SELECT ON TABLE demo.db.trade_order TO ROLE analyst; -- 表级授权
CREATE VIEW demo.db.v_trade_order AS -- 列级收敛:只暴露脱敏字段
SELECT order_id, mask(phone) AS phone, pay_amt
FROM demo.db.trade_order
WHERE dt >= '2026-01-01';
-- 行级过滤:把内部测试门店挡在业务视图之外
CREATE VIEW demo.db.v_trade_store AS
SELECT * FROM demo.db.dws_trade_store_day
WHERE store_id NOT IN (SELECT store_id FROM demo.db.dim_internal_store);权限落点与验证
| 层级 | 实现位置 | 验证方式 |
|---|---|---|
| 表级 | Catalog / GRANT | 各引擎查授权或用低权限账号直查 |
| 列级 | 引擎侧权限或脱敏视图 | 低权限账号查敏感列应报错或见掩码 |
| 行级 | 视图或行过滤策略 | 低权限账号与全量行数对比 |
| 审计 | 访问日志与授权变更记录 | 按人按表检索近期访问与变更 |
统一 Catalog 只解决元数据定位,权限基本在各引擎侧各自实现;同一角色在 Trino 能查、在 Spark 报错,是最常见的「权限没生效」现象,别只看 Catalog 的授权记录。
直接给业务方授物理表权限,后续做脱敏、拆字段都会受既有授权牵制;敏感数据优先授视图,把访问收敛到可演进的一层。