鮑 通
[摘要]隨著計(jì)算機(jī)的普及和信息技術(shù)的進(jìn)步,特別是計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展,信息安全的重要性日趨明顯。但是,作為信息安全的一個(gè)重要內(nèi)容數(shù)據(jù)備份的重要性卻往往被人們所忽視。只要發(fā)生數(shù)據(jù)傳輸、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)交換,就有可能產(chǎn)生數(shù)據(jù)故障。這時(shí),如果沒(méi)有采取數(shù)據(jù)備份和數(shù)據(jù)恢復(fù)手段與措施,就會(huì)導(dǎo)致數(shù)據(jù)的丟失。有時(shí)造成的損失是無(wú)法彌補(bǔ)和估量的。
[關(guān)鍵詞]數(shù)據(jù)備份 數(shù)據(jù)恢復(fù) 信息安全 丟失
中圖分類(lèi)號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0420050-02
一、背景簡(jiǎn)介
隨著計(jì)算機(jī)的普及和信息技術(shù)的進(jìn)步,特別是計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展,信息安全的重要性日趨明顯。但是,作為信息安全的一個(gè)重要內(nèi)容數(shù)據(jù)備份的重要性卻往往被人們所忽視。只要發(fā)生數(shù)據(jù)傳輸、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)交換,就有可能產(chǎn)生數(shù)據(jù)故障。這時(shí),如果沒(méi)有采取數(shù)據(jù)備份和數(shù)據(jù)恢復(fù)手段與措施,就會(huì)導(dǎo)致數(shù)據(jù)的丟失。有時(shí)造成的損失是無(wú)法彌補(bǔ)和估量的。因此,數(shù)據(jù)備份與數(shù)據(jù)恢復(fù)是保護(hù)數(shù)據(jù)的最后手段,也是防止主動(dòng)型信息攻擊的最后一道防線。
二、需求分析
學(xué)生信息管理系統(tǒng)是利用C#.NET+SQL2005數(shù)據(jù)庫(kù)采用B/S模式實(shí)現(xiàn)的方便學(xué)生網(wǎng)上查詢(xún)個(gè)人成績(jī)和選課信息的管理平臺(tái)。學(xué)生可以通過(guò)系統(tǒng)會(huì)員注冊(cè)的方法得到權(quán)限,進(jìn)入查詢(xún)頁(yè)面查詢(xún)考試成績(jī)、進(jìn)入編輯頁(yè)面進(jìn)行選課;管理員可以通過(guò)系統(tǒng)管理權(quán)限,錄入或更改以及刪除學(xué)生的考試成績(jī)及選課信息,以供學(xué)生查詢(xún)。避免了學(xué)生的長(zhǎng)久等待,方便了學(xué)生在短期內(nèi)得知自己近段時(shí)間學(xué)習(xí)的情況以及相關(guān)信息。
目前需要在脫離數(shù)據(jù)庫(kù)自動(dòng)備份功能的條件下,設(shè)計(jì)功能模塊“一鍵備份(完整備份)、一鍵還原”,嵌入至系統(tǒng)中。確保數(shù)據(jù)的完整性和安全性;盡量減少占用網(wǎng)絡(luò)資源;盡量不影響系統(tǒng)的運(yùn)行效率;充分有效地利用存儲(chǔ)資源;模塊采用B/S模式,且具有較好的移植性。
作用例:如果系統(tǒng)管理員身在北京出差,隨處可用筆記本電腦網(wǎng)上登陸該系統(tǒng),點(diǎn)擊“一鍵備份”。期間不幸得知南京服務(wù)器上的該系統(tǒng)數(shù)據(jù)庫(kù)被刪除或被攻擊,身在北京的管理員可隨處再度登陸該系統(tǒng),點(diǎn)擊“一鍵還原”,即可對(duì)南京服務(wù)器上的該系統(tǒng)數(shù)據(jù)庫(kù)恢復(fù)最后一次備份時(shí)間之前的所有數(shù)據(jù),以確保系統(tǒng)的正常運(yùn)行。
三、主要研究的內(nèi)容和目標(biāo)
(一)內(nèi)容分析
1.適應(yīng)性:在脫離數(shù)據(jù)庫(kù)群集技術(shù)的條件下,研究數(shù)據(jù)怎樣才能更快捷、更準(zhǔn)確無(wú)誤地,并且有選擇性地進(jìn)行備份,然后當(dāng)系統(tǒng)發(fā)生問(wèn)題時(shí),能及時(shí)地進(jìn)行還原或恢復(fù),以盡可能地減少損失。如果基于數(shù)據(jù)庫(kù)群集技術(shù),那么這種數(shù)據(jù)備份也可以防止服務(wù)共享磁盤(pán)損壞帶來(lái)的后果,即便所有子服務(wù)器的數(shù)據(jù)庫(kù)都癱瘓掉,數(shù)據(jù)的備份文件依然存在,但需要提前對(duì)備份文件進(jìn)行備份。
2.智能性:系統(tǒng)管理員在客戶(hù)端對(duì)數(shù)據(jù)庫(kù)做備份時(shí),能得知數(shù)據(jù)備份的進(jìn)度,臨時(shí)情況,以及結(jié)果,且可快捷恢復(fù)。
3.安全性:對(duì)數(shù)據(jù)備份進(jìn)行加密,只有操作員或具有管理角色的用戶(hù)可對(duì)其進(jìn)行恢復(fù)??蓮娜我鈹帱c(diǎn)進(jìn)行恢復(fù),選擇性地恢復(fù)。對(duì)數(shù)據(jù)備份文件進(jìn)行再備份,以免人為誤刪。
4.移植性:相對(duì)獨(dú)立的備份還原功能(低耦合),不會(huì)影響系統(tǒng)其他功能的正常運(yùn)轉(zhuǎn),從而可將此功能模塊嵌入至系統(tǒng)中。
(二)研究目標(biāo)
客戶(hù)端對(duì)服務(wù)器端的數(shù)據(jù)可進(jìn)行一鍵備份,一鍵還原,確保安全,確保完整。
四、采用的方法
(一)分析
Visual Studio 2005基于文件的工程開(kāi)發(fā);母版頁(yè)面;用戶(hù)控件可視化;泛型;支持嵌入式資源;Visual Studio ASP.NET代碼編輯器。
用C#設(shè)計(jì)的組件可以很容易的轉(zhuǎn)換成Web服務(wù),可以以任意操作系統(tǒng)的任意語(yǔ)言從Internet上調(diào)用。開(kāi)發(fā)此應(yīng)用程序時(shí)使用.NET框架和C#語(yǔ)言創(chuàng)建了多線程的服務(wù)。對(duì)此系統(tǒng)來(lái)說(shuō),C#這個(gè)面向?qū)ο蟮木幊陶Z(yǔ)言看起來(lái)是最合適做應(yīng)用程序設(shè)計(jì)的了;實(shí)際上,因?yàn)橛辛藖?lái)自.NET框架對(duì)核心編程任務(wù)的支持,我們發(fā)現(xiàn)使用C#比使用VB更容易,且運(yùn)行效率會(huì)更高。
(二)設(shè)計(jì)
該模塊利用C#語(yǔ)言基于Web完成對(duì)SQL2005數(shù)據(jù)庫(kù)備份和還原的功能,實(shí)現(xiàn)一鍵備份和一鍵還原,方便快捷易操作。此為系統(tǒng)管理員具備的權(quán)限,故此功能模塊欲嵌入至系統(tǒng)后臺(tái)。
把數(shù)據(jù)庫(kù)的備份文件都整合到一個(gè)文件夾下,用一個(gè)相對(duì)路徑來(lái)識(shí)別這個(gè)文件夾,從而準(zhǔn)確無(wú)誤地找到這個(gè)數(shù)據(jù)庫(kù)備份設(shè)備以進(jìn)行還原。這個(gè)所謂的“定位”和備份功能封裝到一起,操作簡(jiǎn)便;內(nèi)部劃分模塊,分別繼承自備份功能,這樣可面對(duì)不同的數(shù)據(jù)庫(kù)對(duì)象,而不至于只可針對(duì)同一個(gè)數(shù)據(jù)庫(kù),為今后的升級(jí)做鋪墊。對(duì)于本系統(tǒng),因數(shù)據(jù)庫(kù)為固定名稱(chēng),故可對(duì).NET中的Web.config文件進(jìn)行配置。搭建完SQL數(shù)據(jù)庫(kù)環(huán)境之后實(shí)現(xiàn)與.NET相連結(jié),數(shù)據(jù)庫(kù)此時(shí)要滿(mǎn)足允許遠(yuǎn)程連接的狀態(tài)條件。之后按照詳細(xì)設(shè)計(jì)進(jìn)入編碼階段。
五、模塊的實(shí)現(xiàn)(附主干代碼)
(一)服務(wù)器端的布置
1.設(shè)置SQL2005的驗(yàn)證模式為“Windows與SQL混合驗(yàn)證”;
2.設(shè)置SQL允許sa帳戶(hù),密碼設(shè)置為1;
3.設(shè)置SQL允許遠(yuǎn)程訪問(wèn);
4.測(cè)試連接,確保服務(wù)正常運(yùn)行;
5.檢查數(shù)據(jù)庫(kù)默認(rèn)備份路徑。
(二)系統(tǒng)的后臺(tái)操作
1.備份數(shù)據(jù)庫(kù)到服務(wù)器端默認(rèn)本地路徑.backup文件夾下(系統(tǒng)管理員權(quán)限);
2.還原數(shù)據(jù)庫(kù)默認(rèn)尋找該路徑下已備份的.bak文件;
3.若已備份,則覆蓋之前的備份,數(shù)據(jù)更新至最后一次的備份時(shí)間,待備還原;
4.若無(wú)備份,還原功能因?qū)ふ也坏较鄳?yīng)的備份文件而無(wú)法實(shí)現(xiàn);
5.連續(xù)重復(fù)還原不會(huì)對(duì)該系統(tǒng)造成影響,但會(huì)降低服務(wù)器端相關(guān)的運(yùn)行效率。
(三)備份功能的實(shí)現(xiàn)
//**************************數(shù)據(jù)庫(kù)備份**********************
******
//引用Web.config的數(shù)據(jù)庫(kù)連接字符串優(yōu)點(diǎn)是數(shù)據(jù)庫(kù)移植的時(shí)候可直接對(duì)Web.config的數(shù)據(jù)庫(kù)連接字符串中的IP進(jìn)行更換。 此處省略連接數(shù)據(jù)庫(kù)的代碼
SqlCommand cmdBK = new SqlCommand();
cmdBK.CommandType = CommandType.Text;
cmdBK.Connection = conn;
cmdBK.CommandText = @"backup database SMS to disk='..BackupSMS" + ".bak'" + " with init"; //通過(guò)執(zhí)行SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份
//接下來(lái)可對(duì)執(zhí)行的語(yǔ)句進(jìn)行判斷,若備份成功就彈出備份成功提示框;否則會(huì)因服務(wù)器連接失敗,或者要備份的數(shù)據(jù)庫(kù)不存在于服務(wù)器中,則彈出備份失敗提示框。此處可用try…catch…語(yǔ)句來(lái)實(shí)現(xiàn)。代碼略。
//此處要?dú)⑺浪姓谑褂靡獋浞輸?shù)據(jù)的數(shù)據(jù)庫(kù)進(jìn)程,代碼見(jiàn)“還原功能的實(shí)現(xiàn)”,此處略。
conn.Open();cmdBK.ExecuteNonQuery();
System.Web.HttpContext.Current.Response.Write("<Script>alert('數(shù)據(jù)庫(kù)備份或更新備份成功!');</Script>");
效果:此時(shí)找到SQL默認(rèn)backup路徑下,會(huì)生成數(shù)據(jù)庫(kù)備份文件SMS.bak。
(四)還原功能的實(shí)現(xiàn)
此時(shí)假設(shè)數(shù)據(jù)庫(kù)SMS已經(jīng)不存在(包括數(shù)據(jù)庫(kù)崩潰),測(cè)試中我們?nèi)藶榈貏h除數(shù)據(jù)庫(kù)SMS,那么可采用“一鍵還原”功能,如下:
//**************************數(shù)據(jù)庫(kù)還原**********************
*****
//此處省略連接數(shù)據(jù)庫(kù)的代碼
//殺死所有正在使用要還原數(shù)據(jù)的數(shù)據(jù)庫(kù)進(jìn)程
SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.
dbid AND sysdatabases.Name='SMS'", conn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
ArrayList list = new ArrayList();
while (dr.Read())
{ list.Add(dr.GetInt16(0)); }
dr.Close();
for (int k = 0; k < list.Count; k++)
{ cmd = new SqlCommand(string.Format("KILL {0}", list[k]), conn); cmd.ExecuteNonQuery(); }
SqlCommand cmdRT = new SqlCommand();cmdRT.CommandType = CommandType.Text;
cmdRT.Connection = conn;
cmdRT.CommandText = @"restore database SMS from disk= '..BackupSMS" + ".bak'" + " ";
cmdRT.ExecuteNonQuery(); //通過(guò)執(zhí)行SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行還原
//接下來(lái)可對(duì)執(zhí)行的語(yǔ)句進(jìn)行判斷,成敗兩種情況,依然可用try…catch…語(yǔ)句來(lái)實(shí)現(xiàn)。代碼略
效果:數(shù)據(jù)庫(kù)SMS還原成功,截止最后一次備份的時(shí)間之前的所有數(shù)據(jù)被還原。
六、結(jié)論
Asp.net主要是面向程序員的一次改革,它使編寫(xiě)大型的Web應(yīng)用程序更為簡(jiǎn)便和符合現(xiàn)代軟件工程。就這一點(diǎn)而言,Web應(yīng)用可以看成是傳統(tǒng)C/S結(jié)構(gòu)的分布式擴(kuò)展。對(duì)比這兩種方式,我們會(huì)發(fā)現(xiàn)它們會(huì)越來(lái)越相似,最后的區(qū)別只在于客戶(hù)端是什么。Web應(yīng)用與C/S的主要不同只在于Web應(yīng)用的客戶(hù)端是基于瀏覽器的,而C/S應(yīng)用的客戶(hù)端則五花八門(mén),什么都有。它們的優(yōu)缺點(diǎn)也將主要由這一點(diǎn)決定。
參考文獻(xiàn):
[1]微軟公司著,面向.NET的Web應(yīng)用程序設(shè)計(jì),北京:高等教育出版社,2004.
[2]微軟公司著,基于C#的Windows應(yīng)用程序設(shè)計(jì),北京:高等教育出版社,2004.
[3]微軟公司著,高級(jí)編程技術(shù),北京:高等教育出版社,2004.
[3]陳克力著,SQL Server2005編程基礎(chǔ),北京:清華大學(xué)出版社,2008.
[4]張海藩著,軟件工程導(dǎo)論,北京:清華大學(xué)出版社,2008.
[7]開(kāi)發(fā)視界論壇,http://www.sf.org.cn/bbs.
[8]CSDN網(wǎng)站,http://blog.csdn.net.