Hive 權(quán)限控制

說明

  • 認(rèn)證(authentication):驗證用戶所用的身份是否是對的
  • 授權(quán)(authorization):驗證用戶所用身份操作是否有權(quán)限

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

配置

1.開啟啟身份認(rèn)證后似芝,任何用戶必須被grant privilege才能對實體進(jìn)行操作那婉。
hive.security.authorization.enabled = true

2.表示創(chuàng)建表時自動賦予一些用戶或角色相應(yīng)的權(quán)限
hive.security.authorization.createtable.owner.grants = ALL
hive.security.authorization.createtable.role.grants = admin_role:ALL
hive.security.authorization.createtable.user.grants = user1,user2:select;user3:create

3.<!-- 假如出現(xiàn)以下錯誤: Error while compiling statement: FAILED: SemanticException The current builtin authorization in Hive is incomplete and disabled. 需要配置下面的屬性 -->
hive.security.authorization.task.factory = org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl

角色管理

--創(chuàng)建和刪除角色  
create role role_name;  
drop role role_name;  
--展示所有roles  
show roles  
--賦予角色權(quán)限  
grant select on database db_name to role role_name;    
grant select on [table] t_name to role role_name;    
--查看角色權(quán)限  
show grant role role_name on database db_name;   
show grant role role_name on [table] t_name;   
--角色賦予用戶  
grant role role_name to user user_name  
--回收角色權(quán)限  
revoke select on database db_name from role role_name;  
revoke select on [table] t_name from role role_name;  
--查看某個用戶所有角色  
show role grant user user_name;  

超級權(quán)限

Hive的權(quán)限功能還有一個需要完善的地方,那就是“超級管理員”党瓮。
Hive中沒有超級管理員详炬,任何用戶都可以進(jìn)行Grant/Revoke操作,為了完善“超級管理員”,必須添加hive.semantic.analyzer.hook配置呛谜,并實現(xiàn)自己的權(quán)限控制類在跳。

hive.semantic.analyzer.hook = com.mycompany.AuthHook

  1. 編譯下面代碼(需要導(dǎo)入依賴antlr-runtime-3.4.jar,hive-exec-0.12.0-cdh5.1.2.jar)
  2. 打包成jar放置在hive的classpath下(客戶端hive shell所在主機(jī)的hive-env.sh 中的環(huán)境變量:HIVE_AUX_JARS_PATH指向的路徑,此配置僅對hive shell生效)
  3. hive-site.xml中添加參數(shù)hive.aux.jars.path(目前僅支持本地路徑) = file:///usr/lib/hive/lib/HiveAuthHook.jar(此配置僅對hive server有效)隐岛,最后重啟hiveserver猫妙。
package com.newland;

import org.apache.hadoop.hive.ql.parse.ASTNode;
import org.apache.hadoop.hive.ql.parse.AbstractSemanticAnalyzerHook;
import org.apache.hadoop.hive.ql.parse.HiveParser;
import org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContext;
import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.session.SessionState;

public class AuthHook extends AbstractSemanticAnalyzerHook {
    private static String[] admin = { "root", "hadoop" };

    @Override
    public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context,
            ASTNode ast) throws SemanticException {
        switch (ast.getToken().getType()) {
        case HiveParser.TOK_CREATEDATABASE:
        case HiveParser.TOK_DROPDATABASE:
        case HiveParser.TOK_CREATEROLE:
        case HiveParser.TOK_DROPROLE:
        case HiveParser.TOK_GRANT:
        case HiveParser.TOK_REVOKE:
        case HiveParser.TOK_GRANT_ROLE:
        case HiveParser.TOK_REVOKE_ROLE:
            String userName = null;
            if (SessionState.get() != null
                    && SessionState.get().getAuthenticator() != null) {
                userName = SessionState.get().getAuthenticator().getUserName();
            }
            if (!admin[0].equalsIgnoreCase(userName)
                    && !admin[1].equalsIgnoreCase(userName)) {
                throw new SemanticException(userName
                        + " can't use ADMIN options, except " + admin[0] + ","
                        + admin[1] + ".");
            }
            break;
        default:
            break;
        }
        return ast;
    }

