分享

CDH 5.2 :Impala和Hive集成Sentry

nettman 发表于 2015-1-1 20:46:44 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 9 124363
本帖最后由 nettman 于 2015-1-1 20:50 编辑

问题导读

1.Sentry 的使用有哪两种方式?
2.基于文件的存储方式(SimpleFileProviderBackend)与基于数据库的存储方式分别如何配置?






本文主要记录 CDH 5.2 Hadoop 集群中配置 Impala 和 Hive 集成 Sentry 的过程,包括 Sentry 的安装、配置以及和 Impala、Hive 集成后的测试。
使用 Sentry 来管理集群的权限,需要先在集群上配置好 Kerberos。

Sentry 会安装在三个节点的 hadoop 集群上,每个节点的ip、主机名和部署的组件分配如下:
  1. 192.168.56.121        cdh1     NameNode、Hive、ResourceManager、HBase、impala-state-store、impala-catalog、Kerberos Server、sentry-store
  2. 192.168.56.122        cdh2     DataNode、SSNameNode、NodeManager、HBase、impala-server
  3. 192.168.56.123        cdh3     DataNode、HBase、NodeManager、impala-server
复制代码


Sentry 的使用有两种方式,一是基于文件的存储方式(SimpleFileProviderBackend),一是基于数据库的存储方式(SimpleDbProviderBackend),如果使用基于文件的存储则只需要安装 sentry,否则还需要安装 sentry-store。
1. 基于数据库的存储方式1.1 安装服务
在 cdh1 节点上安装 sentry-store 服务:
  1. yum install sentry sentry-store -y
复制代码


修改 Sentry 的配置文件 /etc/sentry/conf/sentry-store-site.xml,下面的配置参考了 Sentry源码中的配置例子
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.     <property>
  4.         <name>sentry.service.admin.group</name>
  5.         <value>impala,hive,hue</value>
  6.     </property>
  7.     <property>
  8.         <name>sentry.service.allow.connect</name>
  9.         <value>impala,hive,hue</value>
  10.     </property>
  11.     <property>
  12.         <name>sentry.verify.schema.version</name>
  13.         <value>true</value>
  14.     </property>
  15.     <property>
  16.     <name>sentry.service.server.rpc-address</name>
  17.     <value>cdh1</value>
  18.     </property>
  19.     <property>
  20.     <name>sentry.service.server.rpc-port</name>
  21.     <value>8038</value>
  22.     </property>
  23.     <property>
  24.         <name>sentry.store.jdbc.url</name>
  25.         <value>jdbc:postgresql://cdh1/sentry</value>
  26.     </property>
  27.     <property>
  28.         <name>sentry.store.jdbc.driver</name>
  29.         <value>org.postgresql.Driver</value>
  30.     </property>
  31.     <property>
  32.         <name>sentry.store.jdbc.user</name>
  33.         <value>sentry</value>
  34.     </property>
  35.     <property>
  36.         <name>sentry.store.jdbc.password</name>
  37.         <value>redhat</value>
  38.     </property>
  39.     <property>
  40.         <name>sentry.hive.server</name>
  41.         <value>server1</value>
  42.     </property>
  43.     <property>
  44.         <name>sentry.store.group.mapping</name>
  45.         <value>org.apache.sentry.provider.common.HadoopGroupMappingService</value>
  46.     </property>
  47. </configuration>
复制代码


创建数据库,请参考 Hadoop自动化安装shell脚本
  1. yum install postgresql-server postgresql-jdbc -y
  2. ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/hive/lib/postgresql-jdbc.jar
  3. ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/sentry/lib/postgresql-jdbc.jar
  4. su -c "cd ; /usr/bin/pg_ctl start -w -m fast -D /var/lib/pgsql/data" postgres
  5. su -c "cd ; /usr/bin/psql --command "create user sentry with password 'redhat'; " " postgres
  6. su -c "cd ; /usr/bin/psql --command "CREATE DATABASE sentry owner=sentry;" " postgres
  7. su -c "cd ; /usr/bin/psql --command "GRANT ALL privileges ON DATABASE sentry TO sentry;" " postgres
  8. su -c "cd ; /usr/bin/psql -U sentry -d sentry -f /usr/lib/sentry/scripts/sentrystore/upgrade/sentry-postgres-1.4.0-cdh5.sql" postgres
  9. su -c "cd ; /usr/bin/pg_ctl restart -w -m fast -D /var/lib/pgsql/data" postgres
