欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)庫連接處理方法及裝置制造方法

文檔序號(hào):7776288閱讀:205來源:國知局
一種數(shù)據(jù)庫連接處理方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)庫連接處理方法及裝置,屬于數(shù)據(jù)通信【技術(shù)領(lǐng)域】。所述方法包括:接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接;當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接;判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同;若相同,將該數(shù)據(jù)庫連接分配給客戶端使用,否則,通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。本發(fā)明實(shí)現(xiàn)了多用戶權(quán)限隔離的前提下,避免數(shù)據(jù)庫連接總數(shù)的不斷上升,節(jié)省了連接池耗費(fèi)的服務(wù)器資源。
【專利說明】一種數(shù)據(jù)庫連接處理方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)通信【技術(shù)領(lǐng)域】,具體涉及一種數(shù)據(jù)庫連接處理方法及裝置。
【背景技術(shù)】
[0002]在數(shù)據(jù)庫應(yīng)用中,客戶端的每一次數(shù)據(jù)訪問請求都需要經(jīng)歷與服務(wù)端建立數(shù)據(jù)庫連接、打開數(shù)據(jù)庫、存取數(shù)據(jù)和關(guān)閉數(shù)據(jù)庫連接等步驟,而連接并打開數(shù)據(jù)庫是一件既消耗資源又費(fèi)時(shí)的工作,如果頻繁發(fā)生這種數(shù)據(jù)庫操作,系統(tǒng)的性能必然會(huì)急劇下降。數(shù)據(jù)庫連接池技術(shù)是在存取數(shù)據(jù)操作完成后,并不關(guān)閉數(shù)據(jù)庫連接,而是將其存儲(chǔ)起來,下一個(gè)數(shù)據(jù)庫操作請求就可以直接使用這個(gè)數(shù)據(jù)庫連接,通過復(fù)用已建立的數(shù)據(jù)庫連接,能夠極大地節(jié)省系統(tǒng)資源和數(shù)據(jù)庫操作時(shí)間。
[0003]在使用數(shù)據(jù)庫連接池技術(shù)時(shí),連接池中要預(yù)先保留一定數(shù)量的數(shù)據(jù)庫連接,如果數(shù)量太大會(huì)對服務(wù)端造成負(fù)擔(dān),數(shù)量太小則數(shù)據(jù)庫連接數(shù)可能不夠用??蛻舳税l(fā)來數(shù)據(jù)庫連接請求時(shí),連接池模塊會(huì)檢查當(dāng)前連接的總數(shù),若未達(dá)到“預(yù)留數(shù)量”,則會(huì)向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接,使用完后放入連接池的連接隊(duì)列中以供下次使用;若已經(jīng)達(dá)到“預(yù)留數(shù)量”,則不會(huì)新建連接,而是從連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接分配給該客戶端使用,使用完后重新放回隊(duì)列。
[0004]客戶端與服務(wù)端建立連接時(shí),會(huì)經(jīng)歷以下幾個(gè)階段:連接、握手、認(rèn)證、認(rèn)證結(jié)果。連接指客戶端去連接(connect)服務(wù)端的監(jiān)聽端口,然后服務(wù)端會(huì)發(fā)送一個(gè)握手包給客戶端,客戶端在認(rèn)證階段將用戶名和密碼發(fā)給服務(wù)端,服務(wù)端驗(yàn)證密碼是否正確后,將認(rèn)證結(jié)果返回給客戶端。經(jīng)歷以上四個(gè)階段后,一個(gè)數(shù)據(jù)庫連接被建立起來,客戶端接下來可以發(fā)送SQL語句給服務(wù)端,服務(wù)端執(zhí)行SQL語句后,把執(zhí)行結(jié)果返回給客戶端。
[0005]每個(gè)連接是與某個(gè)用戶綁定在一起的,而每個(gè)用戶的權(quán)限不同,一個(gè)用戶只能訪問所有它具有權(quán)限的庫和表,A用戶訪問不了 B用戶的數(shù)據(jù),反之亦然。這一點(diǎn)就會(huì)影響到連接池對數(shù)據(jù)庫連接的存儲(chǔ)設(shè)計(jì),連接池一般把數(shù)據(jù)庫連接存儲(chǔ)在隊(duì)列結(jié)構(gòu)里。如果直接把所有用戶的數(shù)據(jù)庫連接都放入一個(gè)隊(duì)列,那么客戶端A(使用A用戶名)在需要執(zhí)行SQL語句時(shí),就有可能取出客戶端B (使用B用戶名)認(rèn)證過的數(shù)據(jù)庫連接,從而使得A用戶可以訪問B用戶的數(shù)據(jù),造成用戶權(quán)限的混亂。
[0006]一個(gè)最直觀的避免用戶權(quán)限混亂的想法是:將屬于不同用戶名的數(shù)據(jù)庫連接分別存入不同的連接隊(duì)列,比如A用戶的數(shù)據(jù)庫連接存入A隊(duì)列,B用戶的數(shù)據(jù)庫連接存入B隊(duì)列,并且記錄每個(gè)客戶端所使用的用戶名。在某個(gè)客戶端需要從連接池里取數(shù)據(jù)庫連接來使用時(shí),根據(jù)所存儲(chǔ)的該客戶端使用的用戶名,從相應(yīng)的連接隊(duì)列里取出一個(gè)數(shù)據(jù)庫連接,分配給該客戶端使用,使用完畢后重新放入到對應(yīng)的連接隊(duì)列。
[0007]以上方案的缺點(diǎn)是無法控制連接總數(shù)的上漲。再來回顧一下客戶端與服務(wù)端建立連接的四個(gè)階段:連接、握手、認(rèn)證、認(rèn)證結(jié)果。其中在前兩個(gè)階段,客戶端并沒有發(fā)送自身所使用的用戶名,而是在第三個(gè)階段即認(rèn)證階段,才會(huì)把用戶名和密碼發(fā)出來。而連接池模塊在連接階段,就已經(jīng)需要根據(jù)連接總數(shù)是否達(dá)到“預(yù)留數(shù)量”來決定是新建連接還是復(fù)用連接了。
[0008]舉個(gè)例子:連接池的“預(yù)留數(shù)量”設(shè)為64,如果多個(gè)用戶名的連接共享同一個(gè)存儲(chǔ)隊(duì)列,則當(dāng)有客戶端來連接時(shí),連接池模塊只需要判斷這個(gè)共享的隊(duì)列的長度,就可以得到目前池內(nèi)的連接數(shù)量,然后與64比較,若小于64則向服務(wù)端新建連接,若大于等于64,則從池內(nèi)取出一個(gè)連接給客戶端使用。
[0009]現(xiàn)在改成了每個(gè)用戶名擁有自己的連接隊(duì)列,不妨設(shè)有A和B兩個(gè)用戶名,A隊(duì)列長度為64 (已經(jīng)達(dá)到“預(yù)留數(shù)量”個(gè)連接),而B隊(duì)列長度為I (只有I個(gè)連接,遠(yuǎn)低于“預(yù)留數(shù)量”)?,F(xiàn)在有客戶端來連接,而且在這個(gè)階段還沒有發(fā)送用戶名過來,那么連接池應(yīng)該如何決定是新建連接還是復(fù)用連接呢?有兩個(gè)可能的原則:一是所有隊(duì)列都低于64才新建連接,帶來的問題是B用戶始終只有I個(gè)連接(因?yàn)锳用戶已經(jīng)達(dá)到了 64個(gè)連接),很可能不夠用導(dǎo)致客戶端報(bào)錯(cuò),因此這種方式不可行;二是有一個(gè)隊(duì)列低于64就新建連接,這種方式問題也很嚴(yán)重,試想,如果A用戶不斷來連接,因?yàn)锽用戶連接數(shù)少就新建連接,建好連接后發(fā)現(xiàn)是A用戶的連接,就放入A隊(duì)列,導(dǎo)致A隊(duì)列長度越來越大,連接數(shù)不斷上漲,“預(yù)留數(shù)量”的限制已經(jīng)無用。
[0010]從以上分析可以看出,根據(jù)現(xiàn)有的連接池實(shí)現(xiàn)方案,當(dāng)所有用戶名共享一個(gè)連接隊(duì)列時(shí),A用戶可能會(huì)從隊(duì)列中取出B用戶的連接,導(dǎo)致用戶權(quán)限混亂;而當(dāng)每個(gè)用戶名使用自己的隊(duì)列來存儲(chǔ)連接時(shí),又會(huì)造成連接總數(shù)的不斷上升,導(dǎo)致服務(wù)端的資源消耗過大。

