`

hive 配置自定义用户安全认证

    博客分类:
  • HIVE
 
阅读更多

HiveServer2提供了JDBC链接操作Hive的功能,非常实用,但如果在使用HiveServer2时候,不注意安全控制,将非常危险,因为任何人都可以作为超级用户来操作Hive及HDFS数据。
比如:在配置HiveServer2的时候,hive.server2.authentication=NONE,表示没有用户认证。

使用beeline,模拟成超级用户hadoop,成功连接到HiveServer2.
创建数据库lxw1234;
0: jdbc:hive2://localhost:10000> create database lxw1234;
No rows affected (0.157 seconds)
0: jdbc:hive2://localhost:10000>

HDFS上也是以超级用户hadoop创建的目录。
再执行drop database,同样没问题。
0: jdbc:hive2://localhost:10000> drop database lxw1234;
No rows affected (0.142 seconds)
0: jdbc:hive2://localhost:10000>

如果是以普通用户链接HiveServer2,执行创建数据库,则会报权限错误,因为普通用户没有在

因此,如果使用HiverServer2来提供给用户来链接Hive,必须启用安全认证,也就是hive.server2.authentication的配置。

目前HiveServer2支持多种用户安全认证方式:NONE,NOSASL, KERBEROS, LDAP, PAM ,CUSTOM等等。

本文介绍使用自定义的用户认证方式,即CUSTOM;
如果将hive.server2.authentication设置成CUSTOM,则需要设置
hive.server2.custom.authentication.class来指定用于权限认证的类,这个类需要实现
org.apache.hive.service.auth.PasswdAuthenticationProvider接口。

我们将使用HiveServer2的用户名和密码保存起来,其中,密码以32位小写md5加密来保存,这个数据即可以保存在Hive元数据库中,也可以保存在一个配置文件中。为了方便起见,这里使用配置文件来保存。

首先需要编写用户权限验证的类:

 
  1. package com.lxw1234.hive.auth;
  2.  
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.io.IOException;
  8. import java.security.MessageDigest;
  9. import java.security.NoSuchAlgorithmException;
  10.  
  11. import javax.security.sasl.AuthenticationException;
  12.  
  13. import org.apache.hadoop.conf.Configuration;
  14. import org.apache.hadoop.hive.conf.HiveConf;
  15. import org.apache.hive.service.auth.PasswdAuthenticationProvider;
  16.  
  17. public class CustomHiveServer2Auth implements PasswdAuthenticationProvider  {
  18.     @Override
  19.     public void Authenticate(String username, String password)
  20.             throws AuthenticationException {
  21.         
  22.         boolean ok = false;
  23.         String passMd5 = new MD5().md5(password);
  24.         HiveConf hiveConf = new HiveConf();
  25.         Configuration conf = new Configuration(hiveConf);
  26.         String filePath = conf.get("hive.server2.custom.authentication.file");
  27.         System.out.println("hive.server2.custom.authentication.file [" + filePath + "] ..");
  28.         File file = new File(filePath);
  29.         BufferedReader reader = null;
  30.         try {
  31.             reader = new BufferedReader(new FileReader(file));
  32.             String tempString = null;
  33.             while ((tempString = reader.readLine()) != null) {
  34.                 String[] datas = tempString.split(",", -1);
  35.                 if(datas.length != 2) continue;
  36.                 //ok
  37.                 if(datas[0].equals(username) && datas[1].equals(passMd5)) {
  38.                     ok = true;
  39.                     break;
  40.                 }
  41.             }
  42.             reader.close();
  43.         } catch (Exception e) {
  44.             e.printStackTrace();
  45.             throw new AuthenticationException("read auth config file error, [" + filePath + "] ..", e);
  46.         } finally {
  47.             if (reader != null) {
  48.                 try {
  49.                     reader.close();
  50.                 } catch (IOException e1) {}
  51.             }
  52.         }
  53.         if(ok) {
  54.             System.out.println("user [" + username + "] auth check ok .. ");
  55.         } else {
  56.             System.out.println("user [" + username + "] auth check fail .. ");
  57.             throw new AuthenticationException("user [" + username + "] auth check fail .. ");
  58.         }
  59.     }
  60.     
  61.     //MD5加密
  62.     class MD5 {
  63.         private MessageDigest digest;
  64.         private char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  65.         public MD5() {
  66.             try {
  67.               digest = MessageDigest.getInstance("MD5");
  68.             } catch (NoSuchAlgorithmException e) {
  69.               throw new RuntimeException(e);
  70.             }
  71.         }
  72.         
  73.          public String md5(String str) {
  74.             byte[] btInput = str.getBytes();
  75.             digest.reset();
  76.             digest.update(btInput);
  77.             byte[] md = digest.digest();
  78.             // 把密文转换成十六进制的字符串形式
  79.             int j = md.length;
  80.             char strChar[] = new char[j * 2];
  81.             int k = 0;
  82.             for (int i = 0; i < j; i++) {
  83.                 byte byte0 = md[i];
  84.                 strChar[k++] = hexDigits[byte0 >>> 4 & 0xf];
  85.                 strChar[k++] = hexDigits[byte0 & 0xf];
  86.             }
  87.             return new String(strChar);
  88.         }
  89.     }
  90.     
  91. }
  92.  

将上面的程序打包成HiveServer2Auth.jar,放到$HIVE_HOME/lib下,

注意:附件中已有打包好的jar
在hive-site.xml中设置以下参数:
<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>
<property>
<name>hive.server2.custom.authentication.class</name>
<value>com.lxw1234.hive.auth.CustomHiveServer2Auth</value>
</property>
<property>
<name>hive.server2.custom.authentication.file</name>
<value>/usr/local/apache-hive-0.13.1-bin/conf/hive.server2.users.conf</value>
</property>

在$HIVE_HOME/conf下新建文件hive.server2.users.conf,里面写入内容:
[root@dev conf]# cat hive.server2.users.conf
lxw1234,48d9a656690e1b1bf5ddee4c12d1bbd7
user,5f4dcc3b5aa765d61d8327deb882cf99

其中,48d9a656690e1b1bf5ddee4c12d1bbd7为lxw1234_password的md5加密,
5f4dcc3b5aa765d61d8327deb882cf99为password的md5加密。

接下来,重新启动HiveServer2,使用beeline连接

分享到:
评论

相关推荐

    hive 配置文件

    - **`HIVE_CONF_DIR`**: Hive配置文件的目录,通常包含`hive-site.xml`。 - **`JAVA_HOME`**: Java的安装目录,Hive是用Java编写的,所以需要Java环境。 - **`HIVE_AUX_JARS_PATH`**: 用于指定额外的JAR文件路径,...

    Hiveserver2 Beeline连接设置用户名和密码.docx

    在 Hive 的配置文件 `hive-site.xml` 中,需要配置自定义的认证类。添加或修改以下配置: ```xml &lt;name&gt;hive.server2.authentication &lt;value&gt;PASSWORD &lt;name&gt;hive.server2.authentication.provider.class...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    2. 安全设置:如果Hive服务器有安全认证机制(如Kerberos),需在DBeaver中配置对应的认证信息。 3. 网络环境:连接Hive需要稳定的网络环境,确保DBeaver与Hive服务器之间的网络连通。 总结,"hive-jdbc-uber-2.6....

    apache-hive的安装与配置

    这需要配置 `hive.server2.enable.doAs` 为 true,以及相关安全认证设置。 **8. 性能优化** 为了提高查询性能,可以考虑以下策略: - 分桶(Bucketing)和分区(Partitioning):根据特定字段对数据进行分组,加快...

    apache-hive-2.0.0-bin.tar

    10. **安全性**:Hive支持Hadoop的认证和授权机制,如Kerberos,以及SQL标准的权限控制,确保数据的安全访问。 在解压"apache-hive-2.0.0-bin.tar"后,用户需要配置环境变量,设置Hive的安装路径、Hadoop相关路径、...

    HiveServer2自定义身份验证

    ============Hive的beeline权限配置============ 1)HDFS修改core-site.xml配置 搜索 core-site.xml core-site.xml 的群集范围高级配置代码段(安全阀)添加 hadoop.proxyuser.hadoop.hosts * hadoop.proxyuser...

    Hive_64bit_linux_centos

    8. **安全性**:在生产环境中,Hive还可以通过Hadoop的Kerberos进行安全认证,以保护数据访问的安全性。 9. **性能优化**:Hive可以通过分区、桶、压缩等方式优化查询性能,同时,还可以通过调整Hive的执行引擎(如...

    hive远程连接工具和jar.zip

    5. `hadoop-auth.jar` - 提供认证和安全功能的库。 6. `hive-exec.jar` - Hive执行引擎的库,包含了各种数据处理操作的实现。 7. `hive-service.jar` - Hive服务端的库,包括Metastore服务。 8. `libthrift.jar` - ...

    DataGrip连接Hive所需jar包

    如果有安全认证或自定义配置,可以在此处添加相关参数。 5. **测试连接**:点击“测试连接”按钮,如果配置正确,你应该能看到“连接成功”的提示。 6. **创建数据源**:配置完成后,你可以创建一个新的数据源,...

    apache-hive-2.0.0

    6. **存储过程**:允许用户定义自定义函数(UDF, User Defined Function)和复杂的操作,扩展 Hive 的功能。 7. **高可用性**:Hive Server 和 Metastore 可以配置为多实例,以提高服务的可靠性。 8. **安全特性**...

    通过jdbc链接hive所需要的jar包

    在某些情况下,你可能需要额外的Hive配置,例如设置`hive.server2.authentication`为`kerberos`时,需要处理Kerberos认证。此外,可能还需要提供Hive服务器的`hive-site.xml`配置文件,以便JDBC驱动能正确地找到元...

    Ttrift 访问hive的php客户包

    5. **配置连接参数**:设置Hive服务器的地址、端口,以及任何必要的认证信息(如用户名、密码或安全证书)。 6. **执行Hive查询**:通过客户端实例调用`executeQuery`方法,传入你的HQL(Hive Query Language)语句...

    07--Hive权限管理1

    - 通过`set`命令设置Hive配置的方式可能对某些用户受到限制,可通过修改`hive.security.authorization.sqlstd.confwhitelist`配置来调整。 - 添加、删除函数和宏的操作仅对具有`admin`角色的用户开放。 - 用户自定义...

    Azkaban任务调度安装配置和使用

    - **认证授权**:提供用户认证和授权机制; - **工作流控制**:支持工作流的暂停、重启和停止操作; - **邮件提醒**:在任务成功或失败时发送邮件通知。 ##### 1.6 Azkaban的架构 Azkaban的核心组件包括: 1. **...

    Hive编程指南

    9. **Hive安全性**:讲解如何通过Hive Metastore的权限控制和Hadoop的Kerberos认证来保障数据的安全。 10. **案例研究**:通过实际案例展示如何使用Hive解决大数据问题,帮助读者巩固理论知识并提升实践能力。 ...

    apache-atlas-2.0.0-SNAPSHOT-hive-hook.tar.gz

    2. **配置文件**:可能包含Atlas和Hive的配置信息,用于设置Hook的运行参数,例如Atlas服务器地址、认证信息等。 3. **示例脚本或文档**:可能会提供如何部署和配置Hive Hook的指导,帮助用户正确地将Apache Atlas...

    Oozie调度SparkSQL样例代码_oozie_hive_

    3. **配置Hive和Spark的认证**:在华为大数据平台中,可能需要配置Kerberos认证来确保安全性。确保Oozie、Spark和Hive服务都配置了正确的Kerberos票据,以允许Oozie作业正确地访问Hive资源。这可能涉及设置`...

Global site tag (gtag.js) - Google Analytics