复制代码



/var/lib/pgsql/data/pg_hba.conf 内容如下:
  1. # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
  2. # "local" is for Unix domain socket connections only
  3. local   all         all                               md5
  4. # IPv4 local connections:
  5. #host    all         all         0.0.0.0/0             trust
  6. host    all         all         127.0.0.1/32          md5
  7. # IPv6 local connections:
  8. #host    all         all         ::1/128               nd5
复制代码


如果集群开启了 Kerberos 验证,则需要在该节点上生成 Sentry 服务的 principal 并导出为 ticket:
  1. $ cd /etc/sentry/conf
  2. kadmin.local -q "addprinc -randkey sentry/cdh1@JAVACHEN.COM "
  3. kadmin.local -q "xst -k sentry.keytab sentry/cdh1@JAVACHEN.COM "
  4. chown sentry:hadoop sentry.keytab ; chmod 400 *.keytab
复制代码


然后,在/etc/sentry/conf/sentry-store-site.xml 中添加如下内容:
  1. <property>
  2.     <name>sentry.service.security.mode</name>
  3.     <value>kerberos</value>
  4. </property>
  5. <property>
  6.    <name>sentry.service.server.principal</name>
  7.     <value>sentry/cdh1@JAVACHEN.COM</value>
  8. </property>
  9. <property>
  10.     <name>sentry.service.server.keytab</name>
  11.     <value>/etc/sentry/conf/sentry.keytab</value>
  12. </property>
复制代码


