为了更快的定位您的问题,请提供以下信息,谢谢
【详述】
使用 paimon catalog 创建 paimon view,在 follower fe 上执行 create view 提示“SQL 错误 [5204] [42000]: Access denied; you need (at least one of) the CREATE VIEW privilege(s) on DATABASE xxx for this operation.” ; 但在 leader fe 执行则可以创建成功。
【背景】
1)使用了 Group Provider 认证用户组
2)创建 paimon catalog 时添加 PROPERTIES “ranger.plugin.hive.service.name” 复用 hive service ranger 实现访问控制
【业务影响】
【是否存算分离】
【StarRocks版本】4.1,main 分支
【集群规模】例如:3fe(1 follower+2observer)+5be(fe与be混部)
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【联系方式】
【附件】
原因:
跟了一下代码发现,根因应该是:
1)follower fe 在执行 com.starrocks.qe.LeaderOpExecutor#forward 方法时调用的 TMasterOpRequest params = createTMasterOpRequest(ctx, forwardTimes); 没有把 ctx 中的用户 groups 信息传递
2)leader fe 接收请求后在执行 com.starrocks.service.FrontendServiceImpl#forward 方法构建新的 ConnectContext 时无法从param中获取用户的 groups 信息,用户 groups 信息在 leader fe 侧丢失
3)leader fe 接着执行 com.starrocks.sql.analyzer.AuthorizerStmtVisitor#visitCreateViewStatement 中check权限
4)因 paimon catalog 复用 hive service ranger 实现访问控制,所以鉴权走到 RangerHiveAccessController,forward 过程中用户 groups 信息的丢失导致 com.starrocks.authorization.ranger.hive.RangerHiveAccessController#checkDbAction 无法使用用户的groups信息验证权限通过,鉴权失败,create view 执行失败
更广的影响:
follower fe 在执行 com.starrocks.qe.LeaderOpExecutor#forward 方法时调用的 TMasterOpRequest params = createTMasterOpRequest(ctx, forwardTimes); 没有把 ctx 中的用户 groups 信息传递进去,因此会影响所有通过外部catalog 集成ranger需要forward leader fe的所有操作权限问题