这篇文章是关于将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可能存在一些问题,或者我可能做错了什么。关于如何使其发挥作用的任何想法?
答案 0 :(得分:0)
关于你的问题
配置Sentry和Hive可能存在一些问题...
和给定的错误消息
Caused by: java.lang.NullPointerException
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient ...
您可以检查绑定是否正确配置。起点可以是Configure Sentry to show/hide different databases for different users。