摘要:計(jì)算機(jī)語(yǔ)言的基本要素是變量、數(shù)據(jù)類型、表達(dá)式、控制結(jié)構(gòu)、過程和函數(shù)。TP6的操作方式有4類,菜單和工具操作只是一種交互方式,要完成更復(fù)雜的任務(wù),必須學(xué)會(huì)命令操作和程序操作,這就要學(xué)VFP語(yǔ)言。本文主要探討Visual FoxPro數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用。
關(guān)鍵詞:Visual FoxPro;數(shù)據(jù)庫(kù)技術(shù);加密
中圖分類號(hào):TP309.7 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 20-0000-02
VFP6.0除了繼承較早版本的功能以外,有許多新的特點(diǎn)。例如,全面采用面向?qū)ο蟮木幊碳夹g(shù),使之成為在Windows環(huán)境下開發(fā)小型數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的有力工具;在客戶/服務(wù)器應(yīng)用程序中,VFP6又是一個(gè)理想的前端開發(fā)工具;它還為用戶組織信息、運(yùn)行查詢、創(chuàng)建集成的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)以及為最終用戶編寫功能全面的數(shù)據(jù)管理應(yīng)用程序提供所有的工具[1]。
1 Visual FoxPro數(shù)據(jù)庫(kù)概述
例如,利用項(xiàng)目管理器(PROJECT MANAGER)可以建立數(shù)據(jù)庫(kù)、表、表單、查詢及報(bào)表等。當(dāng)需要時(shí),只要打開項(xiàng)目管理器,就可以直接從中讀取,而不必從磁盤上搜索。通過向?qū)В╓IZABDS)提供的許多功能強(qiáng)大的控件,不用編程就可以創(chuàng)建應(yīng)用程序界面。利用生成器(BUILDERS)用戶可以簡(jiǎn)化創(chuàng)建和修改用戶界面程序的設(shè)計(jì)過程,提高軟件開發(fā)的質(zhì)量。每個(gè)生成器都由一系列選項(xiàng)卡組成,允許用戶訪問并設(shè)置所選對(duì)象的屬性。用戶可以將生成器生成的用戶界面直接轉(zhuǎn)換成程序代碼,把用戶從逐條編寫、反復(fù)調(diào)試程序的工作中解放出來。
作為一個(gè)完善的數(shù)據(jù)庫(kù)管理系統(tǒng),數(shù)據(jù)的保密性設(shè)置是非常重要的,Visual FoxPro沒有Access那樣提供了密碼訪問的功能,不過可以通過破壞存儲(chǔ)格式的方法,可以達(dá)到對(duì)數(shù)據(jù)庫(kù)所有數(shù)據(jù)表進(jìn)行加密的目的[2]。
2 Visual FoxPro數(shù)據(jù)庫(kù)的加密技術(shù)
Visual FoxPro將數(shù)據(jù)按照指定格式存放到以“.DBF”為擴(kuò)展名的文件系統(tǒng)中,如果破壞了此種文件的存儲(chǔ)格式,Visual FoxPro就無(wú)法將其打開,即達(dá)到了加密的目的。根據(jù)這個(gè)原理,當(dāng)數(shù)據(jù)庫(kù)系統(tǒng)要關(guān)閉時(shí),系統(tǒng)將數(shù)據(jù)庫(kù)中所有數(shù)據(jù)表都以低級(jí)文件格式打開,然后通過一個(gè)密鑰對(duì)文件中每個(gè)字符進(jìn)行異或運(yùn)算。異或運(yùn)算最大的一個(gè)特點(diǎn)就是A^B^B=A,也就是說,當(dāng)對(duì)同一個(gè)數(shù)進(jìn)行兩次異或運(yùn)算時(shí),結(jié)果還是這個(gè)數(shù)。當(dāng)系統(tǒng)再次登錄時(shí),便可以通過對(duì)已經(jīng)加密的數(shù)據(jù)庫(kù)文件進(jìn)行異或運(yùn)算的方法進(jìn)行解密。解密后的文件是可以通過Visual FoxPro進(jìn)行訪問的。
服務(wù)端到接入設(shè)備的數(shù)據(jù)收發(fā)使用標(biāo)準(zhǔn)的TELNET協(xié)議實(shí)現(xiàn),連接雙方都需要實(shí)現(xiàn)物理終端到NVT的數(shù)據(jù)轉(zhuǎn)換。通信兩端數(shù)據(jù)均以7bit的ASCII字符集發(fā)送,但發(fā)送格式為8bit,最高位直接置為0。TELNET通信雙方使用帶內(nèi)信令方式,如果收到0x255(IAC)則表示接下來的數(shù)據(jù)作為命令來解釋。如果需要發(fā)送數(shù)據(jù)255,則必須連續(xù)發(fā)送兩個(gè)255字節(jié)。在初始化選項(xiàng)協(xié)商過程中,會(huì)出現(xiàn)四種協(xié)商狀態(tài):
WILL:發(fā)送方自身將激活選項(xiàng),回應(yīng)DO為接受,回應(yīng)DONT為拒絕。
DO:發(fā)送方想讓接收端激活選項(xiàng),回應(yīng)WILL為接受,回應(yīng)WONT為拒絕。
WONT:發(fā)送方自身想禁止選項(xiàng),對(duì)方必須回應(yīng)DONT以同意禁止行為。
DONT:發(fā)送方想讓接收端禁止選項(xiàng),對(duì)方必須回應(yīng)WONT以同意禁止行為。
對(duì)于DO和WILL選項(xiàng),接收方有權(quán)同意會(huì)拒絕。但對(duì)于WONT和DONT,接收方必須同意。選項(xiàng)協(xié)商需要3個(gè)字節(jié):第一個(gè)是IAC字節(jié),第二個(gè)是WILL、DO、WONT、DONT之一,最后一個(gè)字節(jié)是啟用或禁止的選項(xiàng)。協(xié)商過程是對(duì)稱的,也就是說通信雙方都可以發(fā)起協(xié)商請(qǐng)求。但對(duì)于子選項(xiàng)的協(xié)商,則不僅僅是同意或拒絕所能表示的。例如制定終端類型,為了處理這種選項(xiàng),必須定義子選項(xiàng)協(xié)商。
在SNMP接口設(shè)計(jì)方面,SNMP協(xié)議是目前用來對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行控制管理的一種主要方式,SNMP遵循了代理和管理站模型。對(duì)于SNMP代理來說,它能夠回答來自于SNMP管理站如網(wǎng)管系統(tǒng)的關(guān)于MIB庫(kù)中定義的信息的查詢及修改。本系統(tǒng)使用出了可以使用TELNET協(xié)議對(duì)接入層網(wǎng)絡(luò)設(shè)備進(jìn)行控制之外,也可以使用SNMP協(xié)議對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行更有效的控制[3]。
3 Visual FoxPro數(shù)據(jù)庫(kù)的應(yīng)用
表現(xiàn)層負(fù)責(zé)向用戶提供交互界面??刂茖又饕瑪?shù)據(jù)庫(kù)和網(wǎng)絡(luò)設(shè)備進(jìn)行交互,其中設(shè)備控制部分負(fù)責(zé)向接入網(wǎng)絡(luò)設(shè)備發(fā)送控制指令并將操作存入數(shù)據(jù)庫(kù)中,日志分析部分負(fù)責(zé)對(duì)接入設(shè)備發(fā)送的日志進(jìn)行分析,分析結(jié)果存入數(shù)據(jù)庫(kù),對(duì)攻擊主機(jī)的隔離與解除隔離指令則發(fā)送給設(shè)備控制部分,從而實(shí)現(xiàn)對(duì)設(shè)備的控制聯(lián)動(dòng)。系統(tǒng)整體架構(gòu)如圖1所示:
SYSLOG服務(wù)是對(duì)交換機(jī)發(fā)來的UDP日志信息進(jìn)行接收的切入點(diǎn)。這個(gè)功能使用JAVA套接字開發(fā)完成。UDP日志信息對(duì)于數(shù)據(jù)的少量丟失并不關(guān)注,這個(gè)服務(wù)只需要對(duì)大量的宏觀信息進(jìn)行分析即可。SYSLOG日志發(fā)送的目的端口為UDP514端口,SYSLOG接收器也需要對(duì)這個(gè)端口進(jìn)行偵聽。在構(gòu)建DatagramSocket的時(shí)候需要設(shè)置兩個(gè)參數(shù),分別為端口和緩沖區(qū)大小。由于SYSLOG日志是數(shù)量極其龐大,但單條日志數(shù)據(jù)量很小的數(shù)據(jù)流。緩沖區(qū)和UDP報(bào)文長(zhǎng)度都指定為1024字節(jié)為合適。如下為UDP端的構(gòu)造方法:
localPoint =
new DatagramSocket(Integer.parseInt(property.getProperty(\"514\")));
localPoint.setReceiveBufferSize(Integer.parseInt(property.getProperty(\"1024\")));
對(duì)于套接字因網(wǎng)絡(luò)數(shù)據(jù)傳輸錯(cuò)誤產(chǎn)生異常,這種異常往往會(huì)導(dǎo)致程序出錯(cuò)退出。SYSLOG服務(wù)對(duì)數(shù)據(jù)的完整程度并不敏感,分析的只是宏觀數(shù)據(jù)。所以對(duì)于這些網(wǎng)絡(luò)錯(cuò)誤,可以完全壓制而不會(huì)有任何負(fù)面影響。由于數(shù)據(jù)的處理是在死循環(huán)中完成的,當(dāng)UDP套接字出現(xiàn)故障時(shí),在finally區(qū)中需要對(duì)UDP端點(diǎn)進(jìn)行重新構(gòu)造,構(gòu)造方法如下:
if (localPoint.isClosed()) localPoint = createDatagramSocket();
構(gòu)造的前提是需要判斷先前的UDP端點(diǎn)已被關(guān)閉,否則有會(huì)出現(xiàn)內(nèi)存泄露問題。
參考文獻(xiàn):
[1]傅榮會(huì).三種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的比較研究——Visual FoxPro,Access和SQL Server[J].重慶三峽學(xué)院學(xué)報(bào),2011,05:179-180.
[2]趙曉俠,雷金輝,田春瑾. SQL查詢?cè)赩isual FoxPro數(shù)據(jù)庫(kù)中的應(yīng)用[J].電腦知識(shí)與技術(shù),2011.06:404-405.
[3]周大朋,朱勇,李小玲. 淺談Visual FoxPro數(shù)據(jù)庫(kù)技術(shù)及其應(yīng)用[J].科技廣場(chǎng),2010.03:130-132.