張志杰
摘要:筆者在多年從事機(jī)房管理的過(guò)程中,摸索出一套較好的數(shù)據(jù)盤(pán)還原方法。利用Serv-U支持ODBC數(shù)據(jù)庫(kù)的功能,再使用ASP開(kāi)發(fā)Web站點(diǎn),來(lái)管理FTP站點(diǎn),完成學(xué)生作業(yè)的保存與教師對(duì)學(xué)生作業(yè)的批閱功能。
關(guān)鍵詞:系統(tǒng)盤(pán)還原 數(shù)據(jù)盤(pán)還原 ODBC數(shù)據(jù)庫(kù) ASP
中圖分類(lèi)號(hào):TP393.18 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1673-8454(2009)23-0026-04
機(jī)房是學(xué)生的重要實(shí)踐場(chǎng)所,保證計(jì)算機(jī)的完好率是機(jī)房管理的主要任務(wù),為了完成這一任務(wù),現(xiàn)在機(jī)房大多采用硬件還原技術(shù)。在設(shè)置硬盤(pán)還原參數(shù)時(shí),如果只還原系統(tǒng)盤(pán),數(shù)據(jù)盤(pán)上留存的數(shù)據(jù)給系統(tǒng)正常運(yùn)行留下了安全隱患;如果系統(tǒng)盤(pán)與數(shù)據(jù)盤(pán)同時(shí)還原,學(xué)生的作業(yè)無(wú)法保存,特別是設(shè)計(jì)類(lèi)課程,過(guò)程的重要性更不允許數(shù)據(jù)盤(pán)還原,管理人員往往處于兩難境地。那么,有沒(méi)有一個(gè)兩全方案呢?筆者在多年從事機(jī)房管理的過(guò)程中,摸索出解決這一兩難問(wèn)題的方法。利用Serv-U支持ODBC數(shù)據(jù)庫(kù)的功能,再使用ASP開(kāi)發(fā)Web站點(diǎn),來(lái)管理FTP站點(diǎn),完成學(xué)生作業(yè)的保存與教師對(duì)學(xué)生作業(yè)的批閱功能。下文是該系統(tǒng)實(shí)現(xiàn)的方法介紹。
一、數(shù)據(jù)庫(kù)結(jié)構(gòu)
在SQL Server、Access、MySQL等支持ODBC的數(shù)據(jù)庫(kù)管理系統(tǒng)中,建立一個(gè)名為FTP的數(shù)據(jù)庫(kù)(本文采用SQL Server作為數(shù)據(jù)庫(kù)平臺(tái)),該數(shù)據(jù)庫(kù)中主要的表與表結(jié)構(gòu)如下:
1.用戶(hù)帳號(hào)表(User_accounts)
用戶(hù)帳號(hào)表(User_accounts)是Serv-U從數(shù)據(jù)庫(kù)中讀取的主要信息數(shù)據(jù)表,此表是本系統(tǒng)的核心數(shù)據(jù)表。具體內(nèi)容如表1所示。
User_accounts表中關(guān)鍵字段介紹:
(1)Access(目錄與訪問(wèn)規(guī)則)字段
該字段值是表示用戶(hù)對(duì)目錄的訪問(wèn)權(quán)限。格式是:目錄名稱(chēng)、權(quán)限。
用戶(hù)對(duì)目錄的訪問(wèn)權(quán)限有R(讀取)、W(寫(xiě)入)、A(附加)、M(修改)、E(執(zhí)行——由于安全原因,所有帳號(hào)均不能開(kāi)啟此權(quán)限)、L(目錄)列表、C(建立目錄)、D(刪除目錄)、P(將權(quán)限繼承給子目錄)等9種權(quán)限。
例如:用戶(hù)可訪問(wèn)的目錄是h:ftpsj軟件0611班張三20060101001。訪問(wèn)權(quán)限是:讀取、寫(xiě)入、修改、列表、建立目錄、刪除目錄、將權(quán)限繼承給子目錄。該字段的值就是h:ftpsj軟件0611班張三20060101001|RWMLCDP
(2)HomeDir(用戶(hù)可訪問(wèn)的主目錄)字段
該字段值表示用戶(hù)可訪問(wèn)的主目錄,建議在設(shè)置用戶(hù)目錄時(shí)分三層來(lái)建立,第一層主目錄,第二層為班級(jí)目錄,第三層為用戶(hù)目錄。其結(jié)構(gòu)如圖1所示。
(3)Password(用戶(hù)口令)字段
Serv-U密碼加密算法為隨機(jī)碼與MD5 32 位加密。算法為隨機(jī)產(chǎn)生2個(gè)字符,如ar。將ar+明文密碼(如password)使用MD5加密,如MD5("arpassword"),生成密碼后將所有小寫(xiě)字符變?yōu)榇髮?xiě),最前加上這兩個(gè)隨機(jī)字符"ar"+" 3F6D159FF468A70E54E209C3F556601C ",生成最終密碼。
(4)QuotaMax(最大使用硬盤(pán)空間)字段
該字段是用來(lái)設(shè)置用戶(hù)FTP的最大容量的,單位以字節(jié)(byte)。
(5)Type(用戶(hù)類(lèi)型)字段
Type字段是用來(lái)保存用戶(hù)類(lèi)型的,在學(xué)校一般用戶(hù)類(lèi)型有三類(lèi):學(xué)生、職工、教師。學(xué)生與職工只能使用查看自己的FTP信息;任課教師既能管理和使用自己的FTP數(shù)據(jù),又能查看自己所帶班級(jí)的FTP數(shù)據(jù),這樣任課教師就可以在任何時(shí)間、任何地點(diǎn)查閱學(xué)生的作業(yè)。
2.班級(jí)信息表
表2用于保存使用FTP的學(xué)生班級(jí)情況。
3.教師任課班級(jí)表
二、Serv-U的主要設(shè)置說(shuō)明
1.企業(yè)版的Serv-U(4.1以上版本)才夠支持ODBC。在Serv-U安裝完成后,根據(jù)向?qū)Ы⑿碌挠騇yFtp,并將Serv-U的域類(lèi)型設(shè)置為“存儲(chǔ)于ODBC數(shù)據(jù)庫(kù)中”,如圖2所示。
2.選擇MyFtp在ODBC源名稱(chēng)框內(nèi)輸入ODBC數(shù)據(jù)源名稱(chēng)ftp。在ODBC帳號(hào)名文本框內(nèi)輸入數(shù)據(jù)庫(kù)管理員用戶(hù)名,在ODBC帳號(hào)密碼文本框內(nèi)輸入數(shù)據(jù)庫(kù)管理員口令。如圖3所示。
3.退出Serv-U應(yīng)用程序,并結(jié)束ServUDaemon.exe進(jìn)程。
4.使用記事本打開(kāi)Serv-U的配置文件ServUDaemon.ini。做如下修改:
ODBCSource=ftp|“數(shù)據(jù)庫(kù)管理員帳號(hào)”、“數(shù)據(jù)庫(kù)管理員口令”
ODBCTables=user_accounts|group_accounts|user_ access|group_access|user_IP_access|group_IP_access
ODBCColumns=user|password|skey|homedir||access|disable||relpaths|||changepass|quotaenable||||maxusers|||ratioup|ratiodown|ratiocredit|quotacurrent|quotamax|expiration|privilege|passtype|ratiotype|groups|notes|indexno
至此Serv-U設(shè)置完成。
三、編寫(xiě)用于管理Serv-U用戶(hù)帳號(hào)的ASP站點(diǎn)
1.班級(jí)信息的添加
班級(jí)信息添加時(shí)重點(diǎn)要在服務(wù)器的硬盤(pán)上建立該班級(jí)學(xué)生存放作業(yè)的文件夾。主要代碼如下:
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={SQL Server};server=(LOCAL);database=FTP;uid=sa;pwd=;"
class_1=request.form("class1")
′從添加班級(jí)信息頁(yè)面讀取班級(jí)名稱(chēng)
dim asan_class_folder
asan_class_folder="F:ftpsj"&class;_1
′創(chuàng)建用戶(hù)所在的目錄文件夾
Set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FolderExists(asan_class_folder) then
′檢查文件夾是否存在
fso.createFolder(asan_class_folder)
end if
exec="select * from class"
set rs=server.createobject("adodb.recordset")
class_2="select * from class where class=′"&class;_1&"′"
rs.open class_2,conn,1,3
if rs.recordcount>0 then
response.write("")
else
rs.close
rs.open exec,conn,1,3
if class_1<>"" then
exec="insert into class(class) values(′"&class;_1&"′)"
conn.execute exec
response.write("")
else
response.write("")
rs.close
set rs=nothing
conn.close
set conn=nothing
end if
end if
2.學(xué)生信息的添加
學(xué)生信息的添加是學(xué)生作業(yè)FTP站點(diǎn)管理程序的重要工作,如何快速、準(zhǔn)確地添加學(xué)生帳號(hào)信息,并進(jìn)行相應(yīng)的設(shè)置,是該系統(tǒng)成功與否的關(guān)鍵。筆者采用將EXCEL文檔導(dǎo)入SQL數(shù)據(jù)表的方法,先將EXCEL文檔上傳至站點(diǎn)的“EXCEL”文件夾中,然后再將EXCEL文檔的學(xué)生信息逐一添加到SQL數(shù)據(jù)庫(kù)的User_accounts表中。具體實(shí)現(xiàn)方法如下:
(1)EXCEL文檔結(jié)構(gòu)
EXCEL文檔的第一個(gè)工作表名稱(chēng)為“user_accounts”,有兩個(gè)字段:xh(學(xué)號(hào))、user_true(學(xué)生姓名),具體結(jié)構(gòu)如圖4所示。
(2)關(guān)鍵代碼
′==========處理上傳EXCEL文件=========
Set fso = CreateObject("Scripting.FileSystemObject")
fle_name=fso.FileExists(Server.MapPath("/") &"excel wwww.xls")
if fle_name then
Dim Connexcel,Driver,DBPath,Rs
′建立Connection對(duì)象
Set ConnExcel=Server.CreateObject("ADODB.Connection")
driver="driver={icrosoft EXCEL driver (*.xls)};dbq="&server.mappath;("..excelwwww.xls")
′調(diào)用Open方法EXCEL
Connexcel.Open driver
′注意表名一定要以下邊這種格式“[表名$]"書(shū)寫(xiě)
set rs=server.createobject("adodb.recordset")
Sql="Select * From [User_accounts$] "
Rs.open sql,connexcel,1,1
Set ConnSQL=Server.CreateObject("ADODB.Connection")
connSQL.open "driver={SQL Server};server=(LOCAL);database=FTP;uid=sa;pwd=;"
set recor=server.createobject("adodb.recordset")
recor.open "select * from user_accounts where [user]=′"&trim;(rs("xh"))&"′",connSQL,1,1
if recor.recordcount>0 then
recor.close
response.write("")
response.end
else
recor.close
′===========寫(xiě)入數(shù)據(jù)庫(kù)=========
do while not rs.eof
rndstr = MyRandc(2) ′兩位隨機(jī)字母
newdbpassword = rndstr & md5(rndstr & trim(rs("xh")))
‘MD5()函數(shù)將明碼轉(zhuǎn)換為MD5密碼
asan_class_folder=user_folder&session;("class")&""&trim;(rs("user_true"))&trim;(rs("xh"))
′user_folder: ASP的全局變量,作業(yè)存放的主目錄
′session("class"): html頁(yè)面選擇班級(jí)的值
′創(chuàng)建用戶(hù)所在的目錄文件夾。
If not fso.FolderExists(asan_class_folder) then
′′檢查文件夾是否存在
fso.createFolder(asan_class_folder)
end if
′添加學(xué)生信息
exe="insert into User_accounts ([User],Access,HomeDir,user_true,class,class_id,password,type,skey,ratiotype,quotacurrent,quotaenable,QuotaMax) "& " values " &"(′"&rs;("xh")&"′,′"& user_folder&session;("class")&""&trim;(rs("user_true"))&trim;(rs("xh"))&ServUAccess;&"′,′"&user;_ folder&session;("class")&""&trim;(rs("user_true"))&trim;(rs("xh"))&"′,′"&trim;(rs("user_true"))&"′,′"&session;("class")&"′"&","&session;("class_id")&",′"&newdbpassword;&"′"&", ′學(xué)生′,′′,0,0,1,20971520)"
‘默認(rèn)學(xué)生的FTP空間為20M
connSQL.Execute(exe)
rs.movenext
loop
Response.Redirect "query.asp"
rs.close()
set connSQL=nothing
set connEXcel=nothing
fso.DeleteFile(Server.MapPath("/") &"excelwwww.xls")
end if
end if
function MyRandc(n)′生成隨機(jī)字符函數(shù),n為字符的個(gè)數(shù)
thechr = ""
for i=1 to n
Randomize timer
zNum = cint(25*Rnd)
if zNum mod 2 = 0 then
zNum = zNum + 97
else
zNum = zNum + 65
end if
thechr = thechr & chr(zNum)
next
MyRandc = thechr
end function
′==========處理上傳EXCEL文件完成===========
3.任課教師FTP站點(diǎn)管理
任課教師帳號(hào)的添加可參考學(xué)生信息的添加,只要將字段“type”的值設(shè)置為“任課教師”即可。
任課教師通過(guò)Web站點(diǎn)登錄后,可設(shè)置登錄FTP站點(diǎn)查閱內(nèi)容為自己的數(shù)據(jù)或所帶班級(jí)的作業(yè)數(shù)據(jù),該功能的實(shí)現(xiàn)只要修改教師用戶(hù)的Access與HomeDir兩個(gè)字段的值為相應(yīng)的目錄即可,限于篇幅這里不再敘述。
四、結(jié)束語(yǔ)
只要我們認(rèn)真研究Serv-U的數(shù)據(jù)庫(kù)結(jié)構(gòu),就可以使用ASP編程來(lái)實(shí)現(xiàn)對(duì)Serv-U建立的FTP站點(diǎn)全面管理,如FTP站點(diǎn)的注冊(cè)、審批、計(jì)費(fèi)等管理業(yè)務(wù)。筆者在近幾年的使用過(guò)程中,每學(xué)期都有新功能的添加,為學(xué)院計(jì)算機(jī)教學(xué)提供了有力的技術(shù)保障。
參考文獻(xiàn):
[1]Serv-U的ODBC數(shù)據(jù)庫(kù)做法[DB/OL].http://hi.baidu.com/my100du/blog/item/b1db1ad7f1a3bdd5a044df08.html.
[2]簡(jiǎn)析如何使用Serv-U的ODBC功能[DB/OL].http://www.51cto.com/art/200701/38695.htm.
[3]用程序來(lái)自動(dòng)建立FTP賬號(hào)[DB/OL].http://www.west263.com/www/info/23983-1.htm.
[4]使用ODBC數(shù)據(jù)庫(kù)管理Serv-U的FTP用戶(hù)及相關(guān)ASP編程[EB/OL].http://www.jb51.net/article/12711.htm.
(編輯:楊馥紅)