本發(fā)明涉及一種數(shù)據(jù)庫連接方法,尤其涉及一種透明化的數(shù)據(jù)庫端口更改方法。
背景技術(shù):
一般來說,java應(yīng)用程序訪問數(shù)據(jù)庫的過程是:①裝載數(shù)據(jù)庫驅(qū)動(dòng)程序;②通過jdbc建立數(shù)據(jù)庫連接;③訪問數(shù)據(jù)庫,執(zhí)行sql語句;④斷開數(shù)據(jù)庫連接。其中JDBC是java和關(guān)系數(shù)據(jù)庫的之間的橋梁。JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。JDBC通過Connection(連接對象接口),指向具體數(shù)據(jù)庫連接對象=Drivermanager.getConnection(String URL)),其中URL這里配置的是數(shù)據(jù)庫的連接字符串,包括數(shù)據(jù)庫的連接IP地址,連接端口及數(shù)據(jù)庫實(shí)例名,如:jdbc:oracle:thin:@192.168.1.1:1521:testdb。URL串中的IP地址可以使用域名,再通過DNS服務(wù)器轉(zhuǎn)換成真實(shí)的IP地址。
為加強(qiáng)數(shù)據(jù)庫的安全性,實(shí)際使用中往往需要更改數(shù)據(jù)庫默認(rèn)連接端口。但是在URL串中數(shù)據(jù)庫連接端口號(hào)是一個(gè)具體數(shù)值。如果變更了數(shù)據(jù)庫的連接端口,則需要到所有對應(yīng)的每一臺(tái)應(yīng)用服務(wù)器上修改數(shù)據(jù)庫連接的URL中的端口號(hào)數(shù)值,配置變更的過程非常繁瑣,增加了大型企業(yè)應(yīng)用服務(wù)器集群對數(shù)據(jù)庫訪問管理的難度。
由上可見,現(xiàn)有更改數(shù)據(jù)庫默認(rèn)連接端口存在如下技術(shù)問題:
1)、效率低。一個(gè)數(shù)據(jù)庫通常都會(huì)有很多的應(yīng)用連接上來,如果數(shù)據(jù)庫變更了連接端口,則需要到每個(gè)應(yīng)用上修改數(shù)據(jù)庫連接配置,不得不操作額外的服務(wù)器,在大型的企業(yè)系統(tǒng)環(huán)境中配置變更的效率將非常的低。
2)、安全性低。在大型的企業(yè)環(huán)境中,修改了數(shù)據(jù)庫連接端口后,可能會(huì)存在遺漏的系統(tǒng)配置未變更,或者改錯(cuò)的情況,導(dǎo)致應(yīng)用連接不上數(shù)據(jù)庫,造成生產(chǎn)故障,配置變更安全性非常低。
3)、不易管理。當(dāng)數(shù)據(jù)庫變更了連接端口后,則需要人為的到每臺(tái)應(yīng)用服務(wù)器上去修改數(shù)據(jù)庫連接URL里的端口號(hào),站在高效運(yùn)維和自動(dòng)化運(yùn)維的角度來衡量,這樣的配置變更非常不便于管理。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種透明化的數(shù)據(jù)庫端口更改方法,能夠?qū)崿F(xiàn)數(shù)據(jù)庫端口變更對應(yīng)用程序訪問透明,可以提高變更效率,變更的安全性及變更的易管理性,減少變更造成的故障,提高系統(tǒng)運(yùn)行的穩(wěn)定性。
本發(fā)明為解決上述技術(shù)問題而采用的技術(shù)方案是提供一種透明化的數(shù)據(jù)庫端口更改方法,包括如下步驟:a)在應(yīng)用服務(wù)器上配置數(shù)據(jù)庫的默認(rèn)連接端口,并啟動(dòng)端口轉(zhuǎn)換模塊;b)客戶端發(fā)起請求,應(yīng)用服務(wù)器收到請求后,對連接端口是否為數(shù)據(jù)庫的默認(rèn)連接端口進(jìn)行判斷;c)如果連接端為默認(rèn)連接端口,則截取請求包,封包進(jìn)入端口轉(zhuǎn)換模塊,通過指定的端口映射對應(yīng)關(guān)系將端口進(jìn)行轉(zhuǎn)換;d)所述端口轉(zhuǎn)換模塊將請求包中的目標(biāo)端口轉(zhuǎn)換為變更的端口后,再和數(shù)據(jù)庫創(chuàng)建物理連接,從數(shù)據(jù)庫中獲取數(shù)據(jù),并返回給客戶端。
上述的透明化的數(shù)據(jù)庫端口更改方法,其中,所述默認(rèn)連接端口配置在數(shù)據(jù)庫的連接字符串中,所述數(shù)據(jù)庫的連接字符串中還包括數(shù)據(jù)庫的連接地址和數(shù)據(jù)庫實(shí)例名,所述數(shù)據(jù)庫的連接地址為IP地址或域名地址。
上述的透明化的數(shù)據(jù)庫端口更改方法,其中,所述端口轉(zhuǎn)換模塊掃描本地發(fā)起的所有連接,對連接端口是否為數(shù)據(jù)庫的默認(rèn)連接端口進(jìn)行判斷,如果為非默認(rèn)連接端口的請求,原請求直接發(fā)出;如果為默認(rèn)連接端口,則截取請求包,封包進(jìn)入端口轉(zhuǎn)換模塊,通過指定的端口映射對應(yīng)關(guān)系將端口進(jìn)行轉(zhuǎn)換,再封包將請求發(fā)出。
上述的透明化的數(shù)據(jù)庫端口更改方法,其中,所述端口轉(zhuǎn)換模塊啟動(dòng)后,先根據(jù)數(shù)據(jù)庫的默認(rèn)連接端口嘗試與數(shù)據(jù)庫服務(wù)器創(chuàng)建數(shù)據(jù)庫連接,如果默認(rèn)連接端口不存在,則遍歷數(shù)據(jù)庫服務(wù)器上所有端口,直至確認(rèn)數(shù)據(jù)庫服務(wù)器上的真實(shí)連接端口,并存儲(chǔ)默認(rèn)連接端口與真實(shí)連接端口之間的映射對應(yīng)關(guān)系。
上述的透明化的數(shù)據(jù)庫端口更改方法,其中,所述應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器之間通過三次握手建立一個(gè)TCP連接,在TCP的包頭里包含了數(shù)據(jù)庫服務(wù)器的真實(shí)連接端口號(hào)。
本發(fā)明對比現(xiàn)有技術(shù)有如下的有益效果:本發(fā)明提供的透明化的數(shù)據(jù)庫端口更改方法,通過,可以確保在修改數(shù)據(jù)庫連接端口后,所有的應(yīng)用在不需要做配置變更的情況下,都能正確的通過新的端口連接到數(shù)據(jù)庫上進(jìn)行數(shù)據(jù)庫訪問,大大提高變更效率,變更的安全性及變更的易管理性,減少變更造成的故障,提高系統(tǒng)運(yùn)行的穩(wěn)定性。
附圖說明
圖1為本發(fā)明透明化的數(shù)據(jù)庫端口更改系統(tǒng)架構(gòu)示意圖;
圖2為本發(fā)明透明化的數(shù)據(jù)庫端口更改流程示意圖;
圖3為本發(fā)明檢測數(shù)據(jù)服務(wù)器連接端口流程示意圖;
圖4為本發(fā)明的應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器之間建立TCP連接示意圖;
圖5為圖4中TCP包頭結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的描述。
圖1為本發(fā)明透明化的數(shù)據(jù)庫端口更改系統(tǒng)架構(gòu)示意圖;圖2為本發(fā)明透明化的數(shù)據(jù)庫端口更改流程示意圖。
請參見圖1和圖2,本發(fā)明提供的透明化的數(shù)據(jù)庫端口更改方法,包括如下步驟:
a)在應(yīng)用服務(wù)器上配置數(shù)據(jù)庫的默認(rèn)連接端口,并啟動(dòng)端口轉(zhuǎn)換模塊;
b)客戶端發(fā)起請求,應(yīng)用服務(wù)器收到請求后,對連接端口是否為數(shù)據(jù)庫的默認(rèn)連接端口進(jìn)行判斷;
c)如果連接端為默認(rèn)連接端口,則截取請求包,封包進(jìn)入端口轉(zhuǎn)換模塊,通過指定的端口映射對應(yīng)關(guān)系將端口進(jìn)行轉(zhuǎn)換;
d)所述端口轉(zhuǎn)換模塊將請求包中的目標(biāo)端口轉(zhuǎn)換為變更的端口后,再和數(shù)據(jù)庫創(chuàng)建物理連接,從數(shù)據(jù)庫中獲取數(shù)據(jù),并返回給客戶端。
本發(fā)明通過端口映射把該進(jìn)程上需要監(jiān)控的端口進(jìn)行重定向,再連接該服務(wù)。比如在應(yīng)用服務(wù)器中配置的數(shù)據(jù)庫連接池的模式為域名:端口,端口為默認(rèn)的端口號(hào)1521;
客戶端發(fā)起請求,應(yīng)用服務(wù)器收到請求后向數(shù)據(jù)庫發(fā)起連接;
本機(jī)的端口轉(zhuǎn)換進(jìn)程掃描本地發(fā)起的所有連接,對端口是否為1521進(jìn)行判斷,如果為非1521端口的請求,原請求發(fā)出;
如果為1521端口,則截取請求包,封包進(jìn)入端口轉(zhuǎn)換模塊,通過端口轉(zhuǎn)換模塊指定的端口映射對應(yīng)關(guān)系將端口進(jìn)行轉(zhuǎn)換,再封包將請求發(fā)出;
請求包中的目標(biāo)端口已經(jīng)轉(zhuǎn)換為變更后的端口,利用變更后的端口和數(shù)據(jù)庫創(chuàng)建物理連接,從數(shù)據(jù)庫中獲取數(shù)據(jù),返回給客戶端。
在程序啟動(dòng)的時(shí)候,同時(shí)啟動(dòng)端口轉(zhuǎn)換模塊,不停的異步監(jiān)聽本機(jī)發(fā)出的http連接請求,一旦監(jiān)聽到請求的報(bào)文里有需要變換的端口,如Oracle數(shù)據(jù)庫的默認(rèn)端口1521,端口轉(zhuǎn)換模塊就啟動(dòng)一個(gè)線程,就把該端口重定向到真實(shí)的端口上(如1789端口),在這個(gè)線程里,完成端口轉(zhuǎn)換。為了保證實(shí)現(xiàn)透明化的自動(dòng)化重定向,在端口轉(zhuǎn)換模塊啟動(dòng)后需要先與遠(yuǎn)端的數(shù)據(jù)庫服務(wù)器創(chuàng)建數(shù)據(jù)庫連接,使用的是默認(rèn)端口1521,端口轉(zhuǎn)換模塊會(huì)先到遠(yuǎn)端主機(jī)上嘗試與1521創(chuàng)建連接,如果1521端口不存在,則到遠(yuǎn)程主機(jī)上遍歷所有端口,確認(rèn)數(shù)據(jù)庫的真實(shí)連接端口值,再將1521端口轉(zhuǎn)換為真實(shí)的數(shù)據(jù)庫端口,整個(gè)過程由端口轉(zhuǎn)換模塊自動(dòng)完成,不需要手動(dòng)在端口轉(zhuǎn)換模塊中配置目標(biāo)端口號(hào),如圖3所示。同時(shí)遠(yuǎn)程主機(jī)和host的hostport端口建立連接。也可以在端口映射裝置的配置文件中指定端口的轉(zhuǎn)發(fā)。通過這種端口映射裝置,在數(shù)據(jù)庫修改默認(rèn)端口的情況下,應(yīng)用端可以透明地連接到數(shù)據(jù)庫上,不需要做大規(guī)模的配置變更。將本地主機(jī)要訪問的遠(yuǎn)程端口進(jìn)行映射變更,實(shí)現(xiàn)本地主機(jī)訪問遠(yuǎn)程服務(wù)器的1521端口就相當(dāng)于訪問遠(yuǎn)程服務(wù)器的1789端口。
本發(fā)明的應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器之間通過三次握手建立一個(gè)TCP連接,如圖4所示,在應(yīng)用服務(wù)器(主機(jī)A)的配置中,發(fā)起的請求是連接到數(shù)據(jù)庫服務(wù)器(主機(jī)B)的1521端口,但數(shù)據(jù)庫服務(wù)器的1521端口已被改為1789端口。通過本發(fā)明的端口轉(zhuǎn)換模塊,在主機(jī)A(應(yīng)用服務(wù)器)發(fā)起第一次握手前,已將http報(bào)文內(nèi)的目的端口從1521改成1789,主機(jī)發(fā)起第一次握手,發(fā)送給正確的數(shù)據(jù)庫(主機(jī)B)的監(jiān)控端口上,主機(jī)B收到請求后發(fā)起第二次握手回復(fù)連接確認(rèn)信息給主機(jī)A,主機(jī)A再發(fā)起第三次握手,此時(shí)也需通過端口轉(zhuǎn)換模塊將連接確認(rèn)信息發(fā)送給主機(jī)B。雖然主機(jī)A發(fā)起請求連接的端口是1521,但實(shí)際上是與主機(jī)B的1789端口建立了TCP連接。以此實(shí)現(xiàn)變更數(shù)據(jù)庫端口對應(yīng)用透明。在TCP的包頭里包含了目標(biāo)主機(jī)的端口號(hào),如圖5為TCP包頭的結(jié)構(gòu)。
綜上所述,本發(fā)明的數(shù)據(jù)庫端口變更后,不需要變更現(xiàn)有的應(yīng)用代碼,不需要變更現(xiàn)有的中間件運(yùn)行配置,不需要額外的配置工作量,提高工作效率,簡化復(fù)雜繁瑣的工作。此外,本發(fā)明可以自動(dòng)發(fā)現(xiàn)數(shù)據(jù)庫端口號(hào)變更,并自動(dòng)連接到真實(shí)的數(shù)據(jù)庫端口上,而不需要做任何的手動(dòng)配置,減少數(shù)據(jù)庫變更帶來的風(fēng)險(xiǎn),提升數(shù)據(jù)庫端口變更管理操作的可靠性、安全性,減少遺漏操作等帶來應(yīng)用系統(tǒng)無法正常連接等負(fù)面影響。本發(fā)明的數(shù)據(jù)庫端口變更對應(yīng)用透明,對于大型的生產(chǎn)環(huán)境,有效的提升了生產(chǎn)環(huán)境管理的簡易性和效率。
雖然本發(fā)明已以較佳實(shí)施例揭示如上,然其并非用以限定本發(fā)明,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的修改和完善,因此本發(fā)明的保護(hù)范圍當(dāng)以權(quán)利要求書所界定的為準(zhǔn)。