首頁/ 汽車/ 正文

資料治理(十五):Ranger 管理 Hive 安全

Ranger 管理 Hive 安全

一、配置 HiveServer2

訪問 Hive 有兩種方式:HiveServer2 和 Hive Client,Hive Client 需要 Hive 和 Hadoop 的 jar 包,配置環境。HiveServer2 使得連線 Hive 的 Client 從 Yarn 和 HDFS 叢集中獨立出來,不需要每個節點都配置 Hive 和 Hadoop 的 jar 包和一系列環境。

Ranger 管理 Hive 許可權只能針對 HiveServer2 jdbc 方式連線,所以這裡需要配置 HiveServer2。

配置 HiveServer2 步驟如下:

1)在 Hive 服務端配置 hive-site。xml

#在Hive 服務端 $HIVE_HOME/conf/hive-site。xml中配置:<!—— 配置hiveserver2 ——> hive。server2。thrift。port 10000 hive。server2。thrift。bind。host 192。168。179。4<!—— 配置hiveserver2使用的zookeeper ——> hive。zookeeper。quorum node3:2181,node4:2181,node5:2181

注意:“hive。zookeeper。quorum”搭建 hiveserver2HA 使用配置項,可以不配置,如果不配置啟動 hiveServer2 時一直連線本地 zookeeper,導致大量錯誤日誌(/tmp/root/hive。log),從而導致透過 beeline 連線當前 node1 節點的 hiveserver2 時不穩定,會有連線不上錯誤資訊。

2)在每臺 Hadoop 節點配置 core-site。xml,記得傳送到所有節點

<!—— 配置代理訪問使用者,如果不配置下列資訊 hive的jdbc連線會報錯 ——> hadoop。proxyuser。root。hosts * hadoop。proxyuser。root。groups *

3)重啟 HDFS ,Hive ,在 Hive 服務端啟動 Metastore 和 HiveServer2 服務

[root@node1 conf]# hive ——service metastore &[root@node1 conf]# hive ——service hiveserver2 > /root/hiveserver2_log。txt &

4)在客戶端透過 beeline 連線 Hive

[root@node3 test]# beelinebeeline> !connect jdbc:hive2://node1:10000 rootEnter password for jdbc:hive2://node1:10000: **** #可以輸入任意密碼,沒有驗證0: jdbc:hive2://node1:10000> show tables;

資料治理(十五):Ranger 管理 Hive 安全

二、安裝 Ranger-hive-plugin

我們可以使用 Ranger 對 Hive 資料安全進行管理,這裡需要安裝 Hive 外掛“ranger-2。1。0-hive-plugin”,此外掛只能對 jdbc 方式連線 Hive 的請求進行許可權管理,不能對 hive-cli 客戶端方式進行許可權管理(一般安裝 Hive 的節點才能使用 Hive 客戶端訪問)。步驟如下:

1)遠端傳送編譯好的“hive-plugin”到 node1 節點“/software”目錄下,並解壓

遠端傳送“/software/apache-ranger-2。1。0/target/”下的“ranger-2。1。0-hive-plugin。tar。gz”到 node1 節點“/software”下:

[root@node3 /]# scp /software/apache-ranger-2。1。0/target/ranger-2。1。0-hive-plugin。tar。gz node1:/software/#在node1節點操作[root@node1 ~]# cd /software/[root@node1 software]# tar -zxvf 。/ranger-2。1。0-hive-plugin。tar。gz

2)配置“install。properties”檔案

進入到“/software/ranger-2。1。0-hive-plugin”目錄中,修改“install。properties”檔案:

[root@node1 ranger-2。1。0-hive-plugin]# vim install。properties#配置Ranger-Admin訪問地址POLICY_MGR_URL=http://node1:6080#配置Hive 倉庫名稱,可以自定義,需要後期在Ranger中使用REPOSITORY_NAME=hive_repo#配置Hive的安裝目錄COMPONENT_INSTALL_DIR_NAME=/software/hive-3。1。2/#配置使用外掛的使用者和使用者組CUSTOM_USER=rootCUSTOM_GROUP=root

3)執行“enable-hive-plugin。sh”指令碼啟動 hive 外掛

進入到“/software/ranger-2。1。0-hive-plugin”目錄下,執行如下命令,啟用外掛:

[root@node1 ~]# cd /software/ranger-2。1。0-hive-plugin[root@node1 ranger-2。1。0-hive-plugin]# enable-hive-plugin。sh

三、配置 Ranger 連線 Hive 服務

安裝好以上 Hive-Plugin 之後,重新啟動 HDFS,啟動 Hive,HiveMetastore、HiveServer2 等。如果想要對連線 Hive 的使用者進行表、列許可權管理,需要在 Ranger 中新增對應的 Hive 服務,才可以使用 Ranger 透過這個服務配置每個使用者對 Hive 庫、表、列許可權管理。配置如下:

1)啟動 HDFS,啟動 Hive、Hive MeateStore、Hive Server2

#啟動HDFS,在node1節點上啟動Hive metastore[root@node1 conf]# start-all。sh[root@node1 conf]# hive ——service metastore &[root@node1 conf]# hive ——service hiveserver2 > /root/hiveserver2_log。txt &

2)在 Ranger 頁面中配置 Hive

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

注意,以上引數解釋如下:

“Service Name”填寫當前 Hive 服務名稱,與 Hive 外掛中“install。properties”檔案配置引數“REPOSITORY_NAME”保持一致。

配置的“user”和“password”也是與“install。properties”檔案中配置的“CUSTOM_USER=root”、“CUSTOM_GROUP=root”保持一致。

“jdbc。url”填寫“jdbc:hive2://node1:10000”即可,這裡連線 node1。

新增完成之後:

資料治理(十五):Ranger 管理 Hive 安全

3)連線測試是否可以 jdbc 方式連線上 Hive

資料治理(十五):Ranger 管理 Hive 安全

注意:這裡連線時,單機測試連線時需要等待一段時間,才能正常連線。

四、Ranger 對 Hive 使用者進行許可權管理

檢視 Ranger 中配置好的 Hive 許可權管理服務:

資料治理(十五):Ranger 管理 Hive 安全

修改上圖中只有 root 使用者對所以庫、表、列具有操作許可權,修改後如下:

資料治理(十五):Ranger 管理 Hive 安全

在 node3 中登入 beeline 連線 node1 hive:

#node3 透過beeline連線Hive[root@node3 ~]# beeline#連線HiveServer2 jdbc連線beeline> !connect jdbc:hive2://node1:10000#這裡使用者名稱目前可以隨意輸入,在Hive中沒有校驗,這裡可以透過Hive配置有哪些用#戶可以連線Hive,然後透過Ranger再管理這些使用者的細粒度訪問許可權。從上圖中可以#看到目前只有root使用者可以訪問表資料,可以使用非root使用者測試,這裡使用#“diaochan”使用者:Enter username for jdbc:hive2://node1:10000: diaochan#由於Hive中沒有檢驗密碼,所以這裡可以隨意輸入任意密碼Enter password for jdbc:hive2://node1:10000: ****#查詢庫下的表,沒有許可權。0: jdbc:hive2://node1:10000> show tablesError: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [daochan] does not have [USE] privilege on [default] (state=42000,code=40000)#重新使用root使用者登入beeline,查詢對應的表,有許可權[root@node3 ~]# beelinebeeline> !connect jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: rootEnter password for jdbc:hive2://node1:10000: *** #密碼隨意0: jdbc:hive2://node1:10000> show tables;

資料治理(十五):Ranger 管理 Hive 安全

下面在 Hive 中建立兩張表進行許可權管理:

#在Hive中建立兩張表create table student (id int,name string,age int) row format delimited fields terminated by ‘\t’;create table score (id int,name string,score int) row format delimited fields terminated by ‘\t’;

上傳資料附件,將以上檔案上傳到 node3“/software/test”下

資料治理(十五):Ranger 管理 Hive 安全

1 zhangsan 182 lisi 193 wangwu 204 maliu 215 tianqi 226 zhaoba 23

資料治理(十五):Ranger 管理 Hive 安全

1 zhangsan 1002 lisi 2003 wangwu 3004 maliu 4005 tianqi 5006 zhaoba 600

#載入資料:hive> load data local inpath ‘/root/test/students。txt’ into table student;hive> load data local inpath ‘/root/test/scores。txt’ into table score;

許可權需求:對使用者“user1”配置以上兩張表的訪問和修改許可權,對使用者“user2”配置對兩張表只有訪問許可權。

