Hive權限管理


最近遇到一個hive權限的問題,先簡單記錄一下,目前自己的理解不一定對,后續根據自己的理解程度更新


一、hive用戶的概念

  hive本身沒有創建用戶的命令,hive的用戶就是Linux用戶,若當前是用mr用戶輸入hive,進入hive的shell,則當前hive的用戶為mr。

  hive本身不提供用戶和用戶的管理,只做權限控制。

  所以在實際的生產中,容易造成創表和使用表的用戶不統一的情況,針對該情況可以使用beeline的方式連接hive,簡潔的命令如下,具體的使用方式可以百度查找。

1 beeline -u jdbc:hive2//mysql_IP:port -n username

二、hive數據存儲方式

  這里討論基於MySQL的remote方式,這種方式可以支持多用戶的並發模式。

  hiveserver元數據信息是存在MySQL中的,存在MySQL中的元數據信息包括:表的位置、創建時間、數據庫相關、表相關關系以及表的一些授權信息等,沒有具體的內容;物理表是存在HDFS上的。

  因為數據是存在HDFS上的,創表或導入數據時候,當前用戶要對存放數據的HDFS目錄要有權限。若沒有相關權限,會導致很多操作都會報錯。

三、hive權限問題

  1.   在hive-site.xml文件中,開啟權限認證,參數如下:
1 hive.security.authorization.enabled  //默認為false
2 hive.security.authorization.createtable.owner.grants

    2.  在用戶沒有權限的做某項操作的時候,可以通過以下語句賦給用戶ALL的權限或者對應的權限。

1 GRATN ALL TO USER username;

  但是這樣做,有點力度不夠細,比如你想給某個用戶賦select、create的權限,別的權限不給,這樣上述語句就得執行兩遍,當用戶多的時候,這種情況尤為繁瑣。

  在hive中role(角色)這一概念,可以較好的解決上述問題。可以將不同的權限根據需要賦給對應的role,然后將這個role賦給用戶,再將相應的權限賦給這個role,這樣用戶就可以根據role的權限執行相應操作,這樣在權限管理上更加靈活了。

   3.  實際上,所有的Linux系統用戶登錄hive后,都可以執行Grant/revoke操作,這樣假如一個用戶沒有某一權限了,很簡單只需要執行一次grant就行,可以認為hive用戶自己管理自己的權限。

  這個可以在hive-site.xml文件中配置hive.semantic.analyzer.hook,然后實現自己的權限控制類,即可。控制類的實現可上網百度。

  配置好上面的配置項后,相當於是設置超級管理員權限,具體的權限根據自己的權限控制類。此時若要新增一個超級管理員用戶,可以在hive-site.xml文件的hive.users.in.super.administrator中設置。


 update:2018-12-25

  

4.  hive用戶權限管理的簡單流程:

    i)創建超級管理員;

    ii)新建用戶,賦予hive目錄的權限;

    iii)超級管理員進入hive,給指定用戶(組)賦操作權限;

    iv)使用新建用戶連接hive;

4、hive有兩種 授權機制:

總結來說為:1、基於底層HDFS的權限;2、基於標准SQL的grant等命令。具體的在實踐中的注意點已在上面提及。

 

Ref:

https://www.cnblogs.com/yejibigdata/p/6394719.html

 


免責聲明!

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



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