这个帖子是关于用Hive绑哨兵的。我面对这个问题已经有一段时间了。
我的主要目标是提供对数据库和表的访问,这些数据库和表在创建角色时被授予特权。
因此,首先,我在cloudera管理器中启用了sentry并重新启动了服务器,然后我创建了角色并在beeline中授予特权,如下所示-
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有问题,或者我可能做错了什么。有什么办法让它发挥作用吗?
1条答案
按热度按时间bjp0bcyl1#
关于你的问题
可能在配置岗哨和Hive时有问题。。。
以及给定的错误消息
您可以检查绑定配置是否正确。可以从配置sentry开始,为不同的用户显示/隐藏不同的数据库。