配置步驟如下:

1)在 node1 節點建立兩個使用者,密碼為對應使用者名稱稱

#建立兩個使用者user1,和user2[root@node1 ~]# useradd user1[root@node1 ~]# passwd user1[root@node1 ~]# useradd user2[root@node1 ~]# passwd user2

2)在 Ranger 頁面,開啟“hive_repo”服務,配置如下:

配置“Student”表許可權:

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

最終配置好如下:

資料治理(十五):Ranger 管理 Hive 安全

3)登入 Hive Beeline 測試:

向 HDFS 中插入資料時,user1,user2 使用者需要操作 HDFS 和 Yarn,所以這裡將 HDFS 中 Hive 對應的路徑“/user/hive/warehouse”中的“/user”路徑許可權改成“777”,將 Yarn 使用目錄“tmp”路徑許可權改成“777”

[root@node5 bin]# hdfs dfs -chmod -R 777 /user[root@node5 bin]# hdfs dfs -chmod -R 777 /tmp

測試登入 user1,對“student”、“score”表有操作和修改許可權,如下:

[root@node3 ~]# beelinebeeline> !connect jdbc:hive2://node1:100000: jdbc:hive2://node1:10000> select * from student;

資料治理(十五):Ranger 管理 Hive 安全

0: jdbc:hive2://node1:10000> select * from score;

資料治理(十五):Ranger 管理 Hive 安全

#向表student、score中插入資料,也能透過。0: jdbc:hive2://node1:10000> insert into student values (7,“aa”,24);0: jdbc:hive2://node1:10000> insert into score values (7,“bb”,700);

測試登入 user2,對“student”、“score”表有操作和修改許可權,如下:

[root@node3 software]# beelinebeeline> !connect jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: user2Enter password for jdbc:hive2://node1:10000: *** #密碼隨便輸入0: jdbc:hive2://node1:10000> select * from student;

資料治理(十五):Ranger 管理 Hive 安全

0: jdbc:hive2://node1:10000> select * from score;

資料治理(十五):Ranger 管理 Hive 安全

#測試向“student”和“score”中插入資料,沒有對應許可權:0: jdbc:hive2://node1:10000> insert into table student values (8,“cc”,25);Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [user2] does not have [UPDATE] privilege on [default/student] (state=42000,code=40000)0: jdbc:hive2://node1:10000> insert into table score values (8,“dd”,800);Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [user2] does not have [UPDATE] privilege on [default/score] (state=42000,code=40000)

許可權需求:對使用者“user3”配置對“student”表中“id、name”兩列有查詢許可權,其他列沒有查詢許可權。

配置步驟如下:

1)在 node1 節點中新增使用者“user3”

#建立兩個使用者user3[root@node1 ~]# useradd user3[root@node1 ~]# passwd user3

2)給使用者“user3”配置表“student”的訪問許可權

資料治理(十五):Ranger 管理 Hive 安全

3)測試

#user3登入beeline[root@node3 software]# beelinebeeline> !connect jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: user3#訪問表“student”資料,“age”列無法查詢,select * 查詢不允許0: jdbc:hive2://node1:10000> select id ,name from student;

資料治理(十五):Ranger 管理 Hive 安全

許可權需求:對使用者“user1”訪問表“student”時,“age”列進行空值輸出,進行脫敏。

配置步驟如下:

1)給使用者“user1”配置表“student”的“Masking”訪問許可權

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

2)登入 Hive Beeline 測試

[root@node3 software]# beelinebeeline> !connect jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: user10: jdbc:hive2://node1:10000> select * from student;

資料治理(十五):Ranger 管理 Hive 安全

許可權需求:對使用者“user2”訪問表“student”時,“age”列只能插敘小於等於 20 的行資料。

配置步驟如下:

1)給使用者“user1”配置表“student”的“Masking”訪問許可權

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

資料治理(十五):Ranger 管理 Hive 安全

2)登入 Hive Beeline 測試

[root@node3 software]# beelinebeeline> !connect jdbc:hive2://node1:10000Enter username for jdbc:hive2://node1:10000: user2#查詢只有3行滿足條件的資料0: jdbc:hive2://node1:10000> select * from student;

資料治理(十五):Ranger 管理 Hive 安全

相關文章

頂部