about云开发-活到老 学到老

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1480|回复: 5

hiveserver2自定义用户认证不生效

[复制链接]

48

主题

5

听众

1

收听

中级会员

Rank: 3Rank: 3

积分
678

最佳新人热心会员

发表于 2018-2-11 11:26:43 | 显示全部楼层 |阅读模式
<property>
  <name>hive.server2.authentication</name>
  <value>CUSTOM</value>
</property>
<property>
  <name>hive.server2.custom.authentication.class</name>
  <value>com.shuangyu.hive.auth.CustomHiveServer2Auth</value>
</property>
需要对访问hive做用户密码验证,网上搜了下要自己重写接口,并做如上的配置,重启后发现根本就没生效啊,随便输个用户和密码都能进去。
开始以为是配置错了地方,然后把client端和server端,server2都配置了还是没有任何反应(用的cdh,配置有分client端server端),下面是根据网上教程copy来的验证代码。各位大大帮忙看下,是哪里出问题了。

[Java] 纯文本查看 复制代码
package com.shuangyu.hive.auth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.security.sasl.AuthenticationException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;

/**
 * Description:
 * Creator:╰⊱⋛⋋ShuangYu⋌⋚⊰╯
 * CreateTime: 2018/2/8.
 * Remark:
 * Usage:
 * Example:
 * ✻
 */
public class CustomHiveServer2Auth implements PasswdAuthenticationProvider{
    @Override
    public void Authenticate(String username, String password)
            throws AuthenticationException {

        boolean ok = false;
        String passMd5 = new MD5().md5(password);
        HiveConf hiveConf = new HiveConf();
        Configuration conf = new Configuration(hiveConf);
//        String filePath = conf.get("hive.server2.custom.authentication.file");
        String filePath  = "/tmp/sljr_hive.conf";
        System.out.println("hive.server2.custom.authentication.file [" + filePath + "] ..");
        File file = new File(filePath);
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            while ((tempString = reader.readLine()) != null) {
                String[] datas = tempString.split(",", -1);
                if(datas.length != 2) continue;
                //ok
                if(datas[0].equals(username) && datas[1].equals(passMd5)) {
                    ok = true;
                    break;
                }
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new AuthenticationException("read auth config file error, [" + filePath + "] ..", e);
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {}
            }
        }
        if(ok) {
            System.out.println("user [" + username + "] auth check ok .. ");
        } else {
            System.out.println("user [" + username + "] auth check fail .. ");
            throw new AuthenticationException("user [" + username + "] auth check fail .. ");
        }
    }

    //MD5加密
    class MD5 {
        private MessageDigest digest;
        private char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        public MD5() {
            try {
                digest = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException(e);
            }
        }

        public String md5(String str) {
            byte[] btInput = str.getBytes();
            digest.reset();
            digest.update(btInput);
            byte[] md = digest.digest();
            // 把密文转换成十六进制的字符串形式
            int j = md.length;
            char strChar[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                strChar[k++] = hexDigits[byte0 >>> 4 & 0xf];
                strChar[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(strChar);
        }
    }
}


额,配置在server端时链接有报错:
[cloudera@quickstart hive]$ beeline
Beeline version 1.1.0-cdh5.12.0 by Apache Hive
beeline> !connect jdbc:hive2://192.168.10.207:10000/default
scan complete in 3ms
Connecting to jdbc:hive2://192.168.10.207:10000/default
Enter username for jdbc:hive2://192.168.10.207:10000/default: asdf
Enter password for jdbc:hive2://192.168.10.207:10000/default: ***
Unexpected end of file when reading from HS2 server. The root cause might be too many concurrent connections. Please ask the administrator to check the number of active connections, and adjust hive.server2.thrift.max.worker.threads if applicable.
Error: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.10.207:10000/default: null (state=08S01,code=0)

我用的是自己的虚拟机,就我一个人用户,所以应该不存在链接过多(链接数配置的1000)

62

主题

7

听众

5

收听

高级会员

Rank: 4

积分
1711
发表于 2018-2-11 14:39:04 | 显示全部楼层
别使用beeline,好像beeline都不用密码。采用其他方式测试

48

主题

5

听众

1

收听

中级会员

Rank: 3Rank: 3

积分
678

最佳新人热心会员

 楼主| 发表于 2018-2-11 15:19:16 | 显示全部楼层
qcbb001 发表于 2018-2-11 14:39
别使用beeline,好像beeline都不用密码。采用其他方式测试

用tableau链接测试还是一样啊,随便输个密码都能练上去

62

主题

7

听众

5

收听

高级会员

Rank: 4

积分
1711
发表于 2018-2-11 21:08:24 | 显示全部楼层
定义的用户名和密码是什么,没看到你定义下面属性
[XML] 纯文本查看 复制代码
<property>

<name>hive.server2.custom.authentication.file</name>

<value>../apache-hive-0.13.1-bin/conf/hive.server2.users.conf</value>

</property>


48

主题

5

听众

1

收听

中级会员

Rank: 3Rank: 3

积分
678

最佳新人热心会员

 楼主| 发表于 2018-2-12 09:38:17 | 显示全部楼层
qcbb001 发表于 2018-2-11 21:08
定义的用户名和密码是什么,没看到你定义下面属性
[mw_shl_code=xml,true]

那个属性注释掉了,我写死了文件路径
String filePath  = "/tmp/sljr_hive.conf";


用户名,密码都是写在文件里的,密码是md5加密后的
zhangsan,5f4dcc3b5aa765d61d8327deb882cf99

62

主题

7

听众

5

收听

高级会员

Rank: 4

积分
1711
发表于 2018-2-12 10:58:01 | 显示全部楼层
grinsky 发表于 2018-2-12 09:38
那个属性注释掉了,我写死了文件路径
String filePath  = "/tmp/sljr_hive.conf";

1.对于配置项hive.server2.custom.authentication.file,可能不止这里使用到,所以为了排除问题的可能性,最好加上
2.打包是否放在$HIVE_HOME/lib下,是否全部都分发了。

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

本版积分规则

关闭

站长推荐上一条 /4 下一条

QQ|小黑屋|about云开发-学问论坛|社区-大数据云技术学习分享平台 ( 京ICP备12023829号

GMT+8, 2018-5-24 12:17 , Processed in 3.477599 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表