Hive Catalog 下 Hive 视图Ranger的行级过滤策略失效(Ranger RLF)

【详述】问题详细描述
在 StarRocks 通过 Hive Catalog 查询 Hive 表和视图时,配置了 Ranger 行级过滤(RLF)策略,但 RLF 仅在基础表上生效,对视图无效。具体表现如下:

  • 对基础表 uat1_bi_upload.lzf_test_pivot_v3 查询时,Ranger 行级过滤生效,EXPLAIN 显示:

HdfsScanNode
TABLE: lzf_test_pivot_v3
NON-PARTITION PREDICATES: 1: province != ‘Guangdong’

查询结果仅返回允许的行。

  • 对视图 uat1_bi_upload.lzf_test_pivot_v3_vw 查询时,RLF 不生效,EXPLAIN 显示:

HdfsScanNode
TABLE: lzf_test_pivot_v3
(no NON-PARTITION PREDICATES)

查询结果返回未过滤的行,即使对视图也配置了相同的 RLF 策略。

  • Ranger 审计日志仅显示列级访问检查(resType":“column”),未显示视图的行级过滤应用。

【背景】做过哪些操作?

  1. uat1_bi_upload 下创建 Hive 表 lzf_test_pivot_v3 及简单视图 lzf_test_pivot_v3_vw

CREATE TABLE uat1_bi_upload.lzf_test_pivot_v3 (
province STRING,
city STRING,
district STRING,
region STRING,
channel STRING,
amount DOUBLE,
qty DOUBLE
)
STORED AS ORC;

CREATE VIEW uat1_bi_upload.lzf_test_pivot_v3_vw AS
SELECT province, city, district, region, channel, amount, qty
FROM uat1_bi_upload.lzf_test_pivot_v3;

  1. 配置 Ranger 行级过滤策略(示例: province != 'Guangdong' )在表和视图上。
  2. 确认 StarRocks FE 已连接 Ranger 并能访问策略。
  3. 通过 Hive Catalog 查询表和视图,并执行 EXPLAIN,发现表生效,视图不生效。

【业务影响】
在生产场景下,如果用户通过视图访问 Hive 数据,Ranger 行级过滤不生效,会导致 敏感或受限数据被未经授权访问 ,造成数据安全风险。

【是否存算分离】
是(FE/BE 与 Hive Catalog 存算分离)。

【StarRocks版本】
3.3.2

【集群规模】
3FE + 4BE(混部)

【机器信息】
64C512GB
【联系方式】
社区回复
【附件】

执行原表sql:
explain select * from hive_catalog_ranger.uat1_bi_upload.lzf_test_pivot_v3 where province != ''

结果:
PLAN FRAGMENT 0
 OUTPUT EXPRS:1: province | 2: city | 3: district | 4: region | 5: channel | 6: amount | 7: qty
  PARTITION: UNPARTITIONED

  RESULT SINK

  1:EXCHANGE

PLAN FRAGMENT 1
 OUTPUT EXPRS:
  PARTITION: RANDOM

  STREAM DATA SINK
    EXCHANGE ID: 01
    UNPARTITIONED

  0:HdfsScanNode
     TABLE: lzf_test_pivot_v3
     NON-PARTITION PREDICATES: 1: province != '', 1: province != 'Guangdong'
     partitions=1/1
     cardinality=1
     avgRowSize=7.0
执行视图sql:
explain select * from hive_catalog_ranger.uat1_bi_upload.lzf_test_pivot_v3_vw where province != ''


结果:
PLAN FRAGMENT 0
 OUTPUT EXPRS:1: province | 2: city | 3: district | 4: region | 5: channel | 6: amount | 7: qty
  PARTITION: UNPARTITIONED

  RESULT SINK

  1:EXCHANGE

PLAN FRAGMENT 1
 OUTPUT EXPRS:
  PARTITION: RANDOM

  STREAM DATA SINK
    EXCHANGE ID: 01
    UNPARTITIONED

  0:HdfsScanNode
     TABLE: lzf_test_pivot_v3
     NON-PARTITION PREDICATES: 1: province != ''
     partitions=1/1
     cardinality=1
     avgRowSize=7.0