最近遇到乙個hive許可權的問題,先簡單記錄一下,目前自己的理解不一定對,後續根據自己的理解程度更新
一、hive使用者的概念
hive本身沒有建立使用者的命令,hive的使用者就是linux使用者,若當前是用mr使用者輸入hive,進入hive的shell,則當前hive的使用者為mr。
hive本身不提供使用者和使用者的管理,只做許可權控制。
1 beeline -u jdbc:hive2//mysql_ip:port -n username
二、hive資料儲存方式
這裡討論基於mysql的remote方式,這種方式可以支援多使用者的併發模式。
hiveserver元資料資訊是存在mysql中的,存在mysql中的元資料資訊包括:表的位置、建立時間、資料庫相關、表相關關係以及表的一些授權資訊等,沒有具體的內容;物理表是存在hdfs上的。
因為資料是存在hdfs上的,創表或匯入資料時候,當前使用者要對存放資料的hdfs目錄要有許可權。若沒有相關許可權,會導致很多操作都會報錯。
三、hive許可權問題
在hive-site.xml檔案中,開啟許可權認證,引數如下:
1hive.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.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:
Hive許可權管理
角色的新增 刪除 檢視 設定 create role role name 建立角色 drop role role name 刪除角色 set role role name all none 設定角色 show current roles 檢視當前具有的角色 show roles 檢視所有存在的角色 ...
hive表級許可權控制 Hive許可權管理
一.storage based authorization in the metastore server 基於儲存的授權,可以對metastore中的元資料進行保護,但是沒有提供更加細粒度的訪問控制 例如 列級別 行級別等 啟用當前認證方式後,dfs,add,delete,compile,rese...
hive預設許可權管理
1 hive cli手動輸入這三個設定開啟hive acl set hive.security.authorization.enabled true set hive.security.authorization.createtable.owner.grants all set hive.secur...