Hive中metastore如何認證和授權

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

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供武定企業(yè)網(wǎng)站建設,專注與網(wǎng)站建設、網(wǎng)站設計、H5響應式網(wǎng)站、小程序制作等業(yè)務。10年已為武定眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。

2 Metastore

2.1 Metastore服務介紹

metastore主要維護2種數(shù)據(jù):

  • 數(shù)據(jù)庫、表、分區(qū)等數(shù)據(jù),算是DDL操作

  • 權限、角色類的數(shù)據(jù),算是DCL操作

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

第一種數(shù)據(jù)的操作如下:

Hive中metastore如何認證和授權

第二種數(shù)據(jù)的操作如下:

Hive中metastore如何認證和授權

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

  • ThreadLocal<RawStore> threadLocalMS

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

  • List<MetaStorePreEventListener> preListeners

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

  • List<MetaStoreEventListener> listeners

    當上述第一種數(shù)據(jù)發(fā)生變化后,會調用上述MetaStoreEventListener執(zhí)行一些處理

2.2 Metastore服務的認證和驗權

由上述可以了解到,在metastore的數(shù)據(jù)發(fā)生修改之前可以進行驗權操作,hive默認提供了一個AuthorizationPreEventListener實現(xiàn)了上述MetaStorePreEventListener接口執(zhí)行一些驗權操作

Hive中metastore如何認證和授權

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

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

涉及到2個接口:

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

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

下面分別來詳細說明

2.2.1 Metastore服務的認證

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

Hive中metastore如何認證和授權

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

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

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

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

  • setUgi方式:

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

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

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

    • client端向服務器端發(fā)送操作數(shù)據(jù)的請求,服務器端取出連接中的ugi信息,使用ugi的doas方法來執(zhí)行操作

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

  • 其他:

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

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

2.2.2 Metastore服務的驗權

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

Hive中metastore如何認證和授權

默認是DefaultHiveMetastoreAuthorizationProvider。

  • DefaultHiveMetastoreAuthorizationProvider:

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

  • StorageBasedAuthorizationProvider:

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

3 總結

總結如下:

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

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

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

Hive中metastore如何認證和授權

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

網(wǎng)站名稱:Hive中metastore如何認證和授權
URL網(wǎng)址:http://bm7419.com/article28/goejjp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、關鍵詞優(yōu)化、手機網(wǎng)站建設動態(tài)網(wǎng)站、小程序開發(fā)、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設