Hive權限介紹

jopen 10年前發布 | 111K 次閱讀 Hive 數據挖掘

一、開啟權限 

目前hive支持簡單的權限管理,默認情況下是不開啟,這樣所有的用戶都具有相同的權限,同時也是超級管理員,也就對hive中的所有表都有查看和改動的權利,這樣是不符合一般數據倉庫的安全原則的。Hive可以是基于元數據的權限管理,也可以基于文件存儲級別的權限管理,此次以介紹MetaData權限管理為主。通過以下配置開啟Hive身份認證功能進行權限檢查:    

<property>

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

  <value>true</value>

  <description>enable or disable the hive client authorization</description>

</property>

開啟身份認證后,任何用戶必須被grant privilege才能對實體進行操作。

有一個表創建者對所創建表的權限配置:

<property>

  <name>hive.security.authorization.createtable.owner.grants</name>

  <value>ALL</value>

  <description>the privileges automatically granted to the owner whenever a table gets created.

   An example like "select,drop" will grant select and drop privilege to the owner of the table</description>

</property>

默認配置是NULL,設置成ALL,表示創建者對其創建的表擁有所有的權限,這樣也是比較合理的,同時也可以通過配置在表創建時給某個role賦予權限:

<property>

  <name>hive.security.authorization.createtable.role.grants</name>

  <value>admin_role:ALL</value>

</property>

當然也可以在創建時對user,group賦予權限

二、權限操作

在hive命令行下可以通過set system:user.name;查看當前hive用戶名,也即OS的登錄用戶。

開啟權限認證,在命令行下創建表:

hive>CREATE TABLE auth_test (key int, value string); 

Authorization failed:No privilege 'Create' found for outputs { database:default}.Use show grant to get more details.  

此時會創建失敗,默認情況下用戶是沒有創建表權限的,執行

hive>Grant create on database defaut to user test

后重新創建表則會成功,可以通過 desc extended auth_test查看包括表所有者在內的表詳細信息

默認情況下其他的用戶也是是沒有權限讀取auth_test中任何列,以另外一個用戶登錄os在hive下執行:

hive>Select key from auth_test;

出現以下錯誤:

Authorization failed:No privilege 'Select' found for inputs { database:default, table:auth_test, columnName:key}. Use show grant to get more details.

執行:

grant select(key) on table auth_test to user test1;

后查詢則可以成功

Grant/revoke語法:

grant/revoke priv_type[column_list] on object_type object to/from principal_type principal_name

查看grant 定義:

show grant user user_name on table table_name;

三、Role:

此外Hive還支持基于role的授權認證,role是一組權限的集合,一個role可以被grant給多個用戶,所有擁有role的用戶都具有與此role相匹配的權限,通過對role權限的管理可以間接控制用戶的權限,因此在一個多用戶的大型系統中,role無疑更方便于權限管理。

創建/刪除角色:

Create/drop Role role_name

角色分配/回收:

Grant role role_name to user user_name

Revoke role role_name from user user_name

角色授權:

Grant/revoke priv_type[col_List] on object_type object from/to role role_name

查看role定義:

show role grant role role_name

四、權限MetaData:

登錄hive元數據庫,可以發現以下表:

Db_privs:記錄了User/Role在DB上的權限

Tbl_privs:記錄了User/Role在table上的權限

Tbl_col_privs:記錄了User/Role在table column上的權限

Roles:記錄了所有創建的role

Role_map:記錄了User與Role的對應關系

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!