熊海東 徐德
摘要:目前很多軟件應用的核心都是基于數(shù)據(jù)庫,早期的應用模式都是一個應用對應一個數(shù)據(jù)庫,隨著應用之間的聯(lián)系增多,經(jīng)常出現(xiàn)多個應用之間需要互相訪問彼此的數(shù)據(jù)庫,而且這些數(shù)據(jù)庫可能是異構的,也就是需要跨數(shù)據(jù)庫進行異構數(shù)據(jù)庫訪問。但是跨數(shù)據(jù)庫應用存在開發(fā)工作量大、后期維護困難、數(shù)據(jù)庫有安全隱患等問題。通過使用以JSON作為數(shù)據(jù)交互格式的特殊應用作為各應用的中間件應用,讓需要跨數(shù)據(jù)庫的應用不再直接訪問異構的數(shù)據(jù)庫,而是訪問該中間件應用。通過使用這種模型,既屏蔽異構數(shù)據(jù)庫差異,又降低了開發(fā)和后期維護工作量,還提高了應用和數(shù)據(jù)庫的安全性,實踐證明該模型簡單有效。
關鍵詞:數(shù)據(jù)庫;JSON;異構;整合
中圖分類號:TP311.52;TP311.13? ? ?文獻標識碼:A? ? 文章編號:1007-9416(2020)10-0000-00
0 引言
數(shù)據(jù)庫技術從誕生到現(xiàn)在,經(jīng)歷文件系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)(DBMS)、關系型數(shù)據(jù)庫、NoSQL等階段,目前市場主流應用都是基于關系型數(shù)據(jù)庫。數(shù)據(jù)庫不僅品牌多、同一品牌下版本也很多,而且不同品牌之間使用細節(jié)方式上存在不小差異,即不同品牌之間數(shù)據(jù)是異構的。由于各個軟件應用開發(fā)時都是采用當時技術成熟的主流數(shù)據(jù)庫版本,所以就形成這樣的一個現(xiàn)象,即不同時期的應用,其數(shù)據(jù)庫經(jīng)常各不相同,既有品牌的不同,又有版本的不同。
早期的應用由于業(yè)務相對簡單、孤立,基本上都是一個應用只使用自己的一個專屬數(shù)據(jù)庫。隨著時代的發(fā)展,應用的業(yè)務變得復雜化,經(jīng)常出現(xiàn)一個應用需要去訪問多個相關聯(lián)應用的數(shù)據(jù)庫的情況,而這個應用所訪問得數(shù)據(jù)庫彼此之間還可能是異構的。也就是說一個應用要去訪問幾種不同數(shù)據(jù)庫,與此同時一個數(shù)據(jù)庫會被多個應用同時操作,應用和數(shù)據(jù)庫的關系是多對多,如圖1所示。這種傳統(tǒng)多對多的訪問方法被稱為“硬連接”,“硬連接”會帶來很多問題,比如性能問題、業(yè)務上數(shù)據(jù)狀態(tài)協(xié)調(diào)一致問題等。
目前避免“硬連接”主流辦法是使用接口[1]。如果某個應用A需要訪問另一個應用B的數(shù)據(jù)庫,這時就由應用B根據(jù)應用A的需要,提供一個訪問接口,該接口專門為應用A的需要量身定造,接口的數(shù)據(jù)交互協(xié)議由A、B應用協(xié)商溝通。假如此時應用A又需要訪問另外一個應用C的數(shù)據(jù)庫,這時應用A又需要和應用C進行協(xié)商溝通。顯然這種方法避免了應用和數(shù)據(jù)庫之間的多對多關系,即應用和數(shù)據(jù)庫依然是一對一的關系,但是應用與應用之間依然是多對多的關系,如圖2所示。同時由于接口通常是基于HTTP協(xié)議的Web服務,也就是說該接口肯定是暴露在互聯(lián)網(wǎng)上的。所以使用接口的方式仍然存在兩個弊端,一是開發(fā)維護工作量大,二是安全性不高。那么有沒有一種簡單高效、安全性高的異構數(shù)據(jù)庫訪問方式呢?
1 模型總體架構
如圖3所示,應用A的數(shù)據(jù)庫A只能被應用A訪問,應用B如果需要訪問應用A的數(shù)據(jù)數(shù)據(jù)庫A的話,只能通過JSON中間件間接實現(xiàn)。首先,應用B向JSON中間件發(fā)出操作數(shù)據(jù)庫A的請求,中間件解析驗證以后,轉(zhuǎn)向應用A發(fā)出數(shù)據(jù)庫操作請求,中間件獲得結果、解析該結果,最后將結果發(fā)送給應用B。對于應用A需要訪問應用B的數(shù)據(jù)庫情況同理。如果再加入增加應用C及其數(shù)據(jù)庫C的話,并且C需要訪問應用A和應用B的數(shù)據(jù)庫,此時也只需由應用C向中間件發(fā)出請求即可。
通過這種中間件的方式我們屏蔽了各應用數(shù)據(jù)庫的訪問差異,對于某個需要訪問其他異構數(shù)據(jù)庫的應用而言,其他應用的異構數(shù)據(jù)庫是透明的,不需要關心,而只是需要維護和JSON中間件的關系即可。
應用越多,模型的規(guī)模效應就凸顯出來了。我們假設有n個應用需要互相訪問,使用“硬連接”的方式,應用與其他數(shù)據(jù)庫連接數(shù)量是n!,使用“接口”的方式所有應用之間的連接數(shù)量是n!,而如果使用中間件的模式的話,所有應用與中間件的連接數(shù)量是n。無疑是n的值越來越大,n的值越大,使用JSON中間件模型的規(guī)模效應就越明顯,優(yōu)勢也越明顯。
2 使用JSON作為應用之間的數(shù)據(jù)交換格式
在明確總體結構以后,就需要選定一個通用數(shù)據(jù)交換格式。目前主流數(shù)據(jù)交換格式有XML和JSON,其中XML可讀性高,結構清晰嚴謹,解析簡單,但是作為網(wǎng)絡數(shù)據(jù)交換格式的話就稍顯臃腫,JSON作為新興的輕量級數(shù)據(jù)交換格式,擁有簡潔的語法,可以嵌套表示復雜的對象,因其簡潔至極的語法,故其網(wǎng)絡傳輸流量特別小,非常適合在互聯(lián)網(wǎng)上傳輸。模型中的應用和中間件都具備生成和解析JSON的能力。應用對數(shù)據(jù)庫的操作主要是“增、刪、改、查”,在模型的中間件與數(shù)據(jù)庫交互過程中,其核心業(yè)務是數(shù)據(jù)庫記錄與JSON對象[2]的雙向相互轉(zhuǎn)化。
2.1 數(shù)據(jù)庫記錄轉(zhuǎn)換為JSON
應用有時會跨數(shù)據(jù)庫讀取數(shù)據(jù),比如用戶需要查詢其他應用數(shù)據(jù)。假如應用A的用戶需要查詢應用B的數(shù)據(jù),其核心工作是應用A的用戶讀取異構數(shù)據(jù)的JSON數(shù)據(jù)[3]。用戶想應用A發(fā)起數(shù)據(jù)請求,應用A解析后就向JSON中間件發(fā)出數(shù)據(jù)查詢請求,查詢應用B的數(shù)據(jù)的時候,中間件解析該請求以后就會向應用B發(fā)出數(shù)據(jù)請求,應用B就會讀取其數(shù)據(jù)庫,并將相應的結果集轉(zhuǎn)換為JSON,然后應用B又將JSON結果發(fā)給中間件,中間件又將JSON結果發(fā)給應用A,應用A將結果返回給用戶。
2.2 JSON數(shù)據(jù)持久化到數(shù)據(jù)庫
應用除了從異構數(shù)據(jù)庫讀取數(shù)據(jù)外,還會將數(shù)據(jù)保存到數(shù)據(jù)庫,比如用戶提交表單的操作。假如應用A的用戶在瀏覽器里輸入了表單的信息,然后點擊提交,最終的結果是該用戶輸入的表單信息保存應用B的數(shù)據(jù)庫中。該過程工作原理如下,用戶提交數(shù)據(jù)以后,應用A收到該表單數(shù)據(jù),應用A將該數(shù)據(jù)經(jīng)過處理以后轉(zhuǎn)化成JSON并發(fā)送給中間件,中間件收到數(shù)據(jù)以后又將該數(shù)據(jù)發(fā)送給應用B,應用B收到數(shù)據(jù)以后將數(shù)據(jù)持久化到自己的數(shù)據(jù)庫中。
3 應用與中間件交互協(xié)議
在確定數(shù)據(jù)交換格式以后就需要確定具體的數(shù)據(jù)交換協(xié)議了。根據(jù)模型的架構,協(xié)議分兩個方向。一個是中間件向應用返回的數(shù)據(jù)都只是靜態(tài)的JSON,比較簡單,比如可能是請求的是否成功、錯誤提示信息、結果集等。另一個是應用向中間件的操作請求,該部分協(xié)議內(nèi)容是重點。首先該請求需要向中間件表明自己需要訪問什么數(shù)據(jù)庫,其次是要告知中間件自己將執(zhí)行什么類的數(shù)據(jù)操作,最后就是需要數(shù)據(jù)庫執(zhí)行的語句。如下面的JSON所示,是應用向中間件請求的JSON數(shù)據(jù)[4],鍵database表示數(shù)據(jù)庫,鍵operate表示操作類型(增加用insert、刪除用delete、修改用update、查詢用select),鍵statement表示具體的執(zhí)行語句,這個語句并不是sql,而是類似Hiberante的hql,可以使用類似對象、屬性來簡化語句,這里查詢參數(shù)都需要以常量提前整合到語句里面。
{
databse : “b”,
operate : “select”
statement : “select * from Student s where s.xh=111111111”
}
4 安全工作
模型的安全工作從被動和主動兩方面進行。被動安全工作主要是靜態(tài)的安全驗證,主要是IP驗證和證書驗證。主動安全工作主要是中間件動態(tài)的分析每個請求的意圖,然后對之前的請求進行關聯(lián)判斷。
4.1 被動安全工作
中間件被動安全工作主要是靜態(tài)的安全驗證,主要由HTTPS、IP校驗、證書核驗組成。從這三方面就基本阻斷了幾乎所有的直接攻擊。首先,中間件和應用直接交流采用的網(wǎng)絡協(xié)議是HTTPS協(xié)議,由于使用了加密的HTTPS協(xié)議,中間件和應用之間交流的信息也許能被攻擊者捕獲,但是卻不能被翻譯。其次,中間件只接受合法IP的數(shù)據(jù)請求,由于中間件只和應用打交道,而不需要和終端用戶接觸,所以可以給中間件設置IP白名單,只有白名單內(nèi)的網(wǎng)絡請求才會被中間件接受和處理,白名單之外IP主機的網(wǎng)絡請求都視為非法請求,直接拒絕。這基本就確保了與中間件進行互訪的只有合法已注冊的應用主機。為更進一步確保網(wǎng)絡安全,模型采用了證書加密機制,中間件給每個應用頒發(fā)注冊了證書。每次應用與中間件之間的會話失效以后,應用就必須帶上證書來進行安裝驗證。通過以上一系列的安裝工作,模型可以確保攻擊者無法通過直接的攻擊來攻擊中間件[5]。
4.2 主動安全工作
模型的主動安全工作主要由兩部分完成。一部分是各應用增強安全性,由于應用是直接接觸終端用戶,需要將很多功能暴露出來,所以應用需要防止SQL注入等危險攻擊行為,這部分工作由應用的具體開發(fā)完成。另一部分是中間件主動防御工作,中間件對應用的每個操作請求都會使用過濾器進行安全檢查,一方面由于應用和中間件之間的協(xié)議比較特殊,阻止了很多SQL注入,另一方面過濾器會對請求的語句進行合理性分析,將不合理的請求進行排除并報告給管理人員。
5 結語
基于JSON的異構數(shù)據(jù)庫整合模型經(jīng)過小范圍應用,證明該模型簡單有效,與傳統(tǒng)的使用“硬連接”或接口的方式相比,本模型簡化了異構數(shù)據(jù)庫訪問開發(fā)的工作量,提高了各個相關應用整體的安全性,符合現(xiàn)代各種應用跨異構數(shù)據(jù)庫的訪問需要。但是在應用由于中間件的使用的主動安全機制的過濾器嚴謹苛刻,中間件執(zhí)行效率偏低,帶來應用在使用高峰時期速度偏慢、用戶體驗不佳的問題,后面需要進步對安全機制進行優(yōu)化調(diào)整。
參考文獻
[1] 于鵬飛.基于異構數(shù)據(jù)庫的智慧校園系統(tǒng)的設計與實現(xiàn)[J].軟件導刊(教育技術),2018,17(7):47-48.
[2] 高升.基于JSON的數(shù)據(jù)庫訪問層研究與應用[D].北京:北方工業(yè)大學,2019.
[3] 胡章兵,左良利.時態(tài)JSON數(shù)據(jù)模型及查詢語言處理[J].計算機技術與發(fā)展,2019(9):32-34.
[4] Hyunmin Cheong. Translating JSON Schema logics into OWL axioms for unified data validation on a digital manufacturing platform[J].Procedia Manufacturing, 2019(28):85-89.
[5] 葉丹娜.動態(tài)異構信息網(wǎng)絡的表示學習研究[D].北京:北京郵電大學,2019.
收稿日期:2020-08-25
基金項目:四川幼兒師范高等??茖W??蒲许椖俊痘谖⑿殴娖脚_的學生管理系統(tǒng)設計與實現(xiàn)》(SYB201805)
作者簡介:熊海東(1986—),男,湖北黃岡人,碩士研究生,講師,研究方向為:Java Web、移動應用開發(fā)、少兒編程。
JSON Based Heterogeneous Database Integration Model
XIONG Hai-dong,XU De
(1.Sichuan Preschool Educators College, Mianyang Sichuan? 621709;
2.Urumqi sub branch of the people's Bank of China,Urumqi Xinjiang? 832000)
Abstract: Nowadays the core of many software cant live without the database, the model of early softwares were one software corresponds to one database, with the increase of relation between softwares, its common that multiple softwares needs to visit each others database, and these databases may be heterogeneous, so the visit of heterogeneous database are needed. However, there are many problems while one software visits another heterogeneous database, such as large development workload, difficulty in later maintenance, and security problems with database. By using a special software which uses JSON as the data interaction format as the middleware of each software, software that need visit the others database no longer directly access the database, but access the middleware. By using this model, it can not only shield the difference between the heterogeneous databases, but also reduce the development workload, make the later software maintenance easier, and upgrade the security of softwares and databases.Its proved that this model is simple and effective.
Keywords: database; JSON; heterogeneous; integration