禹熹 方亞超 洪丁節(jié)
關(guān)鍵詞:流式數(shù)據(jù)總線;數(shù)據(jù)安全;訪問控制;數(shù)據(jù)視圖;SQL
中圖法分類號:TP311 文獻(xiàn)標(biāo)識碼:A
1技術(shù)背景
隨著企業(yè)內(nèi)數(shù)據(jù)的急劇膨脹和快速增長,如何在企業(yè)內(nèi)不同應(yīng)用間高效、安全的共享數(shù)據(jù),避免數(shù)據(jù)孤島效應(yīng),成為現(xiàn)代企業(yè)數(shù)字化轉(zhuǎn)型的巨大挑戰(zhàn)。一方面,數(shù)據(jù)的整合和共享是“讓企業(yè)內(nèi)數(shù)據(jù)用起來”的前提,只有實現(xiàn)“數(shù)據(jù)的平民化”,使企業(yè)內(nèi)數(shù)據(jù)取數(shù).用數(shù)便捷高效,才能打通企業(yè)內(nèi)各業(yè)務(wù)線的七經(jīng)八脈,讓數(shù)據(jù)信息得以快速觸達(dá)企業(yè)各處,為企業(yè)創(chuàng)造有效價值、預(yù)警不利風(fēng)險;另一方面,數(shù)據(jù)是企業(yè)的核心資產(chǎn),數(shù)據(jù)安全是每個企業(yè)都需要重視的課題,實現(xiàn)便捷的數(shù)據(jù)訪問的同時,企業(yè)數(shù)據(jù)的安全應(yīng)同樣得到保障。數(shù)據(jù)的訪問須滿足“最小權(quán)限訪問”原則,通過賦予數(shù)據(jù)訪問者滿足其業(yè)務(wù)需求的必要、最小的數(shù)據(jù)集,可極大地降低數(shù)據(jù)泄露和濫用的風(fēng)險,從而保護(hù)企業(yè)的權(quán)益。
在企業(yè)內(nèi),通過構(gòu)建基于OLAP關(guān)系型數(shù)據(jù)庫的傳統(tǒng)數(shù)據(jù)倉庫或基于Hadoop生態(tài)的大數(shù)據(jù)平臺,歸集源自企業(yè)內(nèi)外的數(shù)據(jù),可以實現(xiàn)數(shù)據(jù)的集中,提供統(tǒng)一的數(shù)據(jù)訪問服務(wù)。為保障數(shù)據(jù)的訪問安全,在基于RDMBS的數(shù)據(jù)倉庫中,可按數(shù)據(jù)訪問需求創(chuàng)建數(shù)據(jù)訪問視圖(view)并授權(quán)用戶訪問?;诖髷?shù)據(jù)Hadoop生態(tài)構(gòu)建數(shù)據(jù)平臺,可通過Ranger或Sentr等大數(shù)據(jù)體系安全訪問控制組件,并結(jié)合數(shù)據(jù)私有視圖的方式實現(xiàn)對大數(shù)據(jù)表的行列級訪問控制,從而保障數(shù)據(jù)的訪問安全。
傳統(tǒng)的數(shù)據(jù)倉庫和大數(shù)據(jù)平臺可提供原始明細(xì)數(shù)據(jù)和匯總數(shù)據(jù)的訪問,然而其提供的數(shù)據(jù)主要基于T-1日的歷史數(shù)據(jù),無法提供時效性更高的數(shù)據(jù)訪問。基于高吞吐消息隊列打造企業(yè)級實時的流水?dāng)?shù)據(jù)總線,將實時數(shù)據(jù)流水統(tǒng)一歸集至數(shù)據(jù)總線,可以為企業(yè)內(nèi)各系統(tǒng)提供各種實時數(shù)據(jù)流的數(shù)據(jù)訂閱服務(wù),然而目前卻缺少有效的數(shù)據(jù)訪問控制機制來滿足數(shù)據(jù)安全性需求:(1)消息隊列提供訪問控制機制粒度較粗,通?;趩畏輸?shù)據(jù)整體,無法提供細(xì)粒度的行列級訪問控制,如Apache Kafka通過ACL控制對數(shù)據(jù)topic的訪問,但不支持對topic內(nèi)數(shù)據(jù)內(nèi)容的訪問控制,阿里云Datahub服務(wù)基于阿里云通用訪問控制RAM機制控制對Datahub資源的訪問,但目前只實現(xiàn)了針對項目級(Project)、主題級(Topic)以及訂閱級(Subscription)三級的控制,并沒有更細(xì)粒度的數(shù)據(jù)范圍控制能力;(2)為支持細(xì)粒度的訪問控制,可采用新建應(yīng)用二次轉(zhuǎn)移的方式為下游系統(tǒng)按需篩選、過濾,提供對應(yīng)的數(shù)據(jù)和字段,但這會導(dǎo)致數(shù)據(jù)冗余存儲、應(yīng)用開發(fā)成本高、部署結(jié)構(gòu)以及上線流程復(fù)雜等問題。
本文提出了一種基于SQL語義在流式數(shù)據(jù)總線(Apache Kafka)上的行列級數(shù)據(jù)訪問控制方式,解決企業(yè)實時數(shù)據(jù)總線的細(xì)粒度數(shù)據(jù)訪問控制問題,如圖1所示。
2設(shè)計思路
按照批量數(shù)據(jù)平臺上的訪問控制方式,通過在流式數(shù)據(jù)總線上建立類關(guān)系型數(shù)據(jù)庫( RDBMS)的數(shù)據(jù)表(Table)、數(shù)據(jù)視圖(View)能力,并對數(shù)據(jù)視圖進(jìn)行賦權(quán),實現(xiàn)對流式實時數(shù)據(jù)總線上的數(shù)據(jù)的行列級訪問控制。
2.1通過建立數(shù)據(jù)表(Table),賦予流式數(shù)據(jù)總線上元數(shù)據(jù)管理能力
流式數(shù)據(jù)總線中的消息中間件通常以主題(Topic)形式存儲二進(jìn)制數(shù)據(jù),不具備數(shù)據(jù)內(nèi)容、數(shù)據(jù)字段等元信息管理能力,這也導(dǎo)致其數(shù)據(jù)訪問控制的粒度僅能到Topic級別。通過為流式總線上Topic中存儲數(shù)據(jù)建立數(shù)據(jù)表,將數(shù)據(jù)字段名稱、數(shù)據(jù)字段類型、數(shù)據(jù)字段的解析器(Deserializer)等涉及數(shù)據(jù)內(nèi)容的信息保存下來,賦予流式數(shù)據(jù)總線對數(shù)據(jù)內(nèi)容的元數(shù)據(jù)管理能力,從而支持對Topic中保存的二進(jìn)制數(shù)據(jù)進(jìn)一步解析、處理的能力。
2.2通過建立數(shù)據(jù)視圖(View),實現(xiàn)數(shù)據(jù)行列級數(shù)據(jù)訪問控制
不同業(yè)務(wù)系統(tǒng)對同一份數(shù)據(jù)的訪問需求不盡相同,因此,需要根據(jù)實際需求制定不同的安全控制規(guī)則。在數(shù)據(jù)表上支持建立私有的數(shù)據(jù)視圖,為下游數(shù)據(jù)應(yīng)用系統(tǒng)按需創(chuàng)建不同的視圖并賦予其訪問權(quán)限。控制業(yè)務(wù)系統(tǒng)僅能訪問業(yè)務(wù)所需的數(shù)據(jù)和字段,支持行級過濾、列級過濾,并通過UDF函數(shù)支持?jǐn)?shù)據(jù)字段的處理,以支持脫敏、加密等數(shù)據(jù)字段的處理,滿足了最小化數(shù)據(jù)訪問原則,無須再進(jìn)行定制化開發(fā)數(shù)據(jù)處理應(yīng)用。
2.3擴展實現(xiàn)流式數(shù)據(jù)總線的SQL能力
在數(shù)據(jù)表和數(shù)據(jù)視圖的基礎(chǔ)上,支持對流式數(shù)據(jù)總線的進(jìn)一步擴展,使其建立較完備的SQL訪問能力,支持RDBMS常用SQL語義:(1)支持創(chuàng)建、修改或刪除表/視圖/用戶(CREATE TABLE/VIEW/USER);(2)支持從數(shù)據(jù)表和視圖上查詢數(shù)據(jù)(SELECT…FROM TABLE/VIEW WHERE);(3)支持對用戶賦權(quán)( GRANT/REVOKE SELECT/INSERT
.. TO/FROM USER);支持(4)查看表/視圖/用戶信息DESCRIBE TABLE/VIEW/USER等。
通過建立基于流式數(shù)據(jù)總線的SQL訪問能力,不僅能滿足日常運維查詢需求,同時使流式數(shù)據(jù)總線像數(shù)據(jù)庫一樣簡單易用。
2.4訪問接口兼容
為不侵入流式數(shù)據(jù)總線的內(nèi)部,和原系統(tǒng)耦合,對流式數(shù)據(jù)總線的訪問接口外層進(jìn)行封裝并提供兼容于原數(shù)據(jù)的訪問API接口,使外部應(yīng)用仍可通過簡單的形式訂閱實時流水?dāng)?shù)據(jù)。業(yè)務(wù)系統(tǒng)透明化,實現(xiàn)即插即用,使業(yè)務(wù)系統(tǒng)開發(fā)和改造的影響性最小化,并在安全控制的限制下實現(xiàn)輕松接人。
2.5不顯著降低數(shù)據(jù)訪問性能
對于流式數(shù)據(jù)總線而言,其重要的一項指標(biāo)是實時數(shù)據(jù)訪問的吞吐量和時效性。引入行列級的訪問控制不可避免地帶來性能開銷,但應(yīng)盡量減小對流式數(shù)據(jù)總線性能的影響。
3原型系統(tǒng)實現(xiàn)
基于業(yè)界流行的高吞吐開源消息中間件Kafka,實現(xiàn)了本文提出的流式實時總線的行列級訪問控制原型以及基于“一套公共的流式實時數(shù)據(jù),多套私有視圖”數(shù)據(jù)安全訪問模式(圖2)。本原型系統(tǒng)在Kafka上實現(xiàn)類RDBMS的數(shù)據(jù)表/視圖模式的訪問管理能力,建立基于SQL的行列級數(shù)據(jù)訪問控制,并支持基礎(chǔ)的SQL查詢,配套的客戶端包聯(lián)通了業(yè)務(wù)系統(tǒng)和Kafka,顯著提升了實時服務(wù)的安全性和運維便捷性。
原型系統(tǒng)主體包括SQL執(zhí)行服務(wù)、管控中心、消費者客戶端三大模塊,每個模塊涉及的關(guān)鍵功能點如下。
3.1 SQL執(zhí)行服務(wù)
SQL執(zhí)行服務(wù)對外提供SQL語義接口,支持以SQL語句作為輸入進(jìn)行數(shù)據(jù)表與視圖的管理或數(shù)據(jù)查詢。對于數(shù)據(jù)表、數(shù)據(jù)視圖定義等DDL類型的SQL(如CREATE TABLE/VIEW),SQL執(zhí)行服務(wù)將其轉(zhuǎn)發(fā)給管控中心進(jìn)行進(jìn)一步處理,這是本文目標(biāo)實現(xiàn)的安全控制規(guī)則的定義;對于Kafka數(shù)據(jù)的DQL查詢請求(如SELECT FROM TABLE/VIEW),SQL執(zhí)行服務(wù)將其請求解析后轉(zhuǎn)化為對Kafka數(shù)據(jù)的讀取并在SQL執(zhí)行服務(wù)中處理SELECT語句,這是附帶實現(xiàn)的類數(shù)據(jù)庫查詢Kafka中數(shù)據(jù)的功能。
3.2管控中心
管控中心負(fù)責(zé)數(shù)據(jù)表、數(shù)據(jù)視圖、UDF函數(shù)等Topic元信息的管理,并保存在自有數(shù)據(jù)庫中。通過管控中心創(chuàng)建應(yīng)用私有視圖并賦權(quán)給下游應(yīng)用用戶訪問實現(xiàn)數(shù)據(jù)的權(quán)限控制。數(shù)據(jù)視圖定義支持行級過濾/列級過濾/字段處理和UDF函數(shù)等功能。
3.3消費者客戶端
消費者客戶端封裝原生的Kafka消費者客戶端(Kafka-consumer),對外部應(yīng)用提供兼容原Kafka-consumer API的接口,實現(xiàn)應(yīng)用的快速接人和平順遷移。Kafka中的數(shù)據(jù)仍然通過原生的Kafka-consumer客戶端讀取,避免和Kafak系統(tǒng)的深度耦合,簡化系統(tǒng)的實現(xiàn)流程。同時,通過定期訪問管控中心服務(wù),實現(xiàn)數(shù)據(jù)視圖所定義的訪問控制規(guī)則的同步后,對從Kafka中讀取的數(shù)據(jù)進(jìn)行反序列化、行列級數(shù)據(jù)過濾以及脫敏、加密等操作后送給下游系統(tǒng),實現(xiàn)業(yè)務(wù)對數(shù)據(jù)的最小訪問。
4結(jié)束語
本文提出了一種基于SQL語義的流式數(shù)據(jù)總線行列級數(shù)據(jù)訪問控制方式,主要解決企業(yè)中實時數(shù)據(jù)總線細(xì)粒度的數(shù)據(jù)訪問控制問題,并基于業(yè)界流行的開源消息中間件Apahce Kafka,驗證了系統(tǒng)實現(xiàn)的可行性。本文方式一方面實現(xiàn)了對企業(yè)中流式數(shù)據(jù)總線的行列級數(shù)據(jù)訪問控制,無須冗余存儲和數(shù)據(jù)處理應(yīng)用,同時統(tǒng)一了流式數(shù)據(jù)總線上實時數(shù)據(jù)、數(shù)據(jù)倉庫/大數(shù)據(jù)平臺中批量數(shù)據(jù)的訪問控制形式,均可通過廣泛應(yīng)用的SQL語言定義數(shù)據(jù)視圖并賦權(quán)實現(xiàn)業(yè)務(wù)數(shù)據(jù)的最小訪問。
作者簡介:
禹熹(1986—),碩士,研究方向:大數(shù)據(jù)應(yīng)用和開發(fā)。