分享

Hive UDF reflect is not allowed问题解决办法

pig2 发表于 2019-11-25 20:48:22 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 3976
本帖最后由 pig2 于 2019-11-25 20:53 编辑


咱们成员遇到下面问题:
not able to use refect function using beeline, same query just works fine with hivecli.

both in hivecli & beeline when i search for show functions i could see reflect .. I donot see any denials in ranger

SELECT reflect("java.net.URLDecoder","decode",search_query) FROM jlp_endeca_searches limit 5; Error: Error while compiling statement: FAILED: SemanticException UDF reflect is not allowed (state=42000,code=40000)


原因:
通过HiveServer2(beeline,ODBC,JDBC连接)运行查询时,默认情况下,Reflect UDF实际上已被列入黑名单,因为这可能会带来安全风险。 参阅此JIRA,例如:HIVE-8893。 这在hive CLI中有效,因为hive CLI不使用HiveServer2。 JIRA在HDP 2.2.4及更高版本中可用。

为什么会有安全监测:
像reflect()或java_method()这样的udf可以将java方法执行为udf。 尽管这在独立模式下提供了很大的灵活性,但它可能成为安全的多用户环境中的安全漏洞。 例如,在HiveServer2中,可以使用用户配置单元的凭据执行任何可用的Java代码。 需要白名单和黑名单来限制Hiveserver2中的内置udfs。

解决:
可以通过在beeline上运行此命令来检查它:
[mw_shl_code=bash,true]set hive.server2.builtin.udf.blacklist;
[/mw_shl_code]

reflect 可能会在那里列出。 可以将其从黑名单属性中删除,并确保此属性为空:
[mw_shl_code=bash,true]hive.server2.builtin.udf.whitelist
[/mw_shl_code]
应用更改并重新启动HiveServer2,应该看到反射UDF正常工作。

补丁地址:
https://issues.apache.org/jira/browse/HIVE-8893

1.jpg



没找到任何评论,期待你打破沉寂

关闭

推荐上一条 /2 下一条