【發(fā)明內(nèi)容】

[0011]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)庫連接處理方法及裝置。
[0012]依據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)庫連接處理方法,用于客戶端與服務(wù)端之間,所述方法包括:
[0013]接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接;
[0014]當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接;
[0015]判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同;
[0016]當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。
[0017]可選地,所述方法還包括:
[0018]當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接;
[0019]將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信息。
[0020]可選地,所述方法還包括:在客戶端使用完數(shù)據(jù)庫連接后,將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。
[0021]可選地,所述通知服務(wù)端對客戶端進(jìn)行認(rèn)證,包括:
[0022]構(gòu)造一個(gè)切換用戶命令,所述切換用戶命令中包括客戶端使用的用戶名及密碼信息;[0023]在將客戶端的數(shù)據(jù)庫操作請求發(fā)送到服務(wù)端之前,將所述切換用戶命令發(fā)送到服務(wù)端,以使服務(wù)端根據(jù)所述切換用戶命令中的用戶名和密碼信息對客戶端進(jìn)行認(rèn)證。
[0024]可選地,所述切換用戶命令為MySQL數(shù)據(jù)庫的COM_CHANGE_USER命令。
[0025]根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)庫連接處理裝置,用于客戶端與服務(wù)端之間,所述裝置包括:
[0026]第一判斷單元,適于接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接;
[0027]第一處理單元,適于當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接;
[0028]第二判斷單元,適于判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同;
[0029]第二處理單元,適于當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。
[0030]可選地,所述裝置還包括第三處理單元,所述第三處理單元適于:
[0031]當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接;
[0032]將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信息。
[0033]可選地,所述裝置還包括第四處理單元,所述第四處理單元適于在客戶端使用完數(shù)據(jù)庫連接后,將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。
[0034]可選地,所述第二處理單元進(jìn)一步適于:
[0035]構(gòu)造一個(gè)切換用戶命令,所述切換用戶命令中包括客戶端使用的用戶名及密碼信息;
[0036]在將客戶端的數(shù)據(jù)庫操作請求發(fā)送到服務(wù)端之前,將所述切換用戶命令發(fā)送到服務(wù)端,以使服務(wù)端根據(jù)所述切換用戶命令中的用戶名和密碼信息對客戶端進(jìn)行認(rèn)證。
[0037]可選地,所述切換用戶命令為MySQL數(shù)據(jù)庫的COM_CHANGE_USER命令。
[0038]根據(jù)本發(fā)明提供的上述技術(shù)方案,當(dāng)客戶端使用的用戶名與從連接池的連接隊(duì)列取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,在認(rèn)證通過后再將該數(shù)據(jù)庫連接分配給客戶端使用,這樣,通過將一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接轉(zhuǎn)化為另一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接,再配合多用戶共享的連接隊(duì)列,實(shí)現(xiàn)了多用戶權(quán)限隔離的前提下,避免了數(shù)據(jù)庫連接總數(shù)的不斷上升,節(jié)省了連接池耗費(fèi)的服務(wù)器資源。
[0039]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【專利附圖】

