中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive中metastore如何認證和授權

發布時間:2021-12-10 10:06:56 來源:億速云 閱讀:688 作者:小新 欄目:云計算

這篇文章將為大家詳細講解有關Hive中metastore如何認證和授權,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

2 Metastore

2.1 Metastore服務介紹

metastore主要維護2種數據:

  • 數據庫、表、分區等數據,算是DDL操作

  • 權限、角色類的數據,算是DCL操作

metastore通過開啟thrift rpc服務,開啟對上述2種數據的操作接口,接口即 ThriftHiveMetastore.Iface 內容見下圖

第一種數據的操作如下:

Hive中metastore如何認證和授權

第二種數據的操作如下:

Hive中metastore如何認證和授權

metastore對該接口的實現為:HMSHandler,它主要有以下屬性:

  • ThreadLocal<RawStore> threadLocalMS

    RawStore主要用于和數據庫打交道,存儲上述2種相關數據,RawStore和當前線程進行綁定,默認實現是ObjectStore

  • List<MetaStorePreEventListener> preListeners

    當上述2種數據將要發生變化的時候,都會首先調用上述MetaStorePreEventListener執行一些預處理操作,如驗證一個用戶是否有權限來執行該操作

  • List<MetaStoreEventListener> listeners

    當上述第一種數據發生變化后,會調用上述MetaStoreEventListener執行一些處理

2.2 Metastore服務的認證和驗權

由上述可以了解到,在metastore的數據發生修改之前可以進行驗權操作,hive默認提供了一個AuthorizationPreEventListener實現了上述MetaStorePreEventListener接口執行一些驗權操作

Hive中metastore如何認證和授權

從上面可以看到,僅僅對DDL操作進行了驗權,并沒有對DCL操作進行驗權,這也是一個比較奇怪的地方。即如果你能直連到metastore服務,就可以隨意的進行授權操作。

接下來我們詳細看看這個認證和授權的過程

涉及到2個接口:

  • HiveMetastoreAuthenticationProvider:認證提供者,用于用戶的認證,一個HiveMetastoreAuthenticationProvider對象對應一個用戶,該對象包含用戶的userName和groups信息

  • HiveMetastoreAuthorizationProvider:授權提供者,用于用戶的驗權

下面分別來詳細說明

2.2.1 Metastore服務的認證

上述HiveMetastoreAuthenticationProvider的默認實現是HadoopDefaultMetastoreAuthenticator,通過hadoop中的UserGroupInformation來獲取當前用戶名和組的信息,如下所示

Hive中metastore如何認證和授權

metastore的client端用戶是如何被傳遞到這里的呢?

這就涉及到了metastore開啟的thrift rpc服務了,metastore使用的是thrift的TThreadPoolServer來作為server。這種模式下,會啟動一個線程池,每來一個客戶端連接就取出一個線程來專門處理該連接,該連接就一直占用該線程了,這種方式就是傳統的BIO方式,能夠支持的并發量比較小。

metastore開啟的rpc服務分成3種類型:

  • 使用sasl方式: 是一種安全的方式,使用kerberos認證用戶的身份,這一部分內容比較多,可能之后再詳細分析這一塊。

  • setUgi方式:

    是一種非安全的方式,即并沒有對用戶的身份進行合法性驗證。當hive.metastore.execute.setugi=true時即采用這種模式。這種模式下如下操作:

    • client端會通過set_ugi方法來向服務器端傳遞用戶的ugi信息

    • 服務器端將用戶的ugi信息綁定到當前連接上

    • client端向服務器端發送操作數據的請求,服務器端取出連接中的ugi信息,使用ugi的doas方法來執行操作

    • client占用服務器端的一個線程,會創建出一個HiveMetastoreAuthenticationProvider對象,該對象在創建過程中要獲取當前的ugi信息,即獲取到上述ugi信息,并且把client的上述HiveMetastoreAuthenticationProvider對象綁定在該線程中,至此便可以得到client的用戶信息。而groups信息則是通過hadoop默認的方式即獲取本metastore服務所在的機器上,該用戶所屬的groups信息。

  • 其他:

    就僅僅是將client的ip綁定到當前線程上,就沒有所謂的用戶信息了

上述的sasl也是通過ugi.doas方式來供后續獲取用戶信息的,但是sasl多了用戶身份合法性的驗證過程。而setUgi方式client端傳過來什么用戶就認為是什么用戶,所以只有sasl方式才是安全的方式,其他2種是非安全方式。

2.2.2 Metastore服務的驗權

上一部分我們獲取到了用戶信息,下面就是要驗證用戶是否有權限執行相關操作,驗權接口就是HiveMetastoreAuthorizationProvider,實現類如下:

Hive中metastore如何認證和授權

默認是DefaultHiveMetastoreAuthorizationProvider。

  • DefaultHiveMetastoreAuthorizationProvider:

    根據userName和groups信息從數據庫中獲取權限信息來驗證用戶是否有權限

  • StorageBasedAuthorizationProvider:

    判斷一個用戶是否對數據庫、表等是否有權限依據該用戶在HDFS上對這些文件是否有對應的權限

3 總結

總結如下:

  • metastore只做了DDL操作的相關認證,并沒有做DCL操作的認證,一旦通過hive cli連接metastore,用戶就可以隨意進行賦權操作

  • 根據用戶和用戶所屬的groups信息來獲取權限,大數據系統中用戶和groups關系的維護最好是自己統一維護,而不是借助默認的linux機器上用戶和groups的關系,不然之后會有很多麻煩的。

畫了一個默認情況下簡單的示意圖如下:

Hive中metastore如何認證和授權

關于“Hive中metastore如何認證和授權”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福贡县| 鄂温| 凌云县| 台山市| 金塔县| 大姚县| 德昌县| 淮安市| 昌图县| 寻甸| 石嘴山市| 丽水市| 安仁县| 大同县| 承德县| 张家界市| 哈密市| 浦东新区| 伊川县| 宜君县| 锡林浩特市| 梅州市| 洱源县| 涪陵区| 丘北县| 习水县| 蕲春县| 南召县| 昌图县| 迁西县| 内江市| 惠安县| 昌吉市| 辉县市| 乐亭县| 乐山市| 怀来县| 长沙市| 屯门区| 靖安县| 灵台县|