一、Ranger概述

1.Ranger简介

Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。

本文章介绍Ranger与Hive集成过程,与使用方法

2.Ranger包含以下组件

Ranger Admin 用户管理策略,提供WebUI和RestFul接口

Ranger UserSync 用于将Unix系统或LDAP用户/组同步到RangerAdmin

Ranger TagSync 同步Atlas中的Tag信息

Ranger KMS

000.jpg

3.Ranger依赖的组件:

JDK 运行RangerAdmin RangerKMS

RDBMS 1.存储授权策略 2.存储Ranger 用户/组 3.存储审核日志

Solr(可选) 存储审核日志

HDFS(可选) 存储审核日志

Kerberos(可选) 确保所有请求都被认证

4.目前Ranger0.7支持的Plugin

HDFS

YARN

SOLR

ATLAS

HBASE

KNOX

KAFKA

HIVE

STORM

NIFI

二、Ranger编译安装

说明: Ranger可以在Ambari上直接安装。开启AmbariHivePlugin也可以直接在页面上操作。

但如果跟ApacheHive集成的话,需要先编译出ApacheRanger的HivePlugin来

1.Apache Ranger编译

#Install maven git gcc mysql

git clone https://github.com/apache/ranger.git

cd ranger

git checkout release-ranger-0.7.1

mvn clean compile package assembly:assembly install -DskipTests

ls target

2.通过Ambari安装Ranger

前置条件:

1.必须有 MySQL/Oracle/Postgres/MSSQL/SQL Anywhere Server 数据库实例

2.在RangerAdmin主机上 必须安装DB Client

3.确保DB Admin用户可以再其他机器上登陆(用来创建ranger用户)

4.执行下面的命令 导入JDBC驱动 ambari-server setup –jdbc-db={database-type} –jdbc-driver={/jdbc/driver/path}

#导入JDBC驱动:

#(MySQL JDBC Driver Jar包下载页面:https://dev.mysql.com/downloads/connector/j/5.0.html)

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.0.8.tar.gz

tar -zxvf mysql-connector-java-5.0.8.tar.gz

ambari-server setup --jdbc-db=mysql --jdbc-driver=mysql-connector-java-5.0.8/mysql-connector-java-5.0.8-bin.jar

3.安装RangerHivePlugin

登陆RangerAdmin: http://l-node1.data.beta.cn0:6080

#AmbariHive可直接在Ambari页面上操作

#ApacheHive的话 需要执行以下命令:

# 1.拷贝RangerHivePlugin安装包

cp target/ranger-0.7.1-hive-plugin.tar.gz /usr/apache

tar -zxvf /usr/apache/ranger-0.7.1-hive-plugin.tar.gz

# 2.编辑install.properties文件

#编辑POLICY_MGR_URL 指向RangerAdmin 例如 POLICY_MGR_URL=http://l-node1.data.beta.cn0:6080

#编辑REPOSITORY_NAME 要与RangerAdmin中ServiceName配置一致 例如 REPOSITORY_NAME=hivebeta

vim /usr/apache/ranger-0.7.1-hive-plugin/install.properties

# 3.配置JAVA_HOME HIVE_HOME 环境变量

echo "export JAVA_HOME=/usr/java/jdk1.8.0_141" >> /etc/bashrc

echo "export HIVE_HOME=/usr/apache/hive" >> /etc/bashrc

source /etc/bashrc

# 4.开启plugin

sudo sh /usr/apache/ranger-0.7.1-hive-plugin/enable-hive-plugin.sh

#显示Ranger Plugin for hive has been enabled. Please restart hive to ensure that changes are effective.即成功

# 5.重启HiveServer

4.RangerAdmin上面配置要管理的HiveServer实例

001.png

002.png

三、Ranger Hive权限控制

1.准备测试数据

点击hivebeta 开始Hive权限控制

003.png

根据我们刚才的配置,hive用户拥有all权限

使用beeline登陆

[hive@l-node3 hive]$ bin/beeline

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/apache/apache-hive-2.3.0-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/hdp/2.6.1.0-129/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Beeline version 2.3.0 by Apache Hive

beeline> !connect jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_ha

Connecting to jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_ha

Enter username for jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/: hive

Enter password for jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/:

17/08/03 11:49:28 [main]: INFO jdbc.HiveConnection: Connected to l-node5.data.beta.cn0:10000

Connected to: Apache Hive (version 2.3.0)

Driver: Hive JDBC (version 2.3.0)

Transaction isolation: TRANSACTION_REPEATABLE_READ