【附圖說明】
[0040]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:[0041 ]圖1示出了本發(fā)明實(shí)施例的應(yīng)用場景;
[0042]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)庫連接處理方法流程圖;
[0043]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)庫連接處理方法的詳細(xì)流程圖;
[0044]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)庫連接處理裝置結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0045]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0046]圖1示出了本發(fā)明實(shí)施例的應(yīng)用場景。在圖1所示的應(yīng)用場景中,包括多個(gè)客戶端(圖中示出了 2個(gè),分別為客戶端一和客戶端二)、連接池模塊和服務(wù)端,服務(wù)端中具有客戶端需要訪問和操作的數(shù)據(jù)庫,圖中示出的是MySQL數(shù)據(jù)庫,當(dāng)然也可以是其他類型的數(shù)據(jù),連接池模塊位于客戶端和服務(wù)端之間。
[0047]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)庫連接處理方法流程圖,所述方法用于客戶端與服務(wù)端之間,例如,由客戶端與服務(wù)端之間的連接池模塊來執(zhí)行該方法。參照圖2,所述方法包括:
[0048]步驟202,接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接;
[0049]客戶端在進(jìn)行每一次數(shù)據(jù)庫操作請求前都需要請求一個(gè)數(shù)據(jù)庫連接,連接池接收到客戶端的數(shù)據(jù)庫連接請求時(shí),首先獲取連接隊(duì)列的長度,連接隊(duì)列的長度表示了連接池中存儲(chǔ)的數(shù)據(jù)庫連接的數(shù)量。在本發(fā)明實(shí)施例中,采用的是多用戶共享連接隊(duì)列,并且連接隊(duì)列中的數(shù)據(jù)庫連接是與用戶名相關(guān)聯(lián)的,在客戶端與服務(wù)端建立數(shù)據(jù)庫連接的過程中,連接池可以記錄客戶端使用的用戶名,并將用戶名與數(shù)據(jù)庫進(jìn)行關(guān)聯(lián)后存儲(chǔ)到連接隊(duì)列中,例如,可以將用戶名作為數(shù)據(jù)庫連接的一個(gè)標(biāo)簽存儲(chǔ)在連接隊(duì)列中。其中,連接池可以使用IP地址加TCP/IP端口號(hào)來標(biāo)識(shí)客戶端。
[0050]所述預(yù)設(shè)門限可以根據(jù)服務(wù)端的處理能力來設(shè)置,服務(wù)端的處理能力較高時(shí),所述預(yù)設(shè)門限可以設(shè)置的較高,服務(wù)端的處理能力較低時(shí),所述預(yù)設(shè)門限可以設(shè)置的較低。例如,將所述預(yù)設(shè)門限設(shè)置為64。
[0051]步驟204,當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接;
[0052]當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),說明客戶端可以復(fù)用連接隊(duì)列中的數(shù)據(jù)庫連接,于是,從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接來供客戶端使用。
[0053]步驟206,判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同;
[0054]為避免一個(gè)用戶使用另外一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接對數(shù)據(jù)庫進(jìn)行操作所造成的用戶權(quán)限混亂,在本發(fā)明實(shí)施例中,在將連接隊(duì)列中取出的數(shù)據(jù)庫連接分配給客戶端使用之前,還進(jìn)一步判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同,并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)的處理。
[0055]步驟208,當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;
[0056]當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),說明該數(shù)據(jù)庫連接之前就是由使用該客戶端的用戶建立的,該用戶具有與該數(shù)據(jù)庫連接對應(yīng)的權(quán)限,因此,可以直接將該數(shù)據(jù)庫連接分配給客戶端使用。
[0057]步驟210,當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。
[0058]當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),說明該數(shù)據(jù)庫連接之前是由其他用戶建立的,使用該客戶端的用戶不具有與該數(shù)據(jù)接口連接對應(yīng)的權(quán)限,于是,通知服務(wù)端對客戶端進(jìn)行認(rèn)證,即將一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接轉(zhuǎn)化為另一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接,如此,能夠避免用戶權(quán)限混亂。
[0059]可見,根據(jù)本發(fā)明實(shí)施例的一個(gè)技術(shù)方案,通過將一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接轉(zhuǎn)化為另一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接,再配合多用戶共享的連接隊(duì)列,實(shí)現(xiàn)了多用戶權(quán)限隔離的前提下,避免了數(shù)據(jù)庫連接總數(shù)的不斷上升,節(jié)省了連接池耗費(fèi)的服務(wù)器資源。
[0060]可選地,在步驟210中,所述通知服務(wù)端對客戶端進(jìn)行認(rèn)證的過程為:
[0061]首先,連接池模塊構(gòu)造一個(gè)切換用戶命令,所述切換用戶命令中包括客戶端使用的用戶名及密碼信息;
[0062]然后,在將客戶端的數(shù)據(jù)庫操作請求發(fā)送到服務(wù)端之前,將所述切換用戶命令發(fā)送到服務(wù)端;
[0063]最后,服務(wù)端接收到所述切換用戶命令后,根據(jù)所述切換用戶命令中的用戶名和密碼信息對客戶端進(jìn)行認(rèn)證,并將認(rèn)證結(jié)果通知給連接池模塊,所述認(rèn)證結(jié)果包括認(rèn)證通過和認(rèn)證不通過。在認(rèn)證通過后,連接池模塊將該數(shù)據(jù)庫連接分配給客戶端使用,在認(rèn)證不通過時(shí),客戶端不能對數(shù)據(jù)庫進(jìn)行操作。
[0064]其中,當(dāng)服務(wù)端的數(shù)據(jù)庫為MySQL數(shù)據(jù)庫時(shí),所述切換用戶命令可以是MySQL數(shù)據(jù)庫的 COM_CHANGE_USER 命令。
[0065]COM_CHANGE_USER是MySQL的通訊協(xié)議的一種,其目的是將一個(gè)用戶(用戶A)的數(shù)據(jù)庫連接改變成另一個(gè)用戶(用戶B)的數(shù)據(jù)庫連接,改變的方法是在用戶A的數(shù)據(jù)庫連接上發(fā)送用戶B的用戶名和密碼。也就是說,當(dāng)連接池模塊發(fā)現(xiàn)客戶端的用戶名與即將分配給該客戶端使用的數(shù)據(jù)庫連接的用戶名不同時(shí),如果直接給其使用,必將導(dǎo)致用戶A訪問到用戶B的數(shù)據(jù),但通過在客戶端的數(shù)據(jù)庫操作請求之前先執(zhí)行一個(gè)COM_CHANGE_USER命令,便可以將該數(shù)據(jù)庫連接的用戶進(jìn)行切換,如客戶端使用的是用戶A,而數(shù)據(jù)庫連接是由用戶B認(rèn)證的,則可以將該數(shù)據(jù)庫連接切換(CHANGE)到用戶A,然后再在該數(shù)據(jù)庫連接上執(zhí)行用戶A的數(shù)據(jù)庫操作請求,就不會(huì)發(fā)生權(quán)限混亂的問題了。
[0066]可選地,所述方法還包括:當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接,將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信息。
[0067]向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接的過程可以包括:
[0068]首先,連接池模塊將客戶端的數(shù)據(jù)庫連接請求轉(zhuǎn)發(fā)到服務(wù)端;
[0069]然后,服務(wù)端會(huì)發(fā)送一個(gè)握手包給連接池模塊,連接池模塊將握手包轉(zhuǎn)發(fā)給客戶端;[0070]其次,客戶端根據(jù)握手包構(gòu)造一個(gè)認(rèn)證包發(fā)送給連接池模塊,連接池模塊將認(rèn)證包轉(zhuǎn)發(fā)給服務(wù)端,認(rèn)證包中包括用戶名和密碼信息,連接池模塊還在本地記錄客戶端使用的用戶名,這樣,當(dāng)再次接收到該客戶端的數(shù)據(jù)庫連接請求時(shí),就可以知道該客戶端所使用的用戶名了;
[0071]最后,服務(wù)端驗(yàn)證密碼是否正確后,將認(rèn)證結(jié)果發(fā)送到連接池模塊,連接池模塊將認(rèn)證結(jié)果轉(zhuǎn)發(fā)給客戶端,從而完成了 一個(gè)數(shù)據(jù)庫連接的建立。
[0072]可選地,所述方法還包括:在客戶端使用完數(shù)據(jù)庫連接(不論是新建的數(shù)據(jù)庫連接,還是從連接隊(duì)列中取出數(shù)據(jù)庫連接)后,連接池模塊將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。這樣,客戶端后續(xù)就可以復(fù)用該數(shù)據(jù)庫連接了。
[0073]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)庫連接處理方法的詳細(xì)流程圖,所述方法用于客戶端與服務(wù)端之間,例如,由客戶端與服務(wù)端之間的連接池模塊來執(zhí)行該方法。參照圖3,所述方法包括:
[0074]步驟302,接收到客戶端的數(shù)據(jù)庫連接請求;
[0075]步驟304,判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,若是,進(jìn)入步驟314,否則,進(jìn)入步驟306;
[0076]其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接。
[0077]步驟306,當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接;
[0078]步驟308,判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同,若是,進(jìn)入步驟310,否則,進(jìn)入步驟312 ;
[0079]步驟310,當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;
[0080]步驟312,當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用;
[0081]步驟314,當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接;
[0082]步驟316,將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信
肩、O
[0083]步驟318,在客戶端使用完數(shù)據(jù)庫連接后,將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。
[0084]與上述數(shù)據(jù)庫連接處理方法相對應(yīng),本發(fā)明實(shí)施例還提供一種實(shí)現(xiàn)上述方法的數(shù)據(jù)庫連接處理裝置。
[0085]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)庫連接處理裝置結(jié)構(gòu)圖。所述裝置用于客戶端與服務(wù)端之間,例如,所述裝置位于客戶端與服務(wù)端之間的連接池模塊中,參照圖4,所述裝置包括第一判斷單元10、第一處理單元20、第二判斷單元30和第二處理單元40,其中:
[0086]第一判斷單元10適于接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接.[0087]第一處理單元20適于當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接。
[0088]第二判斷單元30適于判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同。
[0089]第二處理單元40適于當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。
[0090]其中,第二處理單元40可以安裝如下方式通知服務(wù)端對客戶端進(jìn)行認(rèn)證:構(gòu)造一個(gè)切換用戶命令,所述切換用戶命令中包括客戶端使用的用戶名及密碼信息;在將客戶端的數(shù)據(jù)庫操作請求發(fā)送到服務(wù)端之前,將所述切換用戶命令發(fā)送到服務(wù)端,以使服務(wù)端根據(jù)所述切換用戶命令中的用戶名和密碼信息對客戶端進(jìn)行認(rèn)證。當(dāng)服務(wù)端的數(shù)據(jù)庫為MySQL數(shù)據(jù)庫時(shí),所述切換用戶命令可以是MySQL數(shù)據(jù)庫的COM_CHANGE_USER命令。
[0091]可選地,所述裝置還包括第三處理單元(圖未示),所述第三處理單元適于:當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接;將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信息。
[0092]可選地,所述裝置還包括第四處理單元(圖未示),所述第四處理單元適于在客戶端使用完數(shù)據(jù)庫連接后,將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。
[0093]綜上所述,根據(jù)本發(fā)明提供的上述技術(shù)方案,當(dāng)客戶端使用的用戶名與從連接池的連接隊(duì)列取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,在認(rèn)證通過后再將該數(shù)據(jù)庫連接分配給客戶端使用,這樣,通過將一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接轉(zhuǎn)化為另一個(gè)用戶認(rèn)證過的數(shù)據(jù)庫連接,再配合多用戶共享的連接隊(duì)列,實(shí)現(xiàn)了多用戶權(quán)限隔離的前提下,避免了數(shù)據(jù)庫連接總數(shù)的不斷上升,節(jié)省了連接池耗費(fèi)的服務(wù)器資源。
[0094]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
[0095]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0096]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0097]本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
[0098]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
[0099]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)庫連接處理裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
[0100]應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
【權(quán)利要求】
1.一種數(shù)據(jù)庫連接處理方法,用于客戶端與服務(wù)端之間,所述方法包括: 接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接; 當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接; 判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同; 當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。
2.如權(quán)利要求1所述的數(shù)據(jù)庫連接處理方法,其中,還包括: 當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接; 將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信息。
3.如權(quán)利要求1或2所述的數(shù)據(jù)庫連接處理方法,其中,還包括: 在客戶端使用完數(shù)據(jù)庫連接后,將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。
4.如權(quán)利要求1所述的數(shù)據(jù)庫連接處理方法,其中,所述通知服務(wù)端對客戶端進(jìn)行認(rèn)證,包括: 構(gòu)造一個(gè)切換用戶命令,所述切換用戶命令中包括客戶端使用的用戶名及密碼信息;在將客戶端的數(shù)據(jù)庫操作請求發(fā)送到服務(wù)端之前,將所述切換用戶命令發(fā)送到服務(wù)端,以使服務(wù)端根據(jù)所述切換用戶命令中的用戶名和密碼信息對客戶端進(jìn)行認(rèn)證。
5.如權(quán)利要求4所述的數(shù)據(jù)庫連接處理方法,其中,所述切換用戶命令為MySQL數(shù)據(jù)庫的 COM_CHANGE_USER 命令。
6.一種數(shù)據(jù)庫連接處理裝置,用于客戶端與服務(wù)端之間,所述裝置包括: 第一判斷單元,適于接收到客戶端的數(shù)據(jù)庫連接請求時(shí),判斷連接池的連接隊(duì)列的長度是否小于預(yù)設(shè)門限,其中,所述連接隊(duì)列中存儲(chǔ)有與用戶名相關(guān)聯(lián)的數(shù)據(jù)庫連接; 第一處理單元,適于當(dāng)所述連接隊(duì)列的長度大于等于預(yù)設(shè)門限時(shí),從所述連接隊(duì)列中取出一個(gè)數(shù)據(jù)庫連接; 第二判斷單元,適于判斷客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名是否相同; 第二處理單元,適于當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名相同時(shí),將該數(shù)據(jù)庫連接分配給客戶端使用;當(dāng)客戶端使用的用戶名與取出的數(shù)據(jù)庫連接的用戶名不同時(shí),通知服務(wù)端對客戶端進(jìn)行認(rèn)證,并在認(rèn)證通過后將該數(shù)據(jù)庫連接分配給客戶端使用。
7.如權(quán)利要求6所述的數(shù)據(jù)庫連接處理裝置,其中,還包括第三處理單元,所述第三處理單元適于: 當(dāng)所述連接隊(duì)列的長度小于預(yù)設(shè)門限時(shí),向服務(wù)端申請新建一個(gè)數(shù)據(jù)庫連接; 將新建的數(shù)據(jù)庫連接分配給客戶端使用,并記錄客戶端使用的用戶名信息。
8.如權(quán)利要求6或7所述的數(shù)據(jù)庫連接處理裝置,其中,還包括第四處理單元,所述第四處理單元適于在客戶端使用完數(shù)據(jù)庫連接后,將該數(shù)據(jù)庫連接及關(guān)聯(lián)的用戶名加入到所述連接隊(duì)列中。
9.如權(quán)利要求6所述的數(shù)據(jù)庫連接處理裝置,其中,所述第二處理單元進(jìn)一步適于: 構(gòu)造一個(gè)切換用戶命令,所述切換用戶命令中包括客戶端使用的用戶名及密碼信息; 在將客戶端的數(shù)據(jù)庫操作請求發(fā)送到服務(wù)端之前,將所述切換用戶命令發(fā)送到服務(wù)端,以使服務(wù)端根據(jù)所述切換用戶命令中的用戶名和密碼信息對客戶端進(jìn)行認(rèn)證。
10.如權(quán)利要求9所述的數(shù)據(jù)庫連接處理裝置,其中,所述切換用戶命令為MySQL數(shù)據(jù)庫的 COM_CHANGE_USER 命令 。
【文檔編號(hào)】H04L29/06GK103634298SQ201310563628
【公開日】2014年3月12日 申請日期:2013年11月14日 優(yōu)先權(quán)日:2013年11月14日
【發(fā)明者】朱超, 陳飛, 王超 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
吉林省| 南城县| 玉门市| 邢台市| 大化| 阳高县| 宜兴市| 萝北县| 木兰县| 葵青区| 博白县| 华阴市| 苗栗市| 乌审旗| 嘉定区| 鄂伦春自治旗| 广平县| 临洮县| 遂川县| 绥中县| 斗六市| 兴城市| 平湖市| 梧州市| 景宁| 潍坊市| 遵义县| 大英县| 沂水县| 宜兴市| 山丹县| 福建省| 金山区| 镇坪县| 大方县| 都兰县| 贡嘎县| 阿克陶县| 定襄县| 沙河市| 福建省|