Ranger中对hive添加policy字后,hive登录用户可用,hive密码不管用的问题解决,HiveServer2 Authentication Custom的编写
1、Ranger中对Hive的库、表、列进行授权
在做Hive的访问权限控制的时候,Ranger中对hive中添加了如下Policy权限控制。配置方式如下:
2、默认情况下,Ambari中hiveserver2的HiveServer2 Authentication默认是None,如下:
所以发现在服务器上进行访问hive的时候(类似:hive -n userName -p pwd),发现pwd随便写,都可以进入hive中。这个显然是有问题的。
为了解决上面的问题,这里,我们自己定义HiveServer2 Authentication的认证方式。
3、建立custome认证hive server2的工程,工程结构如下:
3.1 pom.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xxx</groupId><artifactId>custom-hiveserver2-auth</artifactId><version>1.0-SNAPSHOT</version><properties><mysql.jdbc.version>5.1.34</mysql.jdbc.version><hadoop-common.version>3.1.0</hadoop-common.version><hive-common.version>3.1.0</hive-common.version><commons-logging.version>1.2</commons-logging.version></properties><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop-common.version}</version><scope>provided</scope></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-common</artifactId><version>${hive-common.version}</version><scope>provided</scope></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-service</artifactId><version>${hive-common.version}</version><scope>provided</scope></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>${commons-logging.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.jdbc.version}</version><scope>provided</scope></dependency></dependencies></project>
3.2 custom.auth.jdbc.properties的内容如下:
mysql.jdbc.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx?autoReconnect=true&useUnicode=true&characterEncoding=utf8
mysql.jdbc.user=root
mysql.jdbc.password=xxx
mysql.jdbc.driverClass=com.mysql.jdbc.Driver
3.3 MySqlJdbcUtils的内容如下:
package com.xxx.hive.custom.utils;import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;/*** <p>* 功能:连接mysql的公共工具类* </p>** @author tuzq* Copyright 2018 xxx.com, Inc. All rights reserved* @version v1.0*/
public class MySqlJdbcUtils {/** 数据库url **/private static String URL = null;/** 数据库用户名 **/private static String USER = null;/** 密码 **/private static String PWD = null;/** 数据库的driver **/private static String DRIVER_CLASS = null;public MySqlJdbcUtils(String jdbcConfigFile) {try {Properties prop = new Properties();prop.load(new FileInputStream(jdbcConfigFile));URL = prop.getProperty("mysql.jdbc.url");USER = prop.getProperty("mysql.jdbc.user");PWD = prop.getProperty("mysql.jdbc.password");DRIVER_CLASS = prop.getProperty("mysql.jdbc.driverClass");//注册驱动Class.forName(DRIVER_CLASS);} catch (Exception e) {throw new ExceptionInInitializerError(e);}}/*** 获取与指定数据库的连接* @return 获取连接* @throws SQLException 获取连接异常*/public Connection getConnection() throws SQLException {Connection connection = DriverManager.getConnection(URL,USER,PWD);return connection;}/*** 释放资源* @param rs :结果集对象* @param stmt :Statement* @param conn :连接*/public void release(ResultSet rs, Statement stmt,Connection conn) {//判断结果集是否为空,如果不为空,关闭清空if (null != rs) {try {rs.close();} catch (Exception e) {e.printStackTrace();}rs = null;}if (null != stmt) {try {stmt.close();} catch (Exception e) {e.printStackTrace();}stmt = null;}if (null != conn) {try {conn.close();} catch (Exception e) {e.printStackTrace();}conn = null;}}}
3.4 CustomHiveServer2Auth的内容如下
package com.xxx.hive.custom.auth;import com.xxx.hive.custom.utils.MySqlJdbcUtils;
import com.xxx.hive.custom.utils.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;import javax.security.sasl.AuthenticationException;
import java.sql.*;public class CustomHiveServer2Auth implements PasswdAuthenticationProvider {private static final Log log = LogFactory.getLog(CustomHiveServer2Auth.class);@Overridepublic void Authenticate(String username, String password)throws AuthenticationException {HiveConf hiveConf = new HiveConf();Configuration conf = new Configuration(hiveConf);String filePath = conf.get("hive.server2.custom.authentication.jdbc.config.path");log.info("hive.server2.custom.authentication.jdbc.config.path = " + filePath);if (StringUtils.isBlank(filePath)) {throw new AuthenticationException("jdbc config path is null");}Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;Boolean flag = false;MySqlJdbcUtils jdbcUtils = new MySqlJdbcUtils(filePath);try {conn = jdbcUtils.getConnection();String sql = "select " +" ranger_user_name, " +" ranger_password, " +" exec_password" +" FROM " +" xxx" +" WHERE " +" ranger_user_name = ? and exec_password = ?";pstmt = conn.prepareStatement(sql);pstmt.setString(1,username);pstmt.setString(2,password);rs = pstmt.executeQuery();while (rs.next()) {String name = rs.getString("ranger_user_name");String pwd = rs.getString("exec_password");if (StringUtils.isNotBlank(name) && StringUtils.isNotBlank(pwd) && name.equals(username) && pwd.equals(password)) {flag = true;}}} catch (Exception e) {throw new AuthenticationException("认证hive用户名和密码错误", e);} finally {jdbcUtils.release(rs,pstmt,conn);}if (!flag) {throw new AuthenticationException("认证hive用户名和密码错误");}}}
3.5 将此工程打包
然后将该custom-hiveserver2-auth-1.0-SNAPSHOT.jar包放到/usr/hdp/current/hive-client/lib下,并且远程同步到hadoop4,hadoop5,hadoop6上。
3.6 上传custom.auth.jdbc.properties
将custom.auth.jdbc.properties放到/usr/hdp/current/hive-client/conf目录下。(注意的是每台机器上都要有)
4 配置hive相关,做如下配置:
上面的配置相当于是在hive-site.xml中做如下配置:
<property><name>hive.server2.authentication</name><value>CUSTOM</value>
</property><property><name>hive.server2.custom.authentication.class</name><value>com.xxx.hive.custom.auth.CustomHiveServer2Auth</value>
</property><property><name>hive.server2.custom.authentication.jdbc.config.path</name><value>/usr/hdp/current/hive-client/conf/custom.auth.jdbc.properties</value>
</property>
经过上面的配置之后,一定要重新启动hiveserver2,否则会发现自定义HiveServer2 Authentication Custom的功能不起作用。
打个赏呗,您的支持是我坚持写好博文的动力。
Ranger中对hive添加policy字后,hive登录用户可用,hive密码不管用的问题解决,HiveServer2 Authentication Custom的编写相关推荐
- DGI Hive Prohibition Policy(Ranger)
介绍 Apache Ranger为Enterprise Hadoop生态系统提供集中安全性,包括细粒度访问控制和集中审计.在ranger-0.5版本中,Apache Ranger引入了堆栈模型,使新组 ...
- cdh的hive配置中,修改 添加 hive-site.xml 配置 hive 增加用户 role 更改权限
dh的hive配置中,修改 添加 hive-site.xml 配置 CDH版本的hive-site.xml是通过CM配置生成的文件,每次启动,都会根据CM选项还原配置,因此,我们必须用CM界面,找到H ...
- ubuntu中解决ROS--Gazebo添加模型库,解决打开后无模型的问题
ubuntu中解决Gazebo添加模型库,解决打开后无模型的问题 1.在主目录中ctrl+h 下载https://bitbucket.org/osrf/gazebo_models/downl ...
- 周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空的解决方法
周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号.课程名称.选修人数,表中没有的课程列值为空的解决方法 实验前期准备 course表(课程表) 在其中: c ...
- IDEA中Java项目删除Web框架后无法再次添加Web框架解决办法
1.首先在IntelliJ IDEA 2021.2版本下添加Web框架 (1)鼠标右击项目Suke-->选择:Add Framework Support... (2)勾选Web Applicat ...
- hive添加udf函数
1,临时函数 重启hive后函数失效 1)首先在hive中添加jar包 出现added就是成功了 hive (default)> add jar /opt/hiveudf2.jar ; Adde ...
- 将数据追加到html 表格中,将数据添加到数据表中
将数据添加到数据表中 03/30/2017 本文内容 在创建 DataTable 并使用列和约束定义其结构之后,您可以将新的数据行添加到表中. 要添加新行,可将一个新变量声明为 DataRow 类型. ...
- hive sql 报错后继续执行_Hive迁移Presto的技术实践
本文来自OPPO互联网技术团队,如需要转载,请注明出处及作者.欢迎关注我们的公众号:OPPO_tech hive设计之初,就被定位一款离线数仓产品,虽然Hortonworks喊出了Make Apach ...
- 在Service中通过WindowManger添加View的方式来把UI界面显示出来
整体方案 在Service中通过WindowManger添加View的方式来把UI界面显示出来 业务场景 具体场景 IQOO手机,游戏辅助 这种场景能否使用Activity方式来做 使用activit ...
最新文章
- 图的度 知识图谱的一度关系 几度关系
- MySQL基本操作及乱码问题的解决方法
- 大家好!欢迎来到我的博客!
- maven 指定jdk版本打包
- iOS OC与JS交互(WebView监听事件)
- 富爸爸系列 -- 《财务自由》学习笔记之二
- HBase:HBase的rowKey设计技巧
- 旅游新纪元紫山缭绕,静思生活
- 搭建 WordPress 博客教程(超详细)
- 罗马帝国 Ancient Rome 简易修改器
- 【WordNet】词典——omw-1.4下载
- Android事件总线 EventBus3.0用法学习
- 欧洲的计算机博士申请,申请经典案例:欧洲计算机科学专业博士全奖
- 计算机进入桌面黑屏怎么办,电脑开机进入桌面就黑屏怎么解决??
- 阿里云部署Django项目发送邮件时,端口25,465,587上的坑
- led点阵---显示数字或汉字(内含代码+注释+图片)
- 实验8-2-10 IP地址转换
- 堪称神器的5款电脑软件,建议收藏
- jenkins构建触发器设置(定时任务)
- 可以提高工作效率的应用工具,你知道几个呢
热门文章
- java 手机号码归属地_【原创】Java实现手机号码归属地查询
- 读入一个数列和N值,返回按优先级排序的N个数 满足...Python解法
- Python多线程和队列结合demo
- boost::python::bases相关的测试程序
- 使用 Proto 构建了一个简单但功能强大的 lambda 库的测试程序
- boost::mpl模块实现if相关的测试程序
- GDCM:gdcm::Element的测试程序
- Boost:bind绑定和数据成员的测试程序
- Boost:等待和通知操作的模糊测试
- VTK:可视化算法之MarchingCases