#创建ranger测试库

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> create database ranger_test_db;

No rows affected (0.259 seconds)

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> use ranger_test_db;

No rows affected (0.114 seconds)

#创建测试表

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> CREATE TABLE t_user

. . . . . . . . . . . . . . . . . . . . . . .> (name STRING,phone STRING)

. . . . . . . . . . . . . . . . . . . . . . .> ROW FORMAT DELIMITED

. . . . . . . . . . . . . . . . . . . . . . .> FIELDS TERMINATED BY '\t'

. . . . . . . . . . . . . . . . . . . . . . .> STORED AS TEXTFILE;

No rows affected (0.317 seconds)

# 表数据

[hive@l-node3 hive]$ hadoop fs -cat /tmp/t_user.data

meizi 18518760001

xuaner 18518760002

afa 18518760003

hanze 18518760004

xupeng 18518760005

xiaofeng 18518760006

shuoshuo 18518760007

# 导入数据

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> LOAD DATA INPATH '/tmp/t_user.data' INTO TABLE t_user;

No rows affected (0.523 seconds)

#查询成功

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> select * from t_user;

+--------------+---------------+

| t_user.name | t_user.phone |

+--------------+---------------+

| meizi | 18518760001 |

| xuaner | 18518760002 |

| afa | 18518760003 |

| hanze | 18518760004 |

| xupeng | 18518760005 |

| xiaofeng | 18518760006 |

| shuoshuo | 18518760007 |

+--------------+---------------+

7 rows selected (0.11 seconds)

2.HiveAccess(对库、表、列的授权)

# 在Ranger UserSync机器上创建测试用户rangeruser1

[root@l-node1 ~]# useradd rangeruser1

# 测试未授权的用户

[hive@l-node3 hive]$ bin/beeline

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/apache/apache-hive-2.3.0-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/hdp/2.6.1.0-129/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Beeline version 2.3.0 by Apache Hive

beeline> !connect jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_ha

Connecting to jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_ha

#使用rangeruser1用户登陆

Enter username for jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/: rangeruser1

Enter password for jdbc:hive2://l-node1.data.beta.cn0:2181,l-node2.data.beta.cn0:2181,l-node3.data.beta.cn0:2181/:

17/08/03 12:30:58 [main]: INFO jdbc.HiveConnection: Connected to l-node5.data.beta.cn0:10000

Connected to: Apache Hive (version 2.3.0)

Driver: Hive JDBC (version 2.3.0)

Transaction isolation: TRANSACTION_REPEATABLE_READ