1.2. 准备测试数据
参考 Securing Impala for analysts,准备测试数据:
  1. $ cat /tmp/events.csv
  2. 10.1.2.3,US,android,createNote
  3. 10.200.88.99,FR,windows,updateNote
  4. 10.1.2.3,US,android,updateNote
  5. 10.200.88.77,FR,ios,createNote
  6. 10.1.4.5,US,windows,updateTag
  7. $ hive -S
  8. hive> create database sensitive;
  9. hive> create table sensitive.events (
  10.     ip STRING, country STRING, client STRING, action STRING
  11.   ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
  12. hive> load data local inpath '/tmp/events.csv' overwrite into table sensitive.events;
  13. hive> create database filtered;
  14. hive> create view filtered.events as select country, client, action from sensitive.events;
  15. hive> create view filtered.events_usonly as
  16.   select * from filtered.events where country = 'US';
复制代码


1.3 Hive-server2 集成 sentry要求
在使用 Sentry 时,有如下要求:
1、需要修改 /user/hive/warehouse 权限:
  1. hdfs dfs -chmod -R 770 /user/hive/warehouse
  2. hdfs dfs -chown -R hive:hive /user/hive/warehouse
复制代码


2、修改 hive-site.xml 文件,关掉 HiveServer2 impersonation
3、taskcontroller.cfg 文件中确保 min.user.id=0
修改配置文件
修改 hive-site.xml,添加如下:
  1. <property>
  2.     <name>hive.security.authorization.task.factory</name>
  3.         <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
  4. </property>
  5. <property>
  6.     <name>hive.server2.session.hook</name>
  7.     <value>org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook</value>
  8. </property>
  9. <property>
  10.     <name>hive.sentry.conf.url</name>
  11.     <value>file:///etc/hive/conf/sentry-site.xml</value>
  12. </property>
复制代码


在 /etc/hive/conf/ 目录创建 sentry-site.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <property>
  4.    <name>sentry.service.client.server.rpc-port</name>
  5.    <value>8038</value>
  6. </property>
  7. <property>
  8.    <name>sentry.service.client.server.rpc-address</name>
  9.    <value>cdh1</value>
  10. </property>
  11. <property>
  12.    <name>sentry.service.client.server.rpc-connection-timeout</name>
  13.    <value>200000</value>
  14. </property>
  15. <property>
  16.     <name>sentry.service.security.mode</name>
  17.     <value>kerberos</value>
  18. </property>
  19. <property>
  20.    <name>sentry.service.server.principal</name>
  21.     <value>sentry/_HOST@JAVACHEN.COM</value>
  22. </property>
  23. <property>
  24.     <name>sentry.service.server.keytab</name>
  25.     <value>/etc/sentry/conf/sentry.keytab</value>
  26. </property>
  27. <property>
  28.     <name>sentry.hive.provider</name>
  29.     <value>org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider</value>
  30.   </property>
  31. <property>
  32.     <name>sentry.hive.provider.backend</name>
  33.     <value>org.apache.sentry.provider.db.SimpleDBProviderBackend</value>
  34.   </property>
  35. <property>
  36.     <name>sentry.hive.server</name>
  37.     <value>server1</value>
  38.   </property>
  39.   <property>
  40.     <name>sentry.metastore.service.users</name>
  41.     <value>hive</value>
  42.   </property>
  43. <property>
  44.     <name>sentry.hive.testing.mode</name>
  45.     <value>false</value>
  46.   </property>
  47. </configuration>
复制代码


sentry-store 中创建角色和组
在 beeline 中通过 hive(注意,在 sentry 中 hive 为管理员用户)的 ticket 连接 hive-server2,创建 role、group 等等,执行下面语句:
  1. create role admin_role;
  2. GRANT ALL ON SERVER server1 TO ROLE admin_role;
  3. GRANT ROLE admin_role TO GROUP admin;
  4. GRANT ROLE admin_role TO GROUP hive;
  5. create role test_role;
  6. GRANT ALL ON DATABASE filtered TO ROLE test_role;
  7. GRANT ALL ON DATABASE sensitive TO ROLE test_role;
  8. GRANT ROLE test_role TO GROUP test;
复制代码


上面创建了两个角色,一个是 admin_role,具有管理员权限,可以读写所有数据库,并授权给 admin 和 hive 组(对应操作系统上的组);一个是 test_role,只能读写 filtered 和 sensitive 数据库,并授权给 test 组
在 ldap 创建测试用户
在 ldap 服务器上创建系统用户 yy_test,并使用 migrationtools 工具将该用户导入 ldap,最后设置 ldap 中该用户密码。
  1. # 创建 yy_test用户
  2. useradd yy_test
  3. grep -E "yy_test" /etc/passwd  >/opt/passwd.txt
  4. /usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif
  5. ldapadd -x -D "uid=ldapadmin,ou=people,dc=lashou,dc=com" -w secret -f /opt/passwd.ldif
  6. #使用下面语句修改密码,填入上面生成的密码,输入两次:
  7. ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=lashou,dc=com' -w secret "uid=yy_test,ou=people,dc=lashou,dc=com" -S
复制代码


在每台 datanode 机器上创建 test 分组,并将 yy_test 用户加入到 test 分组:
  1. groupadd test ; useradd yy_test; usermod -G test,yy_test yy_test
复制代码


测试
通过 beeline 连接 hive-server2,进行测试:
  1. # 切换到 test 用户进行测试
  2. $ su test
  3. $ kinit -k -t test.keytab test/cdh1@JAVACHEN.COM
  4. $ beeline -u "jdbc:hive2://cdh1:10000/default;principal=test/cdh1@JAVACHEN.COM"
复制代码


1.4 Impala 集成 Sentry修改配置
修改 /etc/default/impala 文件中的 IMPALA_SERVER_ARGS 参数,添加:
  1. -server_name=server1
  2. -sentry_config=/etc/impala/conf/sentry-site.xml
复制代码


在 IMPALA_CATALOG_ARGS 中添加:
  1. -sentry_config=/etc/impala/conf/sentry-site.xml
复制代码


注意:server1 必须和 sentry-provider.ini 文件中的保持一致。
IMPALA_SERVER_ARGS 参数最后如下:
  1. hostname=`hostname -f |tr "[:upper:]" "[:lower:]"`
  2. IMPALA_SERVER_ARGS=" \
  3.     -log_dir=${IMPALA_LOG_DIR} \
  4.     -catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
  5.     -state_store_port=${IMPALA_STATE_STORE_PORT} \
  6.     -use_statestore \
  7.     -state_store_host=${IMPALA_STATE_STORE_HOST} \
  8.     -kerberos_reinit_interval=60 \
  9.     -principal=impala/${hostname}@JAVACHEN.COM \
  10.     -keytab_file=/etc/impala/conf/impala.keytab \
  11.     -enable_ldap_auth=true -ldap_uri=ldaps://cdh1 -ldap_baseDN=ou=people,dc=javachen,dc=com \
  12.     -server_name=server1 \
  13.     -sentry_config=/etc/impala/conf/sentry-site.xml \
  14.     -be_port=${IMPALA_BACKEND_PORT} -default_pool_max_requests=-1 -mem_limit=60%"
复制代码


创建 /etc/impala/conf/sentry-site.xml 内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <property>
  4.    <name>sentry.service.client.server.rpc-port</name>
  5.    <value>8038</value>
  6. </property>
  7. <property>
  8.    <name>sentry.service.client.server.rpc-address</name>
  9.    <value>cdh1</value>
  10. </property>
  11. <property>
  12.    <name>sentry.service.client.server.rpc-connection-timeout</name>
  13.    <value>200000</value>
  14. </property>
  15. <property>
  16.     <name>sentry.service.security.mode</name>
  17.     <value>kerberos</value>
  18. </property>
  19. <property>
  20.    <name>sentry.service.server.principal</name>
  21.     <value>sentry/_HOST@JAVACHEN.COM</value>
  22. </property>
  23. <property>
  24.     <name>sentry.service.server.keytab</name>
  25.     <value>/etc/sentry/conf/sentry.keytab</value>
  26. </property>
  27. </configuration>
复制代码


测试
请参考下午基于文件存储方式中 impala 的测试。
2. 基于文件存储方式2.1 hive 集成 sentry修改配置文件
在 hive 的 /etc/hive/conf 目录下创建 sentry-site.xml 文件,内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3.   <property>
  4.     <name>hive.sentry.server</name>
  5.     <value>server1</value>
  6.   </property>
  7.   <property>
  8.     <name>sentry.hive.provider.backend</name>
  9.     <value>org.apache.sentry.provider.file.SimpleFileProviderBackend</value>
  10.   </property>
  11.   <property>
  12.     <name>hive.sentry.provider</name>
  13.     <value>org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider</value>
  14.   </property>
  15.   <property>
  16.     <name>hive.sentry.provider.resource</name>
  17.     <value>/user/hive/sentry/sentry-provider.ini</value>
  18.   </property>
  19. </configuration>
复制代码


创建 sentry-provider.ini 文件并将其上传到 hdfs 的 /user/hive/sentry/ 目录:
  1. $ cat /tmp/sentry-provider.ini
  2. [databases]
  3. # Defines the location of the per DB policy file for the customers DB/schema
  4. #db1 = hdfs://cdh1:8020/user/hive/sentry/db1.ini
  5. [groups]
  6. admin = any_operation
  7. hive = any_operation
  8. test = select_filtered
  9. [roles]
  10. any_operation = server=server1->db=*->table=*->action=*
  11. select_filtered = server=server1->db=filtered->table=*->action=SELECT
  12. select_us = server=server1->db=filtered->table=events_usonly->action=SELECT
  13. [users]
  14. test = test
  15. hive= hive
  16. $ hdfs dfs -rm -r /user/hive/sentry/sentry-provider.ini
  17. $ hdfs dfs -put /tmp/sentry-provider.ini /user/hive/sentry/
  18. $ hdfs dfs -chown hive:hive /user/hive/sentry/sentry-provider.ini
  19. $ hdfs dfs -chmod 640 /user/hive/sentry/sentry-provider.ini
复制代码


关于 sentry-provider.ini 文件的语法说明,请参考官方文档。这里我指定了 Hive 组有全部权限,并指定 Hive 用户属于 Hive 分组,而其他两个分组只有部分权限。
然后在 hive-site.xml 中添加如下配置:
  1. <property>
  2.     <name>hive.security.authorization.task.factory</name>
  3.         <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
  4. </property>
  5. <property>
  6.     <name>hive.server2.session.hook</name>
  7.     <value>org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook</value>
  8. </property>
  9. <property>
  10.     <name>hive.sentry.conf.url</name>
  11.     <value>file:///etc/hive/conf/sentry-site.xml</value>
  12. </property>
复制代码


将配置文件同步到其他节点,并重启 hive-server2 服务。
测试
这里,我集群中 hive-server2 开启了 kerberos 认证,故通过 hive 用户来连接 hive-server2。
  1. $ kinit -k -t /etc/hive/conf/hive.keytab hive/cdh1@JAVACHEN.COM
  2. $ beeline -u "jdbc:hive2://cdh1:10000/default;principal=hive/cdh1@JAVACHEN.COM"
  3.     scan complete in 10ms
  4.     Connecting to jdbc:hive2://cdh1:10000/default;principal=hive/cdh1@JAVACHEN.COM
  5.     Connected to: Apache Hive (version 0.13.1-cdh5.2.0)
  6.     Driver: Hive JDBC (version 0.13.1-cdh5.2.0)
  7.     Transaction isolation: TRANSACTION_REPEATABLE_READ
  8.     Beeline version 0.13.1-cdh5.2.0 by Apache Hive
  9.     5 rows selected (0.339 seconds)
  10.     0: jdbc:hive2://cdh1:10000/default> show databases;
  11.     +----------------+--+
  12.     | database_name  |
  13.     +----------------+--+
  14.     | default        |
  15.     | filtered       |
  16.     | sensitive      |
  17.     +----------------+--+
  18.     10 rows selected (0.145 seconds)
  19.     0: jdbc:hive2://cdh1:10000/default> use filtered
  20.     No rows affected (0.132 seconds)
  21.     0: jdbc:hive2://cdh1:10000/default> show tables;
  22.     +----------------+--+
  23.     |    tab_name    |
  24.     +----------------+--+
  25.     | events         |
  26.     | events_usonly  |
  27.     +----------------+--+
  28.     2 rows selected (0.158 seconds)
  29.     0: jdbc:hive2://cdh1:10000/default> use sensitive;
  30.     No rows affected (0.115 seconds)
  31.     0: jdbc:hive2://cdh1:10000/default> show tables;
  32.     +-----------+--+
  33.     | tab_name  |
  34.     +-----------+--+
  35.     | events    |
  36.     +-----------+--+
  37.     1 row selected (0.148 seconds)
复制代码


2.3 impala 集成 sentry修改配置文件
修改 /etc/default/impala 文件中的 IMPALA_SERVER_ARGS 参数,添加:
  1. -server_name=server1
  2. -authorization_policy_file=/user/hive/sentry/sentry-provider.ini
  3. -authorization_policy_provider_class=org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider
复制代码


注意:server1 必须和 sentry-provider.ini 文件中的保持一致。
IMPALA_SERVER_ARGS 参数最后如下:
  1. hostname=`hostname -f |tr "[:upper:]" "[:lower:]"`
  2. IMPALA_SERVER_ARGS=" \
  3.     -log_dir=${IMPALA_LOG_DIR} \
  4.     -catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
  5.     -state_store_port=${IMPALA_STATE_STORE_PORT} \
  6.     -use_statestore \
  7.     -state_store_host=${IMPALA_STATE_STORE_HOST} \
  8.     -be_port=${IMPALA_BACKEND_PORT} \
  9.     -server_name=server1 \
  10.     -authorization_policy_file=/user/hive/sentry/sentry-provider.ini \
  11.     -authorization_policy_provider_class=org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider \
  12.     -enable_ldap_auth=true -ldap_uri=ldaps://cdh1 -ldap_baseDN=ou=people,dc=javachen,dc=com \
  13.     -kerberos_reinit_interval=60 \
  14.     -principal=impala/${hostname}@JAVACHEN.COM \
  15.     -keytab_file=/etc/impala/conf/impala.keytab \
  16. "
复制代码


测试
重启 impala-server 服务,然后进行测试。因为我这里 impala-server 集成了 kerberos 和 ldap,现在通过 ldap 来进行测试。
先通过 ldap 的 test 用户来测试:
  1. impala-shell -l -u test
  2.     Starting Impala Shell using LDAP-based authentication
  3.     LDAP password for test:
  4.     Connected to cdh1:21000
  5.     Server version: impalad version 2.0.0-cdh5 RELEASE (build ecf30af0b4d6e56ea80297df2189367ada6b7da7)
  6.     Welcome to the Impala shell. Press TAB twice to see a list of available commands.
  7.     Copyright (c) 2012 Cloudera, Inc. All rights reserved.
  8.     (Shell build version: Impala Shell v2.0.0-cdh5 (ecf30af) built on Sat Oct 11 13:56:06 PDT 2014)
  9. [cdh1:21000] > show databases;
  10.     Query: show databases
  11.     +---------+
  12.     | name    |
  13.     +---------+
  14.     | default |
  15.     +---------+
  16.     Fetched 1 row(s) in 0.11s
  17. [cdh1:21000] > show tables;
  18.     Query: show tables
  19.     ERROR: AuthorizationException: User 'test' does not have privileges to access: default.*
  20. [cdh1:21000] >
复制代码


可以看到 test 用户没有权限查看和数据库,这是因为 sentry-provider.ini 文件中并没有给 test 用户分配任何权限。
下面使用 hive 用户来测试。使用下面命令在 ldap 中创建 hive 用户和组并给 hive 用户设置密码。
  1. $ grep hive /etc/passwd  >/opt/passwd.txt
  2. $ /usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif
  3. $ ldapadd -x -D "uid=ldapadmin,ou=people,dc=javachen,dc=com" -w secret -f /opt/passwd.ldif
  4. $ grep hive /etc/group  >/opt/group.txt
  5. $ /usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif
  6. $ ldapadd -x -D "uid=ldapadmin,ou=people,dc=javachen,dc=com" -w secret -f /opt/group.ldif
  7. # 修改 ldap 中 hive 用户密码
  8. $ ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=javachen,dc=com' -w secret "uid=hive,ou=people,dc=javachen,dc=com" -S
复制代码


然后,使用 hive 用户测试:
  1. $ impala-shell -l -u hive
  2.     Starting Impala Shell using LDAP-based authentication
  3.     LDAP password for hive:
  4.     Connected to cdh1:21000
  5.     Server version: impalad version 2.0.0-cdh5 RELEASE (build ecf30af0b4d6e56ea80297df2189367ada6b7da7)
  6.     Welcome to the Impala shell. Press TAB twice to see a list of available commands.
  7.     Copyright (c) 2012 Cloudera, Inc. All rights reserved.
  8.     (Shell build version: Impala Shell v2.0.0-cdh5 (ecf30af) built on Sat Oct 11 13:56:06 PDT 2014)
  9. [cdh1:21000] > show databases;
  10.     Query: show databases
  11.     +------------------+
  12.     | name             |
  13.     +------------------+
  14.     | _impala_builtins |
  15.     | default          |
  16.     | filtered         |
  17.     | sensitive        |
  18.     +------------------+
  19.     Fetched 11 row(s) in 0.11s
  20. [cdh1:21000] > use sensitive;
  21.     Query: use sensitive
  22. [cdh1:21000] > show tables;
  23.     Query: show tables
  24.     +--------+
  25.     | name   |
  26.     +--------+
  27.     | events |
  28.     +--------+
  29.     Fetched 1 row(s) in 0.11s
  30. [cdh1:21000] > select * from events;
  31.     Query: select * from events
  32.     +--------------+---------+---------+------------+
  33.     | ip           | country | client  | action     |
  34.     +--------------+---------+---------+------------+
  35.     | 10.1.2.3     | US      | android | createNote |
  36.     | 10.200.88.99 | FR      | windows | updateNote |
  37.     | 10.1.2.3     | US      | android | updateNote |
  38.     | 10.200.88.77 | FR      | ios     | createNote |
  39.     | 10.1.4.5     | US      | windows | updateTag  |
  40.     +--------------+---------+---------+------------+
  41.     Fetched 5 row(s) in 0.76s
复制代码


同样,你还可以使用其他用户来测试。
也可以使用 beeline 来连接 impala-server 来进行测试:
  1. $ beeline -u "jdbc:hive2://cdh1:21050/default;" -n test -p test
  2.   scan complete in 2ms
  3.   Connecting to jdbc:hive2://cdh1:21050/default;
  4.   Connected to: Impala (version 2.0.0-cdh5)
  5.   Driver: Hive JDBC (version 0.13.1-cdh5.2.0)
  6.   Transaction isolation: TRANSACTION_REPEATABLE_READ
  7.   Beeline version 0.13.1-cdh5.2.0 by Apache Hive
  8.   0: jdbc:hive2://cdh1:21050/default>
复制代码







加微信w3aboutyun,可拉入技术爱好者群

已有(10)人评论

跳转到指定楼层
linux91 发表于 2015-5-15 10:57:12
楼主:我有两个问题:1、使用sentry时,一定要先安装Kerberos和ldap吗?2、如何在sentry里配置用户并赋角色,我在cm的界面里找了好久没找到
回复

使用道具 举报

xuanxufeng 发表于 2015-5-15 11:37:27
linux91 发表于 2015-5-15 10:57
楼主:我有两个问题:1、使用sentry时,一定要先安装Kerberos和ldap吗?2、如何在sentry里配置用户并赋角色 ...

先配置是没有错的,可以使用命令授权
回复

使用道具 举报

nettman 发表于 2015-5-15 15:48:16
linux91 发表于 2015-5-15 10:57
楼主:我有两个问题:1、使用sentry时,一定要先安装Kerberos和ldap吗?2、如何在sentry里配置用户并赋角色 ...

Sentry为确保数据安全,提供了一个统一平台,使用现有的Hadoop Kerberos实现安全认证。授权是通过命令。Sentry通过一组特权,如SELECT和INSERT,控制着对Hive Metastore中每个schema对象的访问


更多:

Sentry通过一组特权,如SELECT和INSERT,控制着对Hive Metastore中每个schema对象的访问。schema对象是数据管理中常见的实体,例如SERVER、DATABASE、TABLE、 COLUMN和URI,也就是HDFS中文件的位置。Cloudera Search有它自己的一组特权(如QUERY)和对象(如COLLECTION)。
    和IT团队已经熟悉的其他RBAC系统一样,Sentry提供了:
有层次结构的对象,自动地从上层对象继承权限;
包含了一组多个对象/权限对的规则;
用户组可以被授予一个或多个角色;
用户可以被指定到一个或多个用户组中。
    Sentry通常被配制成默认不允许访问服务和数据。因此,在被划分到设有指定访问角色的用户组之前,用户只有有限的权限访问系统。





Sentry下的数据访问和授权
通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的RBAC(role-based acess control)需求:

  • 安全授权:Sentry可以控制数据访问,并对已通过验证的用户提供数据访问特权。
  • 细粒度访问控制:Sentry支持细粒度的Hadoop数据和元数据访问控制。在Hive和Impala中Sentry的最初发行版本中,Sentry在服务器、数据库、表和视图范围提供了不同特权级别的访问控制,包括查找、插入等——允许管理员使用视图限制对行或列的访问。管理员也可以通过Sentry和带选择语句的视图或UDF,根据需要在文件内屏蔽数据。
  • 基于角色的管理:Sentry通过基于角色的授权简化了管理,你可以轻易将访问同一数据集的不同特权级别授予多个组。例如,对于某特定数据集,你可以分配给反欺诈小组查看所有列的特权,给分析师查看非敏感或非PII(personally identifiable information)列的权限,给数据接收流插入新数据到HDFS的权限。
  • 多租户管理:Sentry允许为委派给不同管理员的不同数据集设置权限。在Hive/Impala的情况下,Sentry可以在数据库/schema级别进行权限管理。
  • 统一平台:Sentry为确保数据安全,提供了一个统一平台,使用现有的Hadoop Kerberos实现安全认证。同时,通过Hive或Impala访问数据时可以使用同样的Sentry协议。未来,Sentry协议会被扩展到其它组件。

接下来,将通过Sentry的架构介绍这些功能是如何实现的。


回复

使用道具 举报

linux91 发表于 2015-5-18 09:37:06
xuanxufeng 发表于 2015-5-15 11:37
先配置是没有错的,可以使用命令授权

我在impala里边可以使用grant授权角色,可是不知道如何跟用户和组联系起来,如果我不配置Kerberos和ldap,如何利用hadoop的用户和分组,或者是linux系统的分组?
回复

使用道具 举报

xuanxufeng 发表于 2015-5-19 00:58:26
linux91 发表于 2015-5-18 09:37
我在impala里边可以使用grant授权角色,可是不知道如何跟用户和组联系起来,如果我不配置Kerberos和ldap ...

impala与hive都是粗粒度
Sentry配置后,可以细粒度控制
回复

使用道具 举报

linux91 发表于 2015-5-21 14:14:06
xuanxufeng 发表于 2015-5-19 00:58
impala与hive都是粗粒度
Sentry配置后,可以细粒度控制

Kerberos作为验证的时候,是验证整个服务器(所有在服务器的系统用户)吗?只要服务器允许连接,所有用户都可以登录?LDAP可以验证单个用户登录的吧?

点评

允许授权的用户登录  发表于 2015-5-22 10:20
回复

使用道具 举报

blackmoon 发表于 2015-6-2 16:59:31
楼主,你好,请教一下,部署了kerberos & sentry的hive,通过beeline连接时指定的principal是不是应该是启动hiveserver2的principal,我看主楼的过程中有这么一条命令:

beeline -u "jdbc:hive2://cdh1:10000/default;principal=test/cdh1@JAVACHEN.COM"

后面又说:

我集群中 hive-server2 开启了 kerberos 认证,故通过 hive 用户来连接 hive-server2。
beeline -u "jdbc:hive2://cdh1:10000/default;principal=hive/cdh1@JAVACHEN.COM"

如果可以通过其他principal来连接到hiveserver2的话还请指点一下。
回复

使用道具 举报

分痴_mak3c 发表于 2016-3-29 19:37:42
楼主, 我最近也碰到了这个问题。  我的CDH5.5.1并未配置kdc或则ldap用户验证,想使用sentry来细分hive权限。  问题是无论用什么用户登入beeline -u jdbc:hive2://hadoop01:10000/default -n XXX -p XXX,都无法操作hive数据库,例如use default,会提示User cloudera-scm does not have privileges for SWITCHDATABASE 。   

尝试使用linux用户cloudera-scm登入,并把组加进去,还是没权限:
sentry.service.admin.group=hive,hue,impala,cloudera-scm

又尝试将hive.sentry.provider改成org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider也不行。  

求助!
回复

使用道具 举报

silencenjupt 发表于 2018-6-5 14:08:32
博主你好,hiveserver2集成sentry,使用hive.sentry.conf.url在hive-site.xml中配置不会报错吗?因为官网没有这个配置项 啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条