本發(fā)明涉及云計算
技術領域:
,特別是涉及一種hadoop平臺上面向數(shù)據(jù)字段的訪問控制方法。
背景技術:
:社會信息化和網(wǎng)絡化的迅猛發(fā)展,導致數(shù)據(jù)量以呈爆炸式激增。開源分布式框架hadoop作為大數(shù)據(jù)平臺的標準解決方案,被企業(yè)、科研機構(gòu)及個人所認可。由于hadoop在最初設計時并未考慮到安全問題,隨著其使用量的增加以及使用形式的轉(zhuǎn)變,如:使用hadoop構(gòu)建云存儲、云計算平臺等等,導致hadoop的安全漏洞以及隱患日益凸顯,且由于平臺中承載了龐大的用戶隱私數(shù)據(jù),這就引起了社會各界的擔憂,并成為阻礙其發(fā)展的重要原因之一。因此,云存儲、云計算平臺的安全問題,尤其是廣泛使用的hadoop集群的安全問題成為了近些年來學術界以及工業(yè)界的一個研究熱點。目前最新的hadoop3.0.0-alpha3-snapshot版本中使用kerberos認證體系作為其安全機制的基礎,用于在集群中提供用戶認證、hadoop節(jié)點認證以及hadoop服務認證,從而解決了hadoop早期版本中可能出現(xiàn)的冒充威脅;使用sla(servicelevelauthorization)將指定的hadoop服務授權(quán)給特定的合法用戶,從而更加規(guī)范化、更加安全地管理計算與存儲資源;使用ssl證書(sslcertificates)加密保護瀏覽器/服務器以及節(jié)點間數(shù)據(jù)傳輸?shù)陌踩?;采用https加密傳輸數(shù)據(jù),防止數(shù)據(jù)在傳送過程中被監(jiān)聽、盜取、篡改保證了數(shù)據(jù)的完整性;使用kms(hadoopkeymanagementserver)提供hdfs(hadoopdistributefilesystem)數(shù)據(jù)的透明加密,有效解決了多租戶中的數(shù)據(jù)隔離問題。保存到磁盤中的數(shù)據(jù)以密文形式存儲,還有效地防止了當節(jié)點被黑客攻擊后,后者直接從硬盤中取得數(shù)據(jù)的威脅。使用類unix/linux的訪問機制對主節(jié)點(namenode)中文件訪問進行限制,從而提供了豐富的文件級別的訪問控制策略。綜上,hadoop最新版本中雖然提供了多種安全機制,但是它們都屬于粗粒度的訪問控制,而隨著hadoop使用方式的豐富,對資源的共享者來說急需更加細粒度的訪問控制策略,例如某些字段對于某些具有文件讀取權(quán)限的用戶仍需不可見。解決這一問題的關鍵是對存儲于hdfs中的結(jié)構(gòu)化數(shù)據(jù)使用新的存儲以及讀取方法,使其在存儲以及讀取過程中能有效識別所屬字段,進而使用訪問控制列表(accesscontrollist,acl)對字段的訪問權(quán)限進行控制。然而由于hadoop使用非結(jié)構(gòu)化的數(shù)據(jù)存儲方式,即把資源按字節(jié)流形式進行讀取并直接寫入hdfs,且不同文件的記錄結(jié)構(gòu)不同,故而無法使用統(tǒng)一的配置文件來限制字段訪問權(quán)限。如何針對不同文件設置并存儲字段訪問控制列表以及進行字段級細粒度訪問控制是本發(fā)明的主要任務。技術實現(xiàn)要素:本發(fā)明所要解決的技術問題是提供一種hadoop平臺上面向數(shù)據(jù)字段的訪問控制方法,提高數(shù)據(jù)擁有者對數(shù)據(jù)進行安全管理的靈活性。本發(fā)明解決其技術問題所采用的技術方案是:提供一種hadoop平臺上面向數(shù)據(jù)字段的訪問控制方法,包括以下步驟:(1)文件上傳過程:擴展hadoop中已有的文件上傳命令,設定schema格式,并將原始文件中的數(shù)據(jù)根據(jù)schema解析后上傳到主節(jié)點,在主節(jié)點中保存字段的訪問控制列表,添加編輯日志以及文件鏡像的寫入操作;(2)字段的權(quán)限操作:增加字段權(quán)限操作命令,提供查詢、更新指定文件的字段訪問控制列表操作;在進行字段的權(quán)限操作時,用戶通過客戶端向主節(jié)點發(fā)送請求,主節(jié)點通過驗證用戶的權(quán)限來進行具體的操作;(3)數(shù)據(jù)下載過程:程序通過對原始block數(shù)據(jù)輸出流進行解析,驗證用戶對該字段是否具有讀權(quán)限,進而限定反饋的結(jié)果列。所述步驟(1)具體包括以下子步驟:(11)對原有命令進行擴展,其中,在擴展后的命令中,-fs用來指定字段間的分隔符,schema為上傳文件的路徑;(12)為待上傳的文件建立schema文件作為文件的說明;(13)在原有與主節(jié)點通信消息之上增加schema字段用來向主節(jié)點傳遞schema信息;主節(jié)點獲取到schema信息,將其轉(zhuǎn)化為fieldpermission對象,其權(quán)限為文件的默認權(quán)限,并將該對象作為屬性寫入對應文件的元信息中;最后將此信息寫入編輯日志以便于主節(jié)點重啟后仍能加載該文件的字段訪問控制列表到內(nèi)存中;(14)客戶端得到主節(jié)點反饋的block輸入流后,在原始數(shù)據(jù)流寫入的過程中增加字段識別功能;按行讀取原始流數(shù)據(jù),然后,將數(shù)據(jù)存儲為[(<field,value>,<field,value>,…)]格式,最后寫入到block流中;(15)增加編輯日志與文件鏡像合并過程中的解析方法,具體操作內(nèi)容是將編輯日志中的字段的訪問控制列表進行解析然后合并到文件鏡像內(nèi)對應的記錄中。所述步驟(2)中字段訪問控制列表查看的基本流程是:用戶通過客戶端向主節(jié)點發(fā)送rpc請求,主節(jié)點通過判斷用戶是否是文件的擁有者決定是否反饋該文件的字段訪問控制列表。所述步驟(2)中文件字段權(quán)限以及歸屬的修改流程是:用戶通過客戶端向主節(jié)點發(fā)送rpc請求,主節(jié)點接收請求后,驗證用戶是否具有相關權(quán)限,若具有則記錄編輯日志并更新內(nèi)存中針對于該文件的訪問控制列表信息,若不具有則直接返回拒絕訪問給用戶。所述步驟(3)具體包括以下子步驟:(31)獲取用戶讀取文件的fieldpermission屬性,若存在該屬性則說明用戶正在讀取支持字段級訪問控制的文件,若不存在則說明用戶讀取的是普通文件;(32)驗證用戶是否具有對文件的讀權(quán)限,若具有則允許讀取該文件,進一步判斷用戶讀取的文件類型;若用戶讀取的是普通文件,則進入普通文件的處理流程;若用戶讀取的文件支持字段級訪問控制,則繼續(xù)下述流程;(33)打開block的輸入流,并在數(shù)據(jù)流寫入到本地文件時,增加數(shù)據(jù)流解析,按行讀取數(shù)據(jù),將數(shù)據(jù)解析為(<field,value>,…)格式;(34)通過fieldpermission屬性即可對數(shù)據(jù)的字段進行訪問控制,將未授權(quán)的字段過濾,之后對數(shù)據(jù)格式進行還原,使其能夠還原到上傳前的數(shù)據(jù)存儲形式。有益效果由于采用了上述的技術方案,本發(fā)明與現(xiàn)有技術相比,具有以下的優(yōu)點和積極效果:本發(fā)明增加hadoop對結(jié)構(gòu)化數(shù)據(jù)字段的細粒度訪問控制,豐富了hadoop訪問控制方式,提高了數(shù)據(jù)擁有者對數(shù)據(jù)管理的靈活性。具體實施方式下面結(jié)合具體實施例,進一步闡述本發(fā)明。應理解,這些實施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。此外應理解,在閱讀了本發(fā)明講授的內(nèi)容之后,本領域技術人員可以對本發(fā)明作各種改動或修改,這些等價形式同樣落于本申請所附權(quán)利要求書所限定的范圍。本發(fā)明的實施方式涉及一種hadoop平臺上面向數(shù)據(jù)字段的訪問控制方法,包括以下步驟:步驟1、文件上傳過程:擴展原始上傳文件命令,設定schema格式,并將原始文件中的數(shù)據(jù)根據(jù)schema解析后上傳到namenode,在namenode中保存字段的訪問權(quán)限列表,添加editlog以及fsimage的寫入操作;1.1)為原有的hdfsdfs–put[-f][-p][-l][-d]<localsrc>...<dst>命令進行擴展,擴展后的命令格式為:hdfsdfs–put[-f][-p][-l][-d][-fs<fieldseparator>-s<schema>]<localsrc>...<dst>。其中-fs用來指明字段間的分隔符,schema為上傳文件的路徑;1.2)為待上傳的文件建立schema文件作為文件的說明,schema文件包含字段的名稱以及類型。其順序?qū)谖募械淖侄雾樞?,以json格式保存,其格式展示如下所示:上段中fields字段保存文件中的所有字段信息,name用于存儲字段名稱,type用于存儲字段類型。fields字段內(nèi)記錄有序,隱含index屬性用來標識字段的邏輯位置信息。設計fields來保存所有字段的目的是,未來一旦添加新的功能,可以保證原有的解析過程不變;1.3)由于hadoop文件上傳客戶端需要和主節(jié)點通過rpc通信獲取blocks,且namenode維護文件的元信息,故需要在原有與主節(jié)點通信消息之上增加schema字段用來向namenode傳遞schema信息。主節(jié)點獲取到schema信息,將其轉(zhuǎn)化為fieldpermission對象,其權(quán)限為文件的默認權(quán)限,并將該對象作為屬性寫入對應文件的元信息中。最后將此信息寫入editlog以便于namenode重啟后仍能加載該文件的字段訪問控制列表到內(nèi)存中。1.4)客戶端得到主節(jié)點反饋的block輸入流后,在原始數(shù)據(jù)流寫入的過程中增加字段識別功能。按行讀取原始流數(shù)據(jù)。然后,將數(shù)據(jù)存儲為[(<field,value>,<field,value>,…)]格式,最后寫入到block流中,使用該結(jié)構(gòu)進行存儲的目的是在后續(xù)讀取過程中能夠?qū)?shù)據(jù)的字段進行權(quán)限判定;1.5)增加editlog與fsimage合并過程中的解析方法,具體操作內(nèi)容是將editlog中的字段的訪問控制列表進行解析然后合并到fsimage內(nèi)對應的記錄中。步驟2、字段的權(quán)限操作:增加字段權(quán)限操作命令,提供查詢、更新指定文件的字段訪問控制列表操作。2.1)為了能夠更新字段的訪問控制列表,需要增加新的hdfs命令,新增加的命令如下表1所示:表1字段權(quán)限相關命令用途命令格式查看指定文件hdfsdfs-fshow<filepath>修改權(quán)限hdfsdfs-fchmodmode<filepath>fields…修改歸屬hdfsdfs–fchown[owner][:[group]]<filepath>fields…2.2)文件的字段訪問控制列表查看的基本流程是,用戶通過客戶端向主節(jié)點發(fā)送rpc請求,主節(jié)點通過判斷用戶是否是文件的擁有者決定是否反饋該文件的字段訪問控制列表;2.3)文件字段權(quán)限以及歸屬的修改流程是用戶通過客戶端向主節(jié)點發(fā)送rpc請求,主節(jié)點接收請求后,驗證用戶是否具有相關權(quán)限,若具有則記錄editlog并更新內(nèi)存中針對于該文件的訪問控制列表信息,若不具有則直接返回permissiondeny給用戶。步驟3、數(shù)據(jù)下載過程:程序通過對原始block數(shù)據(jù)輸出流進行解析,驗證用戶對該字段是否具有讀權(quán)限,進而限定反饋的結(jié)果列。3.1)獲取用戶讀取文件的fieldpermission屬性,若存在該屬性則說明用戶正在讀取支持字段級訪問控制的文件,若不存在則說明用戶讀取的是普通文件;3.2)驗證用戶是否具有對文件的讀權(quán)限,若具有則允許讀取該文件,進一步判斷用戶讀取的文件類型。若用戶讀取的是普通文件,則進入普通文件的處理流程;若用戶讀取的文件支持字段級訪問控制,則繼續(xù)下述流程;3.3)打開block的輸入流,并在數(shù)據(jù)流寫入到本地文件時,增加數(shù)據(jù)流解析。按行讀取數(shù)據(jù),將數(shù)據(jù)解析為(<field,value>,…)格式;3.4)通過fieldpermission屬性即可對數(shù)據(jù)的字段進行訪問控制,將未授權(quán)的字段過濾,之后對數(shù)據(jù)格式進行還原,使其能夠還原到上傳前的數(shù)據(jù)存儲形式。當前第1頁12