熊海東 徐德
摘要:目前很多軟件應(yīng)用的核心都是基于數(shù)據(jù)庫(kù),早期的應(yīng)用模式都是一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),隨著應(yīng)用之間的聯(lián)系增多,經(jīng)常出現(xiàn)多個(gè)應(yīng)用之間需要互相訪問(wèn)彼此的數(shù)據(jù)庫(kù),而且這些數(shù)據(jù)庫(kù)可能是異構(gòu)的,也就是需要跨數(shù)據(jù)庫(kù)進(jìn)行異構(gòu)數(shù)據(jù)庫(kù)訪問(wèn)。但是跨數(shù)據(jù)庫(kù)應(yīng)用存在開(kāi)發(fā)工作量大、后期維護(hù)困難、數(shù)據(jù)庫(kù)有安全隱患等問(wèn)題。通過(guò)使用以JSON作為數(shù)據(jù)交互格式的特殊應(yīng)用作為各應(yīng)用的中間件應(yīng)用,讓需要跨數(shù)據(jù)庫(kù)的應(yīng)用不再直接訪問(wèn)異構(gòu)的數(shù)據(jù)庫(kù),而是訪問(wèn)該中間件應(yīng)用。通過(guò)使用這種模型,既屏蔽異構(gòu)數(shù)據(jù)庫(kù)差異,又降低了開(kāi)發(fā)和后期維護(hù)工作量,還提高了應(yīng)用和數(shù)據(jù)庫(kù)的安全性,實(shí)踐證明該模型簡(jiǎn)單有效。
關(guān)鍵詞:數(shù)據(jù)庫(kù);JSON;異構(gòu);整合
中圖分類(lèi)號(hào):TP311.52;TP311.13? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? 文章編號(hào):1007-9416(2020)10-0000-00
0 引言
數(shù)據(jù)庫(kù)技術(shù)從誕生到現(xiàn)在,經(jīng)歷文件系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)、關(guān)系型數(shù)據(jù)庫(kù)、NoSQL等階段,目前市場(chǎng)主流應(yīng)用都是基于關(guān)系型數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)不僅品牌多、同一品牌下版本也很多,而且不同品牌之間使用細(xì)節(jié)方式上存在不小差異,即不同品牌之間數(shù)據(jù)是異構(gòu)的。由于各個(gè)軟件應(yīng)用開(kāi)發(fā)時(shí)都是采用當(dāng)時(shí)技術(shù)成熟的主流數(shù)據(jù)庫(kù)版本,所以就形成這樣的一個(gè)現(xiàn)象,即不同時(shí)期的應(yīng)用,其數(shù)據(jù)庫(kù)經(jīng)常各不相同,既有品牌的不同,又有版本的不同。
早期的應(yīng)用由于業(yè)務(wù)相對(duì)簡(jiǎn)單、孤立,基本上都是一個(gè)應(yīng)用只使用自己的一個(gè)專(zhuān)屬數(shù)據(jù)庫(kù)。隨著時(shí)代的發(fā)展,應(yīng)用的業(yè)務(wù)變得復(fù)雜化,經(jīng)常出現(xiàn)一個(gè)應(yīng)用需要去訪問(wèn)多個(gè)相關(guān)聯(lián)應(yīng)用的數(shù)據(jù)庫(kù)的情況,而這個(gè)應(yīng)用所訪問(wèn)得數(shù)據(jù)庫(kù)彼此之間還可能是異構(gòu)的。也就是說(shuō)一個(gè)應(yīng)用要去訪問(wèn)幾種不同數(shù)據(jù)庫(kù),與此同時(shí)一個(gè)數(shù)據(jù)庫(kù)會(huì)被多個(gè)應(yīng)用同時(shí)操作,應(yīng)用和數(shù)據(jù)庫(kù)的關(guān)系是多對(duì)多,如圖1所示。這種傳統(tǒng)多對(duì)多的訪問(wèn)方法被稱(chēng)為“硬連接”,“硬連接”會(huì)帶來(lái)很多問(wèn)題,比如性能問(wèn)題、業(yè)務(wù)上數(shù)據(jù)狀態(tài)協(xié)調(diào)一致問(wèn)題等。
目前避免“硬連接”主流辦法是使用接口[1]。如果某個(gè)應(yīng)用A需要訪問(wèn)另一個(gè)應(yīng)用B的數(shù)據(jù)庫(kù),這時(shí)就由應(yīng)用B根據(jù)應(yīng)用A的需要,提供一個(gè)訪問(wèn)接口,該接口專(zhuān)門(mén)為應(yīng)用A的需要量身定造,接口的數(shù)據(jù)交互協(xié)議由A、B應(yīng)用協(xié)商溝通。假如此時(shí)應(yīng)用A又需要訪問(wèn)另外一個(gè)應(yīng)用C的數(shù)據(jù)庫(kù),這時(shí)應(yīng)用A又需要和應(yīng)用C進(jìn)行協(xié)商溝通。顯然這種方法避免了應(yīng)用和數(shù)據(jù)庫(kù)之間的多對(duì)多關(guān)系,即應(yīng)用和數(shù)據(jù)庫(kù)依然是一對(duì)一的關(guān)系,但是應(yīng)用與應(yīng)用之間依然是多對(duì)多的關(guān)系,如圖2所示。同時(shí)由于接口通常是基于HTTP協(xié)議的Web服務(wù),也就是說(shuō)該接口肯定是暴露在互聯(lián)網(wǎng)上的。所以使用接口的方式仍然存在兩個(gè)弊端,一是開(kāi)發(fā)維護(hù)工作量大,二是安全性不高。那么有沒(méi)有一種簡(jiǎn)單高效、安全性高的異構(gòu)數(shù)據(jù)庫(kù)訪問(wèn)方式呢?
1 模型總體架構(gòu)
如圖3所示,應(yīng)用A的數(shù)據(jù)庫(kù)A只能被應(yīng)用A訪問(wèn),應(yīng)用B如果需要訪問(wèn)應(yīng)用A的數(shù)據(jù)數(shù)據(jù)庫(kù)A的話,只能通過(guò)JSON中間件間接實(shí)現(xiàn)。首先,應(yīng)用B向JSON中間件發(fā)出操作數(shù)據(jù)庫(kù)A的請(qǐng)求,中間件解析驗(yàn)證以后,轉(zhuǎn)向應(yīng)用A發(fā)出數(shù)據(jù)庫(kù)操作請(qǐng)求,中間件獲得結(jié)果、解析該結(jié)果,最后將結(jié)果發(fā)送給應(yīng)用B。對(duì)于應(yīng)用A需要訪問(wèn)應(yīng)用B的數(shù)據(jù)庫(kù)情況同理。如果再加入增加應(yīng)用C及其數(shù)據(jù)庫(kù)C的話,并且C需要訪問(wèn)應(yīng)用A和應(yīng)用B的數(shù)據(jù)庫(kù),此時(shí)也只需由應(yīng)用C向中間件發(fā)出請(qǐng)求即可。
通過(guò)這種中間件的方式我們屏蔽了各應(yīng)用數(shù)據(jù)庫(kù)的訪問(wèn)差異,對(duì)于某個(gè)需要訪問(wèn)其他異構(gòu)數(shù)據(jù)庫(kù)的應(yīng)用而言,其他應(yīng)用的異構(gòu)數(shù)據(jù)庫(kù)是透明的,不需要關(guān)心,而只是需要維護(hù)和JSON中間件的關(guān)系即可。
應(yīng)用越多,模型的規(guī)模效應(yīng)就凸顯出來(lái)了。我們假設(shè)有n個(gè)應(yīng)用需要互相訪問(wèn),使用“硬連接”的方式,應(yīng)用與其他數(shù)據(jù)庫(kù)連接數(shù)量是n!,使用“接口”的方式所有應(yīng)用之間的連接數(shù)量是n!,而如果使用中間件的模式的話,所有應(yīng)用與中間件的連接數(shù)量是n。無(wú)疑是n的值越來(lái)越大,n的值越大,使用JSON中間件模型的規(guī)模效應(yīng)就越明顯,優(yōu)勢(shì)也越明顯。
2 使用JSON作為應(yīng)用之間的數(shù)據(jù)交換格式
在明確總體結(jié)構(gòu)以后,就需要選定一個(gè)通用數(shù)據(jù)交換格式。目前主流數(shù)據(jù)交換格式有XML和JSON,其中XML可讀性高,結(jié)構(gòu)清晰嚴(yán)謹(jǐn),解析簡(jiǎn)單,但是作為網(wǎng)絡(luò)數(shù)據(jù)交換格式的話就稍顯臃腫,JSON作為新興的輕量級(jí)數(shù)據(jù)交換格式,擁有簡(jiǎn)潔的語(yǔ)法,可以嵌套表示復(fù)雜的對(duì)象,因其簡(jiǎn)潔至極的語(yǔ)法,故其網(wǎng)絡(luò)傳輸流量特別小,非常適合在互聯(lián)網(wǎng)上傳輸。模型中的應(yīng)用和中間件都具備生成和解析JSON的能力。應(yīng)用對(duì)數(shù)據(jù)庫(kù)的操作主要是“增、刪、改、查”,在模型的中間件與數(shù)據(jù)庫(kù)交互過(guò)程中,其核心業(yè)務(wù)是數(shù)據(jù)庫(kù)記錄與JSON對(duì)象[2]的雙向相互轉(zhuǎn)化。
2.1 數(shù)據(jù)庫(kù)記錄轉(zhuǎn)換為JSON
應(yīng)用有時(shí)會(huì)跨數(shù)據(jù)庫(kù)讀取數(shù)據(jù),比如用戶需要查詢(xún)其他應(yīng)用數(shù)據(jù)。假如應(yīng)用A的用戶需要查詢(xún)應(yīng)用B的數(shù)據(jù),其核心工作是應(yīng)用A的用戶讀取異構(gòu)數(shù)據(jù)的JSON數(shù)據(jù)[3]。用戶想應(yīng)用A發(fā)起數(shù)據(jù)請(qǐng)求,應(yīng)用A解析后就向JSON中間件發(fā)出數(shù)據(jù)查詢(xún)請(qǐng)求,查詢(xún)應(yīng)用B的數(shù)據(jù)的時(shí)候,中間件解析該請(qǐng)求以后就會(huì)向應(yīng)用B發(fā)出數(shù)據(jù)請(qǐng)求,應(yīng)用B就會(huì)讀取其數(shù)據(jù)庫(kù),并將相應(yīng)的結(jié)果集轉(zhuǎn)換為JSON,然后應(yīng)用B又將JSON結(jié)果發(fā)給中間件,中間件又將JSON結(jié)果發(fā)給應(yīng)用A,應(yīng)用A將結(jié)果返回給用戶。
2.2 JSON數(shù)據(jù)持久化到數(shù)據(jù)庫(kù)
應(yīng)用除了從異構(gòu)數(shù)據(jù)庫(kù)讀取數(shù)據(jù)外,還會(huì)將數(shù)據(jù)保存到數(shù)據(jù)庫(kù),比如用戶提交表單的操作。假如應(yīng)用A的用戶在瀏覽器里輸入了表單的信息,然后點(diǎn)擊提交,最終的結(jié)果是該用戶輸入的表單信息保存應(yīng)用B的數(shù)據(jù)庫(kù)中。該過(guò)程工作原理如下,用戶提交數(shù)據(jù)以后,應(yīng)用A收到該表單數(shù)據(jù),應(yīng)用A將該數(shù)據(jù)經(jīng)過(guò)處理以后轉(zhuǎn)化成JSON并發(fā)送給中間件,中間件收到數(shù)據(jù)以后又將該數(shù)據(jù)發(fā)送給應(yīng)用B,應(yīng)用B收到數(shù)據(jù)以后將數(shù)據(jù)持久化到自己的數(shù)據(jù)庫(kù)中。
3 應(yīng)用與中間件交互協(xié)議
在確定數(shù)據(jù)交換格式以后就需要確定具體的數(shù)據(jù)交換協(xié)議了。根據(jù)模型的架構(gòu),協(xié)議分兩個(gè)方向。一個(gè)是中間件向應(yīng)用返回的數(shù)據(jù)都只是靜態(tài)的JSON,比較簡(jiǎn)單,比如可能是請(qǐng)求的是否成功、錯(cuò)誤提示信息、結(jié)果集等。另一個(gè)是應(yīng)用向中間件的操作請(qǐng)求,該部分協(xié)議內(nèi)容是重點(diǎn)。首先該請(qǐng)求需要向中間件表明自己需要訪問(wèn)什么數(shù)據(jù)庫(kù),其次是要告知中間件自己將執(zhí)行什么類(lèi)的數(shù)據(jù)操作,最后就是需要數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句。如下面的JSON所示,是應(yīng)用向中間件請(qǐng)求的JSON數(shù)據(jù)[4],鍵database表示數(shù)據(jù)庫(kù),鍵operate表示操作類(lèi)型(增加用insert、刪除用delete、修改用update、查詢(xún)用select),鍵statement表示具體的執(zhí)行語(yǔ)句,這個(gè)語(yǔ)句并不是sql,而是類(lèi)似Hiberante的hql,可以使用類(lèi)似對(duì)象、屬性來(lái)簡(jiǎn)化語(yǔ)句,這里查詢(xún)參數(shù)都需要以常量提前整合到語(yǔ)句里面。
{
databse : “b”,
operate : “select”
statement : “select * from Student s where s.xh=111111111”
}
4 安全工作
模型的安全工作從被動(dòng)和主動(dòng)兩方面進(jìn)行。被動(dòng)安全工作主要是靜態(tài)的安全驗(yàn)證,主要是IP驗(yàn)證和證書(shū)驗(yàn)證。主動(dòng)安全工作主要是中間件動(dòng)態(tài)的分析每個(gè)請(qǐng)求的意圖,然后對(duì)之前的請(qǐng)求進(jìn)行關(guān)聯(lián)判斷。
4.1 被動(dòng)安全工作
中間件被動(dòng)安全工作主要是靜態(tài)的安全驗(yàn)證,主要由HTTPS、IP校驗(yàn)、證書(shū)核驗(yàn)組成。從這三方面就基本阻斷了幾乎所有的直接攻擊。首先,中間件和應(yīng)用直接交流采用的網(wǎng)絡(luò)協(xié)議是HTTPS協(xié)議,由于使用了加密的HTTPS協(xié)議,中間件和應(yīng)用之間交流的信息也許能被攻擊者捕獲,但是卻不能被翻譯。其次,中間件只接受合法IP的數(shù)據(jù)請(qǐng)求,由于中間件只和應(yīng)用打交道,而不需要和終端用戶接觸,所以可以給中間件設(shè)置IP白名單,只有白名單內(nèi)的網(wǎng)絡(luò)請(qǐng)求才會(huì)被中間件接受和處理,白名單之外IP主機(jī)的網(wǎng)絡(luò)請(qǐng)求都視為非法請(qǐng)求,直接拒絕。這基本就確保了與中間件進(jìn)行互訪的只有合法已注冊(cè)的應(yīng)用主機(jī)。為更進(jìn)一步確保網(wǎng)絡(luò)安全,模型采用了證書(shū)加密機(jī)制,中間件給每個(gè)應(yīng)用頒發(fā)注冊(cè)了證書(shū)。每次應(yīng)用與中間件之間的會(huì)話失效以后,應(yīng)用就必須帶上證書(shū)來(lái)進(jìn)行安裝驗(yàn)證。通過(guò)以上一系列的安裝工作,模型可以確保攻擊者無(wú)法通過(guò)直接的攻擊來(lái)攻擊中間件[5]。
4.2 主動(dòng)安全工作
模型的主動(dòng)安全工作主要由兩部分完成。一部分是各應(yīng)用增強(qiáng)安全性,由于應(yīng)用是直接接觸終端用戶,需要將很多功能暴露出來(lái),所以應(yīng)用需要防止SQL注入等危險(xiǎn)攻擊行為,這部分工作由應(yīng)用的具體開(kāi)發(fā)完成。另一部分是中間件主動(dòng)防御工作,中間件對(duì)應(yīng)用的每個(gè)操作請(qǐng)求都會(huì)使用過(guò)濾器進(jìn)行安全檢查,一方面由于應(yīng)用和中間件之間的協(xié)議比較特殊,阻止了很多SQL注入,另一方面過(guò)濾器會(huì)對(duì)請(qǐng)求的語(yǔ)句進(jìn)行合理性分析,將不合理的請(qǐng)求進(jìn)行排除并報(bào)告給管理人員。
5 結(jié)語(yǔ)
基于JSON的異構(gòu)數(shù)據(jù)庫(kù)整合模型經(jīng)過(guò)小范圍應(yīng)用,證明該模型簡(jiǎn)單有效,與傳統(tǒng)的使用“硬連接”或接口的方式相比,本模型簡(jiǎn)化了異構(gòu)數(shù)據(jù)庫(kù)訪問(wèn)開(kāi)發(fā)的工作量,提高了各個(gè)相關(guān)應(yīng)用整體的安全性,符合現(xiàn)代各種應(yīng)用跨異構(gòu)數(shù)據(jù)庫(kù)的訪問(wèn)需要。但是在應(yīng)用由于中間件的使用的主動(dòng)安全機(jī)制的過(guò)濾器嚴(yán)謹(jǐn)苛刻,中間件執(zhí)行效率偏低,帶來(lái)應(yīng)用在使用高峰時(shí)期速度偏慢、用戶體驗(yàn)不佳的問(wèn)題,后面需要進(jìn)步對(duì)安全機(jī)制進(jìn)行優(yōu)化調(diào)整。
參考文獻(xiàn)
[1] 于鵬飛.基于異構(gòu)數(shù)據(jù)庫(kù)的智慧校園系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊(教育技術(shù)),2018,17(7):47-48.
[2] 高升.基于JSON的數(shù)據(jù)庫(kù)訪問(wèn)層研究與應(yīng)用[D].北京:北方工業(yè)大學(xué),2019.
[3] 胡章兵,左良利.時(shí)態(tài)JSON數(shù)據(jù)模型及查詢(xún)語(yǔ)言處理[J].計(jì)算機(jī)技術(shù)與發(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] 葉丹娜.動(dòng)態(tài)異構(gòu)信息網(wǎng)絡(luò)的表示學(xué)習(xí)研究[D].北京:北京郵電大學(xué),2019.
收稿日期:2020-08-25
基金項(xiàng)目:四川幼兒師范高等專(zhuān)科學(xué)??蒲许?xiàng)目《基于微信公眾平臺(tái)的學(xué)生管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》(SYB201805)
作者簡(jiǎn)介:熊海東(1986—),男,湖北黃岡人,碩士研究生,講師,研究方向?yàn)椋篔ava Web、移動(dòng)應(yīng)用開(kāi)發(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