//  public static void main(String[] args) throws SemanticException {
//      String[] admin = { "admin", "root" };
//      String userName = "root";
//      for (String tmp : admin) {
//          System.out.println(tmp);
//          if (!tmp.equalsIgnoreCase(userName)) {
//              throw new SemanticException(userName
//                      + " can't use ADMIN options, except " + admin[0] + ","
//                      + admin[1] + ".");
//          }
//      }
//  }
}

權(quán)限管理

--賦予用戶權(quán)限
grant [SELECT|...] on [database|table] [db_name|tbl_name ] to user [username];
grant select(tab_col) on table [tbl_name] to user [username];
--回收用戶權(quán)限
revoke [ALL|...] on [database|table] [db_name|tbl_name ] from user [username];
--查看用戶權(quán)限
show grant user [username] on [database|table] [db_name|tbl_name];  

HIVE支持以下權(quán)限:
權(quán)限名稱 含義
ALL 所有權(quán)限
ALTER 允許修改元數(shù)據(jù)(modify metadata data of object)---表信息數(shù)據(jù)
UPDATE 允許修改物理數(shù)據(jù)(modify physical data of object)---實際數(shù)據(jù)
CREATE 允許進(jìn)行Create操作
DROP 允許進(jìn)行DROP操作
INDEX 允許建索引(目前還沒有實現(xiàn))
LOCK 當(dāng)出現(xiàn)并發(fā)的使用允許用戶進(jìn)行LOCK和UNLOCK操作
SELECT 允許用戶進(jìn)行SELECT操作
SHOW_DATABASE 允許用戶查看可用的數(shù)據(jù)庫

附:

登錄hive元數(shù)據(jù)庫,可以發(fā)現(xiàn)以下表:
Db_privs:記錄了User/Role在DB上的權(quán)限
Tbl_privs:記錄了User/Role在table上的權(quán)限
Tbl_col_privs:記錄了User/Role在table column上的權(quán)限
Roles:記錄了所有創(chuàng)建的role
Role_map:記錄了User與Role的對應(yīng)關(guān)系

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聚凹,一起剝皮案震驚了整個濱河市割坠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妒牙,老刑警劉巖彼哼,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異湘今,居然都是意外死亡敢朱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門摩瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴签,“玉大人,你說我怎么就攤上這事旗们◎玖ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵蚪拦,是天一觀的道長杖剪。 經(jīng)常有香客問我,道長驰贷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任洛巢,我火速辦了婚禮括袒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稿茉。我一直安慰自己锹锰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布漓库。 她就那樣靜靜地躺著恃慧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渺蒿。 梳的紋絲不亂的頭發(fā)上痢士,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音茂装,去河邊找鬼怠蹂。 笑死善延,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的城侧。 我是一名探鬼主播易遣,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫌佑!你這毒婦竟也來了豆茫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屋摇,失蹤者是張志新(化名)和其女友劉穎揩魂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摊册,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡肤京,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茅特。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忘分。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖白修,靈堂內(nèi)的尸體忽然破棺而出妒峦,到底是詐尸還是另有隱情,我是刑警寧澤兵睛,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布肯骇,位于F島的核電站,受9級特大地震影響祖很,放射性物質(zhì)發(fā)生泄漏笛丙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一假颇、第九天 我趴在偏房一處隱蔽的房頂上張望胚鸯。 院中可真熱鬧,春花似錦笨鸡、人聲如沸姜钳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哥桥。三九已至,卻和暖如春激涤,著一層夾襖步出監(jiān)牢的瞬間拟糕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留已卸,地道東北人佛玄。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像累澡,于是被迫代替她去往敵國和親梦抢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容