hive 整合ranger


一、安裝hive插件

1、解壓安裝

#  tar zxvf ranger-2.0.0-SNAPSHOT-hive-plugin.tar.gz -C /data1/hadoop/

2、修改install.properties

POLICY_MGR_URL=http://192.168.4.50:6080

REPOSITORY_NAME=hivedev

COMPONENT_INSTALL_DIR_NAME=/data1/hadoop/hive   #hive安裝目錄

XAAUDIT.SOLR.ENABLE=true

XAAUDIT.SOLR.URL=http://192.168.4.50:6083/solr/ranger_audits

CUSTOM_USER=hduser   

CUSTOM_GROUP=hduser

 

3、啟動hive插件

# sudo ./enable-hive-plugin.sh

啟動hive插件以后,默認生成hiveserver2-site.xml文件,或者在已經存在的該文件下添加如下信息:

<property>

        <name>hive.security.authorization.enabled</name>

        <value>true</value>

    </property>

    <property>

        <name>hive.security.authorization.manager</name>

        <value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>

    </property>

    <property>

        <name>hive.security.authenticator.manager</name>

        <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>

    </property>

    <property>

        <name>hive.conf.restricted.list</name>

        <value>hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager</value>

</property>

 

4、前台界面配置policy

 

 

 

點擊加號添加服務

 

 

 

如果測試連接ok,說明配置成功。

注:我在配置的時候,這里測試連接失敗,集群的hiveserver2服務啟動,端口也正常監聽,在集群內部使用beeline方式連接到集群進行操作時,提示如下錯誤:

Caused by: java.lang.NoSuchFieldError: REPLLOAD

最后發現是由於hive的版本與ranger hive里面的包版本不一致導致,我使用的hive版本是hive2.x,而ranger2.x對於的hive版本是3.x,所以,在使用的時候要注意版本的問題。

5、配置策略

當創建好服務以后,ranger默認就創建了一些policy,如下:

 

 

 

如果想要添加策略,可以添加右上角的add

6、測試

注意:ranger權限對應hive客戶端是沒有任何作用的,如果想要對hive客戶端做權限認證,則可以使用hive基於sql的安全認證,ranger只是對hiveserver2方式進行權限控制。

(1) 首先使用beeline -u jdbc:hive2://localhost:10000 -n hduser 連接到hive

  • 創建數據庫(shanghai),該條語句可以正常執行。
  • shanghai庫里面創建表(test),則會創建失敗,如下:

0: jdbc:hive2://192.168.0.230:10000> create table test(a string);

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

提示沒有權限

(2) 添加策略,在上圖policy ID10的這條策略里面修改如下:

 

 

 

上述的hduser的新添加的。添加完保存,格一小會,在再beeline模式下執行創建表的測試,看是否成功,當然,這里給了該用戶所有的權限,所以,該用戶還可以進行insert等操作。

 

 

 

(3) 測試其他用戶,比如當前的操作系統上面有一個yjt用戶,我想該用戶對test表有查詢權限,先在beeline模式下測試改用戶是否有select權限,如下:

[hduser@yjt ~]$ beeline -u jdbc:hive2://192.168.0.230:10000 -n yjt   #指定登錄用戶為yjt

0: jdbc:hive2://192.168.0.230:10000> select * from shanghai.test;

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

可以發現,yjt這個用戶對於shanghai數據庫下的test這個表是沒有select權限的,添加權限:

還是在上述的策略10里面添加,如下:

 

 

 

上述保存以后,如下:

 

 

 

策略添加完以后,需要等待策略的下發,權限控制才生效。

注意:策略修改完以后,不用重新啟動beeline

 

 

 

說明策略配置成功,那么上述配置了yjt這個用戶的select權限,是否該用戶真的只有select權限呢?繼續測試改用戶是否真的只有select權限,所以這里使用該用戶insert 一條數據到test表,如下:

 

 

 

額,這還沒到權限認證就開始報錯了,上述的錯誤可以看到該用戶對應hdfs的目錄或者文件沒有寫權限,從這里也可以看到,還可以使用hdfs的權限認證限制hive用戶。修改上述目錄或者文件的權限為777(主要為了測試用戶是否被hive ranger控制,所以這里設置為777,以排除其他干擾。)

[hduser@yjt conf]$ hadoop fs -setfacl -m user:yjt:rwx hdfs://yjt:9000/hive/warehouse/shanghai.db/test/

 

上述添加一條ACL。允許yjt所有操作

0: jdbc:hive2://192.168.0.230:10000> insert into table test values("test insert");

Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [yjt] does not have [UPDATE] privilege on [shanghai/test] (state=42000,code=40000)

這里發現用戶沒有UPDATE權限,說明配置成功(ranger里面,其實沒有insert權限,只有update權限),接下來,在policy里面添加update權限,看是否可以成功的insert數據。

 

 

 

 

 

 

借鑒:

https://www.jianshu.com/p/d9941b8687b7

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM