摘要:SYBASE公司的ASE數(shù)據(jù)庫管理系統(tǒng)的客戶端與服務(wù)器的模式確保了應(yīng)用程序運(yùn)行穩(wěn)定性和高效性,但是這種方式使得應(yīng)用系統(tǒng)的維護(hù)非常困難,數(shù)據(jù)服務(wù)器的安全性不高。文章分析了如何在確保這種模式的優(yōu)點(diǎn)的同時(shí)如何解決系統(tǒng)維護(hù)困難,提高數(shù)據(jù)服務(wù)器的安全性,并提出一種有效的解決方法。
關(guān)鍵詞:客戶機(jī)/服務(wù)器;OPEN CLIENT;封裝;安全性;系統(tǒng)維護(hù)
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2008)06-10000-00
Automatic encapsulateSybase Adaptive ServerEnterprise client
ZhangXinYi GaoYanLing
(Information Science and TechnologyInstitute of Jiujiang University, Jiujiang 332005,China)
abstract:SYBASE Corporation's ASE database management system in particular its client andserver pattern has guaranteed the application procedure movement stability and effectiveness, but this way causes the maintenance of the application systemto be extremely difficult, the data server security is also not high. this article mainly analyze how to solve the system maintenance difficulty, enhances the data server's security while guarantees this kind of pattern merit, and proposes one effective solution.
Key words:Client/server; OPEN CLIENT; encapsulate; security; maintain
1 Sybase Adaptive Server Enterprise介紹
Sybase Adaptive Server Enterprise是sybase公司的旗艦產(chǎn)品。在ASE系統(tǒng)中Sybase公司首先提出了客戶機(jī)與服務(wù)器的理論,將ASE分為OPEN SERVER和OPEN CLIENT兩個(gè)部分。Open server是一個(gè)服務(wù)器構(gòu)造工具,幫助集成聯(lián)機(jī)企業(yè)的各種數(shù)據(jù)資源及服務(wù)。Open client是一個(gè)客戶端的應(yīng)用程序包,提供調(diào)用級接口,用來建立有效的前端應(yīng)用,向服務(wù)器Adaptive Server或Open Server程序發(fā)出請求,獲得消息和服務(wù)。
2 ODBC與客戶端模式的比較
在設(shè)計(jì)用客戶端/服務(wù)器(C/S)模式的數(shù)據(jù)庫應(yīng)用程序時(shí),windows平臺下的應(yīng)用程序于DBMS連接的方法一般有兩種方式:一是通過微軟提供的公共數(shù)據(jù)接口ODBC與DBMS進(jìn)行連接,二是直接使用DBMS廠商提供的客戶端與DBMS進(jìn)行連接。前者需要DBMS廠商提供ODBC驅(qū)動程序,數(shù)據(jù)要經(jīng)過多次編碼與解碼,運(yùn)行速度較慢。而后者的整合性較好,數(shù)據(jù)傳輸速度快,但是必須安裝對應(yīng)的DBMS客戶端程序。
3 客戶端模式的弊端
目前的許多應(yīng)用系統(tǒng)都是以C/S模式進(jìn)行設(shè)計(jì)的。在系統(tǒng)統(tǒng)入運(yùn)行以后,我們發(fā)現(xiàn)雖然采用OPEN CLIENT與ASE進(jìn)行連接可以加快了程序運(yùn)行的速度,提高操作效率,但是無形的增加了系統(tǒng)的維護(hù)工作。
通常的做法是,在客戶端上安裝sybase central,并且使用dsedit命令準(zhǔn)確配置server屬性,如圖1所示。

圖1 SYBASE ASE 客戶端手工配置窗口
這種方式由于必須在使用程序的client上安裝sybase central,這樣就使得系統(tǒng)的維護(hù)工作變得繁重,而且用戶使用也極不方便。一旦用戶需要重新安裝操作系統(tǒng)或不慎將sybase central改變,那么系統(tǒng)維護(hù)人員將不得不為系統(tǒng)用戶重新安裝與配置sybase central,這樣將使得維護(hù)人員花費(fèi)大量的時(shí)間在重復(fù)的工作上,用戶也因?yàn)椴荒苷J褂枚绊懝ぷ鞯男省W钪匾囊稽c(diǎn):安裝sybase central能夠使得他人輕而易舉的了解到我后臺數(shù)據(jù)庫的名稱、IP地址以及端口號。這樣就為服務(wù)器的安全埋下了隱患。
4 客戶端模式實(shí)質(zhì)分析
通過ODBC與DBMS進(jìn)行連接實(shí)際上是調(diào)用了一些針對不同DBMS進(jìn)行通信的動態(tài)鏈接庫實(shí)現(xiàn)的,而ODBC的驅(qū)動配置都是通過注冊表進(jìn)行記錄,由此可知應(yīng)用程序利用OPEN CLIENT與ASE進(jìn)行連接的實(shí)質(zhì)也是讀取一些配置文件和調(diào)用一些用于通信的動態(tài)庫,同樣要通過注冊表來記錄驅(qū)動程序相關(guān)信息。
分析注冊表發(fā)現(xiàn),SYBASE客戶端連接的環(huán)境變量位于HKEY_LOCAL_MACHINE\\software\\sybase\\setup主鍵下面,在其下面有兩個(gè)鍵值名,分別是ProgramFolder和sybase,而ProgramFolder的鍵值是sybase,sybase的鍵值便是OPEN CLIENT的安裝目錄,應(yīng)用程序便是通過這兩個(gè)鍵值來獲取OPEN CLIENT的安裝位置并調(diào)用對應(yīng)的配置文件和通信動態(tài)庫,因此我們可以直接在應(yīng)用程序中編寫代碼設(shè)置這兩個(gè)鍵值實(shí)現(xiàn)客戶端的自動封裝。
在setup主鍵下面還有一個(gè)SharedDLLs主鍵,它里面的鍵值都是一些動態(tài)庫名稱,而這些動態(tài)庫就是應(yīng)用程序與ASE進(jìn)行連接所必須的各種通信程序,在WINDOWS下面,應(yīng)用系統(tǒng)查找動態(tài)鏈接庫的路徑一般是首先搜索當(dāng)前目錄,然后通過注冊表搜索操作系統(tǒng)設(shè)置的驅(qū)動目錄,例如c:\\windows\\system目錄,因此我們在進(jìn)行封裝的時(shí)候直接將這些動態(tài)庫放在應(yīng)用程序當(dāng)前目錄即可。
在ASE 客戶端的安裝目錄中,包含有配置文件的只有charsets目錄,是包含了各種字符集信息;ini目錄,包含了數(shù)據(jù)庫服務(wù)器的地址和端口信息;locales目錄,包含了各種系統(tǒng)的本地化語言信息,這三個(gè)目錄中的配置文件信息便是自動封裝ASE客戶端所必須的相關(guān)配置文件。
5 解決方案
因?yàn)槊總€(gè)用戶可能更加具體的情況將應(yīng)用系統(tǒng)安裝在不同的系統(tǒng)路徑下面,因此我們的應(yīng)用程序必須具備獲取自身所在路徑的功能。這一功能可以通過調(diào)用WINDOWS API函數(shù)GetModuleFileName實(shí)現(xiàn),在PB中的做法是:
1)首先在declare中添加gloable external functions
Function ulong GetModuleFileName(ulong hModule,ref string lpFileName,ulong nSize) LIBRARY \"kernel32.dll\" ALIAS FOR \"GetModuleFileNameA\"
2)編寫獲取路徑的代碼
string str_AppPath//應(yīng)用程序全路徑,包括程序文件名
integer int_ret,len_filename
str_AppPath = Space (128)
int_ret = GetModuleFileName (Handle (GetApplication ()), str_Apppath, 128)
//len_filename是可執(zhí)行文件名稱長度,如a.exe的len_filename=4
str_apppath=left(str_appPath,len(str_appPath)-len_filename
獲取到應(yīng)用程序的路徑后,通過注冊表操作函數(shù)設(shè)置ASE客戶端的環(huán)境變量:
//第一次使用時(shí)首先要配置ASE客戶端
Integer li_Rtn
string ls_temp,ls_key
//---0. 判斷是否已經(jīng)存設(shè)置過sybase環(huán)境變量
ls_key=\"HKEY_LOCAL_MACHINE\\Software\"
li_Rtn=RegistryGet(ls_key,\"sybase\",RegString!,ls_temp)
IF li_Rtn=1 THEN
ls_key=\"HKEY_LOCAL_MACHINE\\Software\\sybase\"
Li_Rtn= RegistryGet(ls_key,\"setup\",RegString!,ls_temp)
If li_Rtn=1 then
Return
Else
messagebox(\"提示:\",\"您是第一次使用本系統(tǒng),首先要注冊進(jìn)行ASE客戶端配置!\",INFORMATION!)
endif
else
messagebox(\"提示:\",\"您是第一次使用本系統(tǒng),首先要注冊進(jìn)行ASE客戶端配置!\",INFORMATION!)
END IF
//設(shè)置客戶端環(huán)境變量
ls_key=\" HKEY_LOCAL_MACHINE\\Software\\Sybase\\setup\"
//創(chuàng)建ASE環(huán)境變量的鍵值
registryset(ls_key,\" ProgramFolder \",regstring!,\"sybase\")
registryset(ls_key,\"SYBASE\",regstring!,str_appPath+\"SYBASE\")
messagebox(\"提示信息….\",\"ASE客戶端設(shè)置完畢!\")
至此我們便實(shí)現(xiàn)了ASE客戶端的自動封裝工作,應(yīng)用程序直接安裝就可以和ASE數(shù)據(jù)庫進(jìn)行通信了。
參考文獻(xiàn):
[1]董鋼. Sybase數(shù)據(jù)庫備份恢復(fù)故障處理一例[J]. 華南金融電腦,2007(01).
[2]畢明新.都淑萍 關(guān)于Sybase在應(yīng)用系統(tǒng)中的運(yùn)行效率研究[J].軟件導(dǎo)刊,2007(05).
[3]曾勇進(jìn).Sybase ODBC的安全性問題[J].科技咨詢導(dǎo)報(bào),2007(10).
收稿日期:2008-01-12
作者簡介:張鑫翊(1986-)女,九江學(xué)院信息科學(xué)與技術(shù)學(xué)院,計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)A0414班;高艷玲 (1978-),女,九江學(xué)院信息科學(xué)與技術(shù)學(xué)院,教師。