Hive許可權管理
最近遇到一個hive許可權的問題,先簡單記錄一下,目前自己的理解不一定對,後續根據自己的理解程度更新
一、hive使用者的概念
hive本身沒有建立使用者的命令,hive的使用者就是Linux使用者,若當前是用mr使用者輸入hive,進入hive的shell,則當前hive的使用者為mr。
所以在實際的生產中,容易造成創表和使用表的使用者不統一的情況,針對該情況可以使用beeline的方式連線hive,簡潔的命令如下,具體的使用方式可以百度查詢。
1 beeline -u jdbc:hive2//mysql_IP:port -n username
二、hive資料儲存方式
這裡討論基於MySQL的remote方式,這種方式可以支援多使用者的併發模式。
hiveserver元資料資訊是存在MySQL中的,存在MySQL中的元資料資訊包括:表的位置、建立時間、資料庫相關、表相關關係以及表的一些授權資訊等,沒有具體的內容;物理表是存在HDFS上的。
因為資料是存在HDFS上的,創表或匯入資料時候,當前使用者要對存放資料的HDFS目錄要有許可權。若沒有相關許可權,會導致很多操作都會報錯。
三、hive許可權問題
- 在hive-site.xml檔案中,開啟許可權認證,引數如下:
1 hive.security.authorization.enabled //預設為false2 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中設定。
Ref:
https://www.cnblogs.com/yejibigdata/p/6394719.html