日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hive插件 ranger_Apache Ranger及Hive权限控制

發(fā)布時(shí)間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive插件 ranger_Apache Ranger及Hive权限控制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Ranger概述

1.Ranger簡(jiǎn)介

Apache Ranger提供一個(gè)集中式安全管理框架, 并解決授權(quán)和審計(jì)。它可以對(duì)Hadoop生態(tài)的組件如HDFS、Yarn、Hive、Hbase等進(jìn)行細(xì)粒度的數(shù)據(jù)訪問(wèn)控制。通過(guò)操作Ranger控制臺(tái),管理員可以輕松的通過(guò)配置策略來(lái)控制用戶訪問(wèn)權(quán)限。

本文章介紹Ranger與Hive集成過(guò)程,與使用方法

2.Ranger包含以下組件

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

Ranger UserSync 用于將Unix系統(tǒng)或LDAP用戶/組同步到RangerAdmin

Ranger TagSync 同步Atlas中的Tag信息

Ranger KMS

000.jpg

3.Ranger依賴的組件:

JDK 運(yùn)行RangerAdmin RangerKMS

RDBMS 1.存儲(chǔ)授權(quán)策略 2.存儲(chǔ)Ranger 用戶/組 3.存儲(chǔ)審核日志

Solr(可選) 存儲(chǔ)審核日志

HDFS(可選) 存儲(chǔ)審核日志

Kerberos(可選) 確保所有請(qǐng)求都被認(rèn)證

4.目前Ranger0.7支持的Plugin

HDFS

YARN

SOLR

ATLAS

HBASE

KNOX

KAFKA

HIVE

STORM

NIFI

二、Ranger編譯安裝

說(shuō)明: Ranger可以在Ambari上直接安裝。開(kāi)啟AmbariHivePlugin也可以直接在頁(yè)面上操作。

但如果跟ApacheHive集成的話,需要先編譯出ApacheRanger的HivePlugin來(lái)

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.通過(guò)Ambari安裝Ranger

前置條件:

1.必須有 MySQL/Oracle/Postgres/MSSQL/SQL Anywhere Server 數(shù)據(jù)庫(kù)實(shí)例

2.在RangerAdmin主機(jī)上 必須安裝DB Client

3.確保DB Admin用戶可以再其他機(jī)器上登陸(用來(lái)創(chuàng)建ranger用戶)

4.執(zhí)行下面的命令 導(dǎo)入JDBC驅(qū)動(dòng) ambari-server setup –jdbc-db={database-type} –jdbc-driver={/jdbc/driver/path}

#導(dǎo)入JDBC驅(qū)動(dòng):

#(MySQL JDBC Driver Jar包下載頁(yè)面: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頁(yè)面上操作

#ApacheHive的話 需要執(zhí)行以下命令:

# 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 環(huán)境變量

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.開(kāi)啟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實(shí)例

001.png

002.png

三、Ranger Hive權(quán)限控制

1.準(zhǔn)備測(cè)試數(shù)據(jù)

點(diǎn)擊hivebeta 開(kāi)始Hive權(quán)限控制

003.png

根據(jù)我們剛才的配置,hive用戶擁有all權(quán)限

使用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

#創(chuàng)建ranger測(cè)試庫(kù)

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)

#創(chuàng)建測(cè)試表

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)

# 表數(shù)據(jù)

[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

# 導(dǎo)入數(shù)據(jù)

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(對(duì)庫(kù)、表、列的授權(quán))

# 在Ranger UserSync機(jī)器上創(chuàng)建測(cè)試用戶rangeruser1

[root@l-node1 ~]# useradd rangeruser1

# 測(cè)試未授權(quán)的用戶

[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; 等訪問(wèn)全部被拒絕

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用戶授權(quán)

點(diǎn)擊Add New Policy給rangeruser1用戶授予ranger_test_db.t_user.* select權(quán)限

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)

#創(chuàng)建表 被拒絕

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(委托管理員)說(shuō)明: 如果一個(gè)Condition中的 用戶/組 為Delegate Admin,那么該 用戶/組 可以修改上面resource的權(quán)限 并可以把此resource授權(quán)給其他人

也可以使用SQL進(jìn)行授權(quán)(授權(quán)過(guò)的記錄同樣會(huì)顯示在RangerAdmin上):

GRANT SELECT ON TABLE ranger_test_db.t_user TO USER fengjie;

3.Masking(動(dòng)態(tài)列屏蔽)

動(dòng)態(tài)列屏蔽: 可以將一列數(shù)據(jù)進(jìn)行屏蔽操作 如哈希、加密、打馬賽克等

添加一個(gè)Masking Policy

005.png

006.png

Select Masking Option里面填Mask的選項(xiàng),默認(rèn)有: 顯示前4位、顯示后4位、哈希、Null值、日期類型僅顯示年等。我們這里使用Custom自定義,

其實(shí)就是寫Select子句 可以根據(jù)邏輯自己實(shí)現(xiàn),也可使用UDF。本例中我們使用concat(substr(phone,1,7),'****')將手機(jī)號(hào)的后四位屏蔽掉

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(行級(jí)別過(guò)濾)

行級(jí)別過(guò)濾: 可以過(guò)濾掉行數(shù)據(jù)。比如訂單表,北京的員工僅允許看北京的訂單數(shù)據(jù),其他地區(qū)的數(shù)據(jù)被強(qiáng)制過(guò)濾掉

添加一個(gè)Row Level Filter Policy

007.png

008.png

Row Level Filter里面填Filter的過(guò)濾規(guī)則,其實(shí)就是寫Where子句。本例中我們使用name <> 'hanze'將 name為’hanze’的用戶過(guò)濾掉

#hanze用戶已經(jīng)被過(guò)濾掉,不顯示在結(jié)果中了

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的權(quán)限控制

Apache Ranger可以和Apache Atlas(數(shù)據(jù)治理,元數(shù)據(jù)倉(cāng)儲(chǔ))組件一起使用,它可以定義一種基于標(biāo)簽的安全服務(wù),通過(guò)使用標(biāo)簽對(duì)文件和數(shù)據(jù)資產(chǎn)進(jìn)行分類,并控制用戶和用戶組對(duì)一系列標(biāo)簽的訪問(wèn)。

Apache Atlas里面可以對(duì)資源打Tag。打了Tag后 我們可以在這里根據(jù)Tag來(lái)控制權(quán)限

(注意:因需要集成Atlas 此功能暫未驗(yàn)證)

1.添加TagService

009.png

010.png

2.添加TagPolicy

011.png

012.png

上圖的Policy,實(shí)現(xiàn)了這樣的場(chǎng)景:

產(chǎn)品組(product)可以訪問(wèn)帶”TAG”標(biāo)簽的資源; 但實(shí)習(xí)生(intern)不靠譜 實(shí)習(xí)生沒(méi)有訪問(wèn)權(quán)限; 但因?qū)嵙?xí)生中的meizi表現(xiàn)突出 給他賦予訪問(wèn)權(quán)限

3.授權(quán)流程:

013.png

先檢查基于Tag的權(quán)限是否拒絕,如果拒絕的話,報(bào)錯(cuò)退出。

如果不拒絕,再檢查基于Resource的權(quán)限拒不拒絕。

如果不拒絕,再檢查Tag的權(quán)限允不允許,Resource的權(quán)限允不允許。

五、Audit審計(jì)記錄

1.Access

此頁(yè)面記錄每次授權(quán)的信息 包括策略id、時(shí)間、訪問(wèn)用戶、訪問(wèn)的資源、訪問(wèn)的類型、授權(quán)結(jié)果等信息。可以根據(jù)條件進(jìn)行搜索

開(kāi)啟此功能需要先安裝Solr

014.png

2.Admin

此頁(yè)面記錄對(duì)策略的操作

015.png

3.Login Sessions

此頁(yè)面記錄登陸RangerAdmin的操作

016.png

4.Plugins

記錄Plugins的同步策略

017.png

5.Pugins Status

Plugin的狀態(tài)

018.png

六、RestAPI

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

比如 添加服務(wù)、更新服務(wù)、刪除服務(wù)、搜索服務(wù)、獲取策略、創(chuàng)建策略、更新策略、刪除策略、搜索策略等

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"

]

}

]

}

參考文檔

總結(jié)

以上是生活随笔為你收集整理的hive插件 ranger_Apache Ranger及Hive权限控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。