首页/数据/数仓建模速查/湖仓 Catalog 与统一权限治理
湖仓与引擎63 条

湖仓 Catalog 与统一权限治理

多引擎共享湖表时用统一 Catalog 收敛元数据与权限:表级授权、行级过滤与列脱敏在各引擎侧落地;变更需走同一套审批流程。

数仓建模速查数据更新于 2026-10-13

统一 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 的授权记录。
直接给业务方授物理表权限,后续做脱敏、拆字段都会受既有授权牵制;敏感数据优先授视图,把访问收敛到可演进的一层。

易错点

  • 只在某一个引擎授权就以为全链路生效:其他引擎仍能读到敏感字段,等于没有管控
  • 对物理表直接授权给多个团队:表结构变更要做影响面评估,后续脱敏和拆分几乎无法推进
  • 权限变更不留审批与记录:出事后无法还原谁在什么时候放开了什么
  • 表元数据分散在多个 Catalog:同名表数据不一致,排查耗时长且容易误判为数据错误

数据来源与参考

  • DAMA-DMBOK 第2版
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