# use db; select table; 等访问全部被拒绝

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> use ranger_test_db;

Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [rangeruser1] does not have [USE] privilege on [ranger_test_db] (state=42000,code=40000)

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> select * from ranger_test_db.t_user;

Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [rangeruser1] does not have [SELECT] privilege on [ranger_test_db/t_user/*] (state=42000,code=40000)

给rangeruser1用户授权

点击Add New Policy给rangeruser1用户授予ranger_test_db.t_user.* select权限

004.png

#select成功

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> use ranger_test_db;

No rows affected (0.127 seconds)

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> select * from t_user;

+--------------+---------------+

| t_user.name | t_user.phone |

+--------------+---------------+

| meizi | 18518760001 |

| xuaner | 18518760002 |

| afa | 18518760003 |

| hanze | 18518760004 |

| xupeng | 18518760005 |

| xiaofeng | 18518760006 |

| shuoshuo | 18518760007 |

+--------------+---------------+

7 rows selected (0.12 seconds)

#删除表 被拒绝

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> drop table t_user;

Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [rangeruser1] does not have [DROP] privilege on [ranger_test_db/t_user] (state=42000,code=40000)

#创建表 被拒绝

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> CREATE TABLE t_user2

. . . . . . . . . . . . . . . . . . . . . . .> (name STRING,phone STRING)

. . . . . . . . . . . . . . . . . . . . . . .> ROW FORMAT DELIMITED

. . . . . . . . . . . . . . . . . . . . . . .> FIELDS TERMINATED BY '\t'

. . . . . . . . . . . . . . . . . . . . . . .> STORED AS TEXTFILE;

Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [rangeruser1] does not have [CREATE] privilege on [ranger_test_db/t_user2] (state=42000,code=40000)

Delegate Admin(委托管理员)说明: 如果一个Condition中的 用户/组 为Delegate Admin,那么该 用户/组 可以修改上面resource的权限 并可以把此resource授权给其他人

也可以使用SQL进行授权(授权过的记录同样会显示在RangerAdmin上):

GRANT SELECT ON TABLE ranger_test_db.t_user TO USER fengjie;

3.Masking(动态列屏蔽)

动态列屏蔽: 可以将一列数据进行屏蔽操作 如哈希、加密、打马赛克等

添加一个Masking Policy

005.png

006.png

Select Masking Option里面填Mask的选项,默认有: 显示前4位、显示后4位、哈希、Null值、日期类型仅显示年等。我们这里使用Custom自定义,

其实就是写Select子句 可以根据逻辑自己实现,也可使用UDF。本例中我们使用concat(substr(phone,1,7),'****')将手机号的后四位屏蔽掉

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> select * from t_user;

+--------------+---------------+

| t_user.name | t_user.phone |

+--------------+---------------+

| meizi | 1851876**** |

| xuaner | 1851876**** |

| afa | 1851876**** |

| hanze | 1851876**** |

| xupeng | 1851876**** |

| xiaofeng | 1851876**** |

| shuoshuo | 1851876**** |

+--------------+---------------+

7 rows selected (0.173 seconds)

4.Row Level Filter(行级别过滤)

行级别过滤: 可以过滤掉行数据。比如订单表,北京的员工仅允许看北京的订单数据,其他地区的数据被强制过滤掉

添加一个Row Level Filter Policy

007.png

008.png

Row Level Filter里面填Filter的过滤规则,其实就是写Where子句。本例中我们使用name <> 'hanze'将 name为’hanze’的用户过滤掉

#hanze用户已经被过滤掉,不显示在结果中了

0: jdbc:hive2://l-node1.data.beta.cn0:2181,l-> select * from t_user;

+--------------+---------------+

| t_user.name | t_user.phone |

+--------------+---------------+

| meizi | 1851876**** |

| xuaner | 1851876**** |

| afa | 1851876**** |

| xupeng | 1851876**** |

| xiaofeng | 1851876**** |

| shuoshuo | 1851876**** |

+--------------+---------------+

6 rows selected (0.164 seconds)

四、基于TAG的权限控制

Apache Ranger可以和Apache Atlas(数据治理,元数据仓储)组件一起使用,它可以定义一种基于标签的安全服务,通过使用标签对文件和数据资产进行分类,并控制用户和用户组对一系列标签的访问。

Apache Atlas里面可以对资源打Tag。打了Tag后 我们可以在这里根据Tag来控制权限

(注意:因需要集成Atlas 此功能暂未验证)

1.添加TagService

009.png

010.png

2.添加TagPolicy

011.png

012.png

上图的Policy,实现了这样的场景:

产品组(product)可以访问带”TAG”标签的资源; 但实习生(intern)不靠谱 实习生没有访问权限; 但因实习生中的meizi表现突出 给他赋予访问权限

3.授权流程:

013.png

先检查基于Tag的权限是否拒绝,如果拒绝的话,报错退出。

如果不拒绝,再检查基于Resource的权限拒不拒绝。

如果不拒绝,再检查Tag的权限允不允许,Resource的权限允不允许。

五、Audit审计记录

1.Access

此页面记录每次授权的信息 包括策略id、时间、访问用户、访问的资源、访问的类型、授权结果等信息。可以根据条件进行搜索

开启此功能需要先安装Solr

014.png

2.Admin

此页面记录对策略的操作

015.png

3.Login Sessions

此页面记录登陆RangerAdmin的操作

016.png

4.Plugins

记录Plugins的同步策略

017.png

5.Pugins Status

Plugin的状态

018.png

六、RestAPI

以上在RangerAdminWeb上操作的东西 都可以在RestAPI里面操作。

比如 添加服务、更新服务、删除服务、搜索服务、获取策略、创建策略、更新策略、删除策略、搜索策略等

API name Create Policy

Request Type POST

Request URL service/public/v2/api/policy

Request Parameters Application/json

Hive Example:

{

"policyName": "FinancePolicy",

"databases": "finance,hr",

"tables": "invoices,emps",

"columns": "amt, emp_id",

"udfs": "",

"description": "Hive Policy",

"repositoryName": "hivedev",

"repositoryType": "hive",

"tableType": "Exclusion",

"columnType": "Inclusion",

"isEnabled": true,

"isAuditEnabled": true,

"permMapList": [

{

"userList": [

"john",

"andrew"

],

"permList": [

"Write",

"Admin"

]

},

{

"userList": [

"hr"

],

"groupList": [

"admin"

],

"permList": [

"Read",

"Write",

"Admin"

]

}

]

}

参考文档

hive插件 ranger_Apache Ranger及Hive权限控制相关推荐

  1. 如何对Hive Metastore进行权限控制

    本文首发微信公众号:码上观世界 中国"红武士"--刘粹刚 东方古国,炎黄子孙,五千余载,历史文明;. 诗礼传承,世界同钦,仁爱与人,道德长青. 濒江近海,有我南京,十朝都会,物阜文 ...

  2. Hive访问权限控制

    hive有两种类型的权限控制方式: 一.通过Hcatcalog API访问hive数据的方式,实际是通过访问metastore元数据的形式访问hive数据,这类有MapReduce,impala,pi ...

  3. Ranger中对hive添加policy字后,hive登录用户可用,hive密码不管用的问题解决,HiveServer2 Authentication Custom的编写

    1.Ranger中对Hive的库.表.列进行授权 在做Hive的访问权限控制的时候,Ranger中对hive中添加了如下Policy权限控制.配置方式如下: 2.默认情况下,Ambari中hivese ...

  4. Hive结合Apache Ranger进行数据脱敏

    Hive概述         Apache Hive是构建在Hadoop之上的数据仓库,支持通过SQL接口查询分析存储在Hadoop中的数据. 在Hive出现之前,数据分析人员需要编写MapReduc ...

  5. hive插件 ranger_hive 整合ranger

    一.安装hive插件 1.解压安装 #  tar zxvf ranger-2.0.0-SNAPSHOT-hive-plugin.tar.gz -C /data1/hadoop/ 2.修改install ...

  6. hive表级权限控制_Hive权限控制和超级管理员的实现

    Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 先决条件: 为了使用Hi ...

  7. 【精华】Linux用户Hive权限控制实践

    1.困惑:    hadoop和hive通过客户机接入到集群生产,客户机是linux系统,那么linux用户和hive角色之间是什么关系呢? 或者说,怎么控制linux系统用户可以细粒度访问hive的 ...

  8. Amazon EMR 配置 Hive 对Hue用户的权限控制

    Hue 创建用户后无权限访问Hive 在hue中创建完用户后,还需要在主节点中创建这个user并在hive和hadoop中为这个user赋予权限,经过我这边的测试,步骤如下: Hue添加用户 添加管理 ...

  9. hive表级权限控制_数据库权限管理:表、行、列级别的权限控制

    权限规则 1. 在配有主从集群时建议在主节点上做权限相关操作 2. 只有管理员和超级管理员才有将数据导入至表中的权限 3. 管理员用户赋予的是以整表为单位的权限,所有能赋予的权限为create/sel ...

最新文章

  1. 计算机网络基础实验简答题,计算机网络基础实验报告.doc
  2. php 这样写日志 sleep你会了吗?
  3. 大学毕业出路利弊浅谈
  4. EEPROM的操作---SPI接口和I2C接口
  5. win10存储池_3个光威480G SSD组WIN10存储池,深度测试到底值不值得搞
  6. Redis学习总结(7)——怎么保持缓存与数据库一致性?
  7. 基于类的软件复用技术
  8. python iterable对象_一篇文章看懂 Python iterable,
  9. mysql 约束条件 外键 forigen key 介绍
  10. lambda函数if_现代 C++:Lambda 表达式
  11. 一些基础的java编程代码
  12. 网页换肤,模块换肤,jQuery的Cookie插件使用(转)
  13. 现代软件工程 教课心得
  14. JavaWeb学习总结(五十一)——邮件的发送与接收原理
  15. IP地址和子网掩码的作用是什么
  16. 深入理解python--线程、进程与协程(1)
  17. mysql double转字符串_MySQL 字符串 转 int/double CAST与CONVERT 函数的用法
  18. findContours函数详细解析
  19. 线性插值函数的基函数构造
  20. 【特征检测】HOG特征算法

热门文章

  1. profile 安卓work_androidWorkProfileGeneralDeviceConfiguration 资源类型
  2. 在 VS 类库项目中 Add Service References 和 Add Web References 的区别
  3. SharePoint 2013开发入门探索(二)- 列表操作
  4. 爬取网易云音乐歌曲特色榜单信息
  5. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
  6. java web 连接linux_如何将javaweb项目部署到linux下
  7. CCNA-第三篇-OSI模型-上
  8. 【CodeForces - 485B】Valuable Resources (贪心,水题,几何相关)
  9. 【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)
  10. 【AtCoder - 2554】Choose Integers (找规律,或枚举)