无法将Sentry与Hive绑定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将Sentry与Hive绑定相关的知识,希望对你有一定的参考价值。

这篇文章是关于绑定Sentry与Hive。我一直面对这个问题。

我的主要目标是提供对创建角色时获得权限的数据库和表的访问。

首先,我在Cloudera Manager中启用了Sentry并重新启动了服务器然后我创建了角色,并在下面给出了直线特权 -

CREATE ROLE role1;
GRANT ROLE role1 TO GROUP hive;
GRANT SELECT ON DATABASE db1 TO ROLE role1;
GRANT ALL ON URI 'file:///path/to/hive-udfs.jar' TO ROLE role1;
SET ROLE role1;
SHOW CURRENT ROLES;

现在,如果我在beeline中执行以下命令,我只看到DEFAULT数据库和DB1数据库哪个好

SHOW DATABASES;

当我使用代码执行相同操作时,通过创建SentryHiveMetaStoreClient的对象并访问其方法(如getAllDatabases()getAllTables("table_name")),就会出现问题。我在这里得到错误:

Caused by: java.lang.NullPointerException
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.getConf(SentryHiveMetaStoreClient.java:161)
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.getHiveAuthzBinding(SentryHiveMetaStoreClient.java:135)
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.filterDatabases(SentryHiveMetaStoreClient.java:98)
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.getAllDatabases(SentryHiveMetaStoreClient.java:65)
at my.data.in.hive.resources.MetadataResource.getDatabase(MetadataResource.java:46)

我面临的另一个问题是,当我创建一个HiveMetaStoreClient的对象并访问它的方法,如getAllDatabases()时,它向我展示了所有数据库丢弃了各种角色给出的特权概念,这很好。但是,如果我访问它的方法 - listRoleNames(),我得到管理员和公众。这不应该给出我在beeline中创建的角色的名称,即role1吗?

可能是在Cloudera Manager中配置Sentry和Hive有一些问题,或者我可能做错了什么。关于如何使其发挥作用的任何想法?

答案

关于你的问题

可能是配置Sentry和Hive有一些问题......

和给定的错误消息

Caused by: java.lang.NullPointerException
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient ...

您可以检查绑定是否正确配置。起点可以是Configure Sentry to show/hide different databases for different users

以上是关于无法将Sentry与Hive绑定的主要内容,如果未能解决你的问题,请参考以下文章

hive权限用Sentry详细使用测试文档

hive启用sentry

hive记录-cdh配置hive和sentry

hive集成sentry的sql使用语法

hive.server2.enable.doAs 和sentry冲突吗

总结Apache Sentry 服务简介