【问题标题】:Configure Sentry to show/hide different databases for different users配置哨兵为不同的用户显示/隐藏不同的数据库
【发布时间】:2017-04-28 06:41:33
【问题描述】:

我有一个使用 cdh-5.7.0 运行的集群并配置了以下设置

  • hadoop 与 kerberos
  • 具有 LDAP 身份验证的配置单元
  • 具有哨兵授权的配置单元(存储在 JDBC derby 中的规则)

我的目标是限制用户查看我的系统中存在哪些数据库。 例如:

  • 当执行show databases 时,用户-A 只能看到数据库 DB-A
  • 当执行show databases 时,用户-B 只能看到数据库 DB-B

我按照文章https://blog.cloudera.com/blog/2013/12/how-to-get-started-with-sentry-in-hive/ 来实现这一点。但没有成功。 我取得的成就是

  • User-A 只能从 DB-A 中选择表,而不能从 DB-B 中选择表。
  • User-B 只能从 DB-B 中选择表,而不能从 DB-A 中选择表。

但在执行show databases 时,两者仍然可以看到 DB-A 和 DB-B。但我想避免这种情况。

您有什么提示可以让规则或设置运行起来吗?

谢谢 马尔科

【问题讨论】:

  • 那篇博文已经非常老了,一般来说,使用硬编码的策略文件进行授权是蹩脚的。现在您应该只使用“策略”来定义全局 Admin 角色,然后打开 Hive 或 Impala shell 来发出 GRANT 命令 cf。 cloudera.com/documentation/enterprise/latest/topics/…cloudera.com/documentation/enterprise/latest/topics/… (注意 Hive 和 Impala 中的语法有点不同)
  • 嘿,我通过直线添加了规则,例如创建角色 einstein_role,将角色 einstein_role 授予组 einstein,将 table bookorders 上的 select 授予角色 einstein_role;该规则有效,或者换句话说,来自组 einstein 的用户只能从表书单中选择数据。但是他们仍然可以通过 show databases 查看每个数据库,还可以通过 show tables 查看所有表。

标签: hadoop ldap kerberos apache-sentry


【解决方案1】:

根据您的描述以及我从现有设置中了解到的情况,对于 Sentry v1.6+,您需要将以下属性添加到您的 hive-site.xml

<property>
  <name>hive.metastore.filter.hook</name>
  <value>org.apache.sentry.binding.metastore.SentryMetaStoreFilterHook</value>
</property>

即使您使用的是 CDH 5.7,MapR 5 documentation 也会提供一些上下文。还有Sentry Service Interactions

重新启动 Hive 服务后,您应该能够看到您期望的结果。

【讨论】:

  • 感谢 U880D,hive-site.xml 中的属性非常适合我。 hive.metastore.filter.hookorg.apache.sentry.binding.metastore.SentryMetaStoreFilterHook ``` 设置此属性后user-A看到只有 DB-A 而不是 DB-B。用户 B 在执行 show databases 时只看到 DB-B 而看不到 DB-A。非常感谢 U880D -- Marko
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多