一種虛擬olap服務的實現方法
【專利摘要】本發明公開了一種虛擬OLAP服務的實現方法,屬于多維查詢消息傳輸領域。該方法基于Kerberos、NTLM等安全協議對OLAP發送與接收的消息進行安全認證,通過DIME消息傳送協議對消息進行解碼與加密傳輸。與現有技術相比,本發明的方法能夠虛擬多維查詢端口、適配多種多維查詢服務器,解決了多路數據庫服務器查詢路由的切換問題,從而達到了用戶無需關心服務器是哪種而直接進行多維查詢操作,具有很好的推廣應用價值。
【專利說明】—種虛擬OLAP服務的實現方法
【技術領域】
[0001]本發明涉及多維查詢消息傳輸的領域,具體地說是一種虛擬OLAP服務的實現方法,為多維客戶端查詢提供更多的數據庫服務適配。
【背景技術】
[0002]聯機分析處理(On-LineAnalyticalProcessing,簡稱0LAP)是從原始數據中轉化出來的、能夠真正為用戶所理解的、并真實反映企業多維特性的數據稱為信息數據,使分析人員、管理人員或執行人員能夠從多種角度對信息數據進行快速、一致、交互地存取,從而獲得對數據的更深入了解的一類軟件技術。OLAP的目標是滿足決策支持或多維環境特定的查詢和報表需求,它的技術核心是“維”這個概念,因此OLAP也可以說是多維數據分析工具的集合。
[0003]目前多維分析服務Analysis Services使用TCP網絡協議進行通訊從而實現0LAP,多維數據庫底層使用XML for Analysis (XMLA)作為查詢的通信協議,不同多維查詢服務器之間的適配搭建比較繁瑣。
【發明內容】
[0004]本發明的技術任務是針對上述現有技術的不足,提供一種虛擬OLAP服務的實現方法。該方法按照SSAS協議與客戶端和多維查詢分析服務器之間進行通訊,適用于同一客戶端對多種多維查詢分析服務器查詢。
[0005]本發明的技術任務是按以下方式實現的:一種虛擬OLAP服務的實現方法,其特點是:
(一)根據TCP傳輸協議,接收與發送OLAP消息封裝體根據多個客戶端通過TCP協議發送的OLAP請求,開啟多個線程將二進制編碼消息轉碼為DME消息,或者是根據DME消息,將SOAP協議的消息轉碼為DME后反饋給客戶端;
(二)多維查詢消息傳輸的解碼與編碼
將DIME格式的消息轉碼為SOAP協議的XML明文,或者是根據XML明文,將SOAP協議的消息轉碼為DME格式的消息;
(三)服務與用戶交互的消息安全認證
根據用戶所選的認證方式,通過微軟提供的SSPI (安全支持提供接口)進行消息的安全認證;
(四)服務多維查詢分析語句的翻譯與轉發與返回
根據用戶的多維查詢語句,翻譯為服務器所識別的多維查詢語句,并且轉發到服務器,或者從服務器得到返回的多維查詢結果,并將查詢結果返回給客戶端。
[0006]上述實現方法包括以下步驟:
步驟一:DME消息的解碼與編碼
包括消息頭的編碼與解碼;消息塊的編碼與解碼; 步驟二:消息的安全認證
基于步驟一的DME消息解碼與編碼,將解碼與編碼后的消息體作為安全認證的數據,以確認消息傳輸的安全性;
步驟三:多維查詢消息請求的執行
判斷多維服務器類型,對發送的多維查詢請求轉譯為服務器識別的查詢請求;
步驟四:反饋請求的多維查詢結果
根據步驟三獲取的多維分析反饋,對反饋消息安全加密;
步驟五:組裝DME反饋消息
根據步驟四的安全加密消息,組成DME反饋消息,最終消息返回客戶端。
[0007]作為優選,DME消息的解碼與編碼中,基本信息包括一條或多條DME記錄:消息中的第一條記錄通過將MB (Message Begin,消息開始)標記置位來表示,消息中的最后一條記錄通過將ME (消息結束)標記置位來表示,DME消息可以分為三段:
1)初始記錄塊是一條DME記錄,并置位CF(塊標志)標志,整個分塊有效負載的類型必須在TYPE字段中指出,不管DATA_LENGTH字段的值是零還是非零。ID字段可以用于攜帶整個分塊有效負載的標識符。DATA_LENGTH字段指出DATA字段中攜帶的數據的長度;
2)每個中間記錄塊都是一條DIME記錄,并置位CF標志,用來指出這個記錄塊包含相同類型數據的下一個塊,并且它的標識符與初始記錄塊的標識符相同,TYPE_LENGTH和ID_LENGTH字段的值必須為零,TYPE_T字段的值必須為0x00。DATA_LENGTH字段指出DATA字段中攜帶的數據的長度;
3)終止記錄塊是一條DME記錄,它的CF標志被清零,表明這條記錄塊包含相同類型數據的最后一個塊,并且它的標識符與初始記錄塊的標識符相同。與中間記錄塊一樣,TYPE_LENGTH和ID_LENGTH字段的值必須為零,TYPE_T字段的值必須為0x00。DATA_LENGTH字段指出DATA字段中攜帶的數據的大小。
[0008]DIME消息中可以攜帶的最大DME記錄條數不限。
[0009]消息的安全認證用于驗證消息來源安全性觸發點,客戶端提供某種形式的憑據來允許服務器驗證客戶端的標識;確認了客戶端的標識后,服務器端應用程序授予執行操作和訪問資源的原則。
[0010]優選NTLM與Kerberos進行安全認證。NTLM與Kerberos都是基于N次握手驗證消息安全性的協議。由客戶端發出符合安全認證協議的驗證申請消息,服務器端生成令牌后反饋消息為首次握手,返回客戶端令牌后客戶端經過算法加密后返回服務器端,服務器端根據解密算法判定客戶端的安全性為又一次握手,以此類推,直至安全驗證通過。
[0011]多維查詢消息請求的執行方法優選為:根據步驟二定義的消息安全性,對安全可靠的消息來源安全解密;解密后的消息為多維分析協議的轉譯查詢指令,執行該指令,獲取多維分析反饋。
[0012]—般客戶端在連接Analysis Services的多維分析服務時不會關注服務器內部的查詢實現原理,服務器端是否使用XMLA作為查詢通信協議也不是客戶端所關注的。因此,本發明能夠以一種虛擬OLAP服務作為多維查詢客戶端與多維數據庫分析服務之間的一座橋梁,解決了不同多維查詢服務器之間的適配搭建繁瑣的問題,達到了用戶無需關心服務器是哪種而直接進行多維查詢操作的技術效果。
【專利附圖】
【附圖說明】
[0013]附圖1是本發明虛擬OLAP服務的實現方法的原理圖;
附圖2是本發明虛擬OLAP服務的實現方法流程圖(單次客戶端與服務器通訊)。
【具體實施方式】
[0014]參照說明書附圖以具體實施例對本發明的虛擬OLAP服務的實現方法作以下詳細地說明。
[0015]實施例:
如附圖1、2所示,本發明的虛擬OLAP服務的單次客戶端與服務器通訊的實現方法包括:
步驟一:獲取服務器DME消息,對消息解碼,包括消息頭、消息塊的解碼:
其基本信息包括一條或多條DME記錄。消息中的第一條記錄是通過將MB (MessageBegin,消息開始)標記置位來表示,消息中的最后一條記錄是通過將ME (消息結束)置位來標記的。DME消息中可以攜帶的最大DME記錄條數不限。DME消息可以分為三段:
1)初始記錄塊是一條DME記錄,并置位CF(塊標志)標志。整個分塊有效負載的類型必須在TYPE字段中指出,不管DATA_LENGTH字段的值是零還是非零。ID字段可以用于攜帶整個分塊有效負載的標識符。DATA_LENGTH字段指出DATA字段中攜帶的數據的長度;
2)每個中間記錄塊都是一條DIME記錄,并置位CF標志,用來指出這個記錄塊包含相同類型數據的下一個塊,并且它的標識符與初始記錄塊的標識符相同。TYPE_LENGTH和ID_LENGTH字段的值必須為零,TYPE_T字段的值必須為0x00。DATA_LENGTH字段指出DATA字段中攜帶的數據的長度;
3)終止記錄塊是一條DME記錄,它的CF標志被清零,表明這條記錄塊包含相同類型數據的最后一個塊,并且它的標識符與初始記錄塊的標識符相同。與中間記錄塊一樣,TYPE_LENGTH和ID_LENGTH字段的值必須為零,TYPE_T字段的值必須為0x00。DATA_LENGTH字段指出DATA字段中攜帶的數據的大小。
[0016]步驟二:消息的安全認證,用于驗證消息來源安全性觸發點,客戶端提供某種形式的憑據來允許服務器驗證客戶端的標識;確認了客戶端的標識后,服務器端應用程序授予執行操作和訪問資源的原則。
[0017]如NTLM與Kerberos都是基于N次握手驗證消息安全性的協議。由客戶端發出符合安全認證協議的驗證申請消息,服務器端生成令牌后反饋消息為首次握手,返回客戶端令牌后客戶端經過算法加密后返回服務器端,服務器端根據解密算法判定客戶端的安全性為又一次握手,以此類推,直至安全驗證通過。
[0018]步驟三:多維查詢消息請求的執行
根據步驟二定義的消息安全性,對安全可靠的消息來源安全解密;解密后的消息為多維分析協議的轉譯查詢指令,執行該指令,獲取多維分析反饋;
步驟四:獲取多維服務器查詢結果并加密根據步驟三獲取的多維分析反饋,對反饋消息安全加密;
步驟五:封裝DME消息體并對客戶端反饋消息
根據步驟四的安全加密消息,組成DME反饋消息,最終消息返回客戶端。
[0019]上述方法的實現包括以下具體步驟:
(一)TCP通訊讀取并解析DME(直接網際消息封裝)數據。
[0020]—條DIME消息可以包含零個或多個分塊有效負載。分塊有效負載被編碼為一個初始記錄塊,后跟零個或多個中間記錄塊,最后跟一個終止記錄塊。
[0021](I)每個記錄塊都是用下列編碼規則編碼的,以下是讀取DIME記錄塊消息頭的: O讀取選取數據的前12個字節碼
2)選取第I個字節碼的前5個比特位為版本號,讀取第I個字節碼的第6個比特位為消息起始位,讀取第I個字節碼的第7個比特位為消息結束位(Ibit),讀取第I個字節碼的第8個比特位為塊標志位(Ibit)
3)讀取第2個字節碼的前4個比特位為字段格式位,讀取第2個字節碼的后4個比特位為保留字
4)讀取第3-4個字節碼的16個比特位為選項長度
5)讀取第5-6個字節碼的16個比特位為編號長度
6)讀取第7-8個字節碼的16個比特位為類型長度
7)讀取第9-12個字節碼的32個比特位為數據長度,
8)根據第4)項的選項長度length,讀取length個字節即為選項內容
9)根據第5)項的編號長度length,讀取length個字節即為編號內容
10)根據第6)項的編號長度length,讀取length個字節即為類型內容
11)根據第7)項的編號長度length,讀取length個字節即為數據塊內容
(2)讀取并解析DME消息體數據塊內容:
1)設置數據緩沖區
2)根據消息頭提供的數據總長度以及已讀取的數據長度,判斷是否讀取完,如果未讀取完,則把未讀取的數據按緩沖區容量加載到緩沖區中讀取;如果讀取完,則去讀取下一條消息的消息頭
(二)安全認證、解密。
[0022]本安全認證通過TCP協議通訊握手判斷當前的安全認證方式,如NTLM、Kerberos等協議。
[0023]( I)握手協議的通訊解密:
解密方法需要傳入安全句柄上下文,輸入的安全套接字,序列號;在方法中根據安全套接字,生成安全緩沖解析碼,把安全緩沖解析碼交給UnsafeNclNativeMethods的本地SSPI的DecryptMessage進行解密;
(2)通過調用非托管堆調用SSPI認證:
安全服務方法根據安全消息上下文中的句柄、傳入需要安全認證的令牌、安全認證時間戳以及上下文標志位flag指針,通過SSPIWrapper的AcceptSecurityContext方法進行認證,通過上下文標志flag指針指向的值判斷是否認證成功;
(三)執行Xmla消息轉發給服務器。
[0024]XML for Analysis (XMLA)是一種基于簡單對象訪問協議(SOAP)的XML協議,它是專為對駐留在Web上的任何標準多維數據源的通用數據訪問而設計的。XMLA開放標準介紹了以下兩種常規訪問方法:Discover和Execute。這些方法使用XML支持的松散率禹合客戶端和服務器體系結構處理有關Analysis Services實例的傳入和傳出信息。
[0025](I) Discover方式執行Xmla協議指令:
判斷當前Xmla腳本的其實節點是否為Discover,如果是則執行Startmessage方法,傳遞SOAPAct1n頭結點的發現消息。
[0026](2) Execute方式執行Xmla協議指令:
判斷當前Xmla腳本的其實節點是否為Execute,如果是則執行Startmessage方法,傳遞SOAPAct1n頭結點的執行消息。
[0027](四)獲取多維服務器查詢結果并加密。
[0028]接收多維服務器返回的Xmla協議指令,并利用握手協議的通訊加密方式對消息加密
(I)Discover方式執行Xmla協議指令:
判斷當前Xmla腳本的其實節點是否為Discover,如果是則執行SendMessageAndReturnResult 方法,獲取 Discover 結構檢索結果。
[0029](2) Execute方式執行Xmla協議指令:
判斷當前Xmla腳本的其實節點是否為Execute,如果是則執行SendMessageAndReturnResult 方法,獲取 Execute 執行查詢結果。
[0030](3)對獲取的Discover結構檢索或Execute查詢結果的消息體進行加密: 加密方法需要傳入安全句柄上下文,輸入的安全套接字,序列號在方法中根據安全套接字,生成安全緩沖解析碼,把安全緩沖解析碼交給UnsafeNclNativeMethods的本地SSPI的EncryptMessage進行加密。
[0031](五)封裝DME消息體并對客戶端反饋消息。
[0032]以步驟四的加密消息為載體,對加密消息進行DME編碼,其中包括消息頭、消息塊的編碼。
[0033](I)回寫DME消息頭:
O讀取回寫數據塊記錄的所有字節碼,并新建12個字節碼
2)設置第I個字節碼的前5個比特位為版本號,設置第I個字節碼的第6個比特位為消息起始位,設置第I個字節碼的第7個比特位為消息結束位(Ibit),設置第I個字節碼的第8個比特位為塊標志位(Ibit)
3)設置第2個字節碼的前4個比特位為字段格式位,設置第2個字節碼的后4個比特位為保留字
4)根據選項數據,設置第3-4個字節碼的16個比特位為選項長度
5)根據編號數據,設置第5-6個字節碼的16個比特位為編號長度
6)根據類型數據,設置第7-8個字節碼的16個比特位為類型長度
7)根據返回數據塊的長度設置第9-12個字節碼的32個比特位為數據長度
8)根據第4)項的選項長度length,寫入length個字節即為選項內容
9)根據第5)項的編號長度length,寫入length個字節即為編號內容 10)根據第6)項的編號長度length,寫入length個字節即為類型內容
11)根據第7)項的編號長度length,寫入length個字節即為數據塊內容
(2)回寫DME消息體:
1)設置數據緩沖區
2)根據消息頭提供的數據總長度以及已寫入的數據長度,判斷是否寫入完,如果未寫入完,則把未讀取的數據按緩沖區容量加載到緩沖區中讀取;如果寫入完,則去寫入下一條消息的消息頭。
【權利要求】
1.一種虛擬0仏?服務的實現方法,其特征在于: (一)根據扣?傳輸協議,接收與發送0仏?消息封裝體 根據多個客戶端通過扣?協議發送的0仏?請求,開啟多個線程將二進制編碼消息轉碼為0頂2消息,或者是根據0頂2消息,將30八?協議的消息轉碼為0頂2后反饋給客戶端; (二)多維查詢消息傳輸的解碼與編碼 將0112格式的消息轉碼為30八?協議的X見明文,或者是根據X見明文,將30八?協議的消息轉碼為0頂2格式的消息; (三)服務與用戶交互的消息安全認證 根據用戶所選的認證方式,通過微軟提供的33?1進行消息的安全認證; (四)服務多維查詢分析語句的翻譯與轉發與返回 根據用戶的多維查詢語句,翻譯為服務器所識別的多維查詢語句,并且轉發到服務器,或者從服務器得到返回的多維查詢結果,并將查詢結果返回給客戶端。
2.根據權利要求1所述的虛擬0仏?服務的實現方法,其特征在于包括以下步驟: 步驟一:0頂2消息的解碼與編碼 包括消息頭的編碼與解碼、消息塊的編碼與解碼; 步驟二:消息的安全認證 基于步驟一的0頂2消息解碼與編碼,將解碼與編碼后的消息體作為安全認證的數據,以確認消息傳輸的安全性; 步驟三:多維查詢消息請求的執行 判斷多維服務器類型,對發送的多維查詢請求轉譯為服務器識別的查詢請求; 步驟四:反饋請求的多維查詢結果 根據步驟三獲取的多維分析反饋,對反饋消息安全加密; 步驟五:組裝0頂2反饋消息 根據步驟四的安全加密消息,組成0頂2反饋消息,最終消息返回客戶端。
3.根據權利要求2所述的虛擬0“?服務的實現方法,其特征在于0112消息的解碼與編碼中,基本信息包括一條或多條0頂2記錄, 消息中的第一條記錄通過將18標記置位來表示,消息中的最后一條記錄通過將12標記置位來表示,0112消息可以分為三段: 1)初始記錄塊是一條0頂2記錄,并置位V標志; 2)每個中間記錄塊都是一條0112記錄,并置位標志,用來指出這個記錄塊包含相同類型數據的下一個塊,并且它的標識符與初始記錄塊的標識符相同; 3)終止記錄塊是一條0頂2記錄,它的V標志被清零,表明這條記錄塊包含相同類型數據的最后一個塊,并且它的標識符與初始記錄塊的標識符相同。
4.根據權利要求2所述的虛擬0仏?服務的實現方法,其特征在于消息的安全認證用于驗證消息來源安全性觸發點,客戶端提供某種形式的憑據來允許服務器驗證客戶端的標識;確認了客戶端的標識后,服務器端應用程序授予執行操作和訪問資源的原則。
5.根據權利要求2所述的虛擬0仏?服務的實現方法,其特征在于多維查詢消息請求的執行方法為:根據步驟二定義的消息安全性,對安全可靠的消息來源安全解密;解密后的消息為多維分析協議的轉譯查詢指令,執行該指令,獲取多維分析反饋。
【文檔編號】G06F17/30GK104462561SQ201410831919
【公開日】2015年3月25日 申請日期:2014年12月29日 優先權日:2014年12月29日
【發明者】張胤 申請人:浪潮通用軟件有限公司