張志杰
摘要:筆者在多年從事機(jī)房管理的過程中,摸索出一套較好的數(shù)據(jù)盤還原方法。利用Serv-U支持ODBC數(shù)據(jù)庫的功能,再使用ASP開發(fā)Web站點(diǎn),來管理FTP站點(diǎn),完成學(xué)生作業(yè)的保存與教師對學(xué)生作業(yè)的批閱功能。
關(guān)鍵詞:系統(tǒng)盤還原 數(shù)據(jù)盤還原 ODBC數(shù)據(jù)庫 ASP
中圖分類號:TP393.18 文獻(xiàn)標(biāo)識碼:B 文章編號:1673-8454(2009)23-0026-04
機(jī)房是學(xué)生的重要實踐場所,保證計算機(jī)的完好率是機(jī)房管理的主要任務(wù),為了完成這一任務(wù),現(xiàn)在機(jī)房大多采用硬件還原技術(shù)。在設(shè)置硬盤還原參數(shù)時,如果只還原系統(tǒng)盤,數(shù)據(jù)盤上留存的數(shù)據(jù)給系統(tǒng)正常運(yùn)行留下了安全隱患;如果系統(tǒng)盤與數(shù)據(jù)盤同時還原,學(xué)生的作業(yè)無法保存,特別是設(shè)計類課程,過程的重要性更不允許數(shù)據(jù)盤還原,管理人員往往處于兩難境地。那么,有沒有一個兩全方案呢?筆者在多年從事機(jī)房管理的過程中,摸索出解決這一兩難問題的方法。利用Serv-U支持ODBC數(shù)據(jù)庫的功能,再使用ASP開發(fā)Web站點(diǎn),來管理FTP站點(diǎn),完成學(xué)生作業(yè)的保存與教師對學(xué)生作業(yè)的批閱功能。下文是該系統(tǒng)實現(xiàn)的方法介紹。
一、數(shù)據(jù)庫結(jié)構(gòu)
在SQL Server、Access、MySQL等支持ODBC的數(shù)據(jù)庫管理系統(tǒng)中,建立一個名為FTP的數(shù)據(jù)庫(本文采用SQL Server作為數(shù)據(jù)庫平臺),該數(shù)據(jù)庫中主要的表與表結(jié)構(gòu)如下:
1.用戶帳號表(User_accounts)
用戶帳號表(User_accounts)是Serv-U從數(shù)據(jù)庫中讀取的主要信息數(shù)據(jù)表,此表是本系統(tǒng)的核心數(shù)據(jù)表。具體內(nèi)容如表1所示。
User_accounts表中關(guān)鍵字段介紹:
(1)Access(目錄與訪問規(guī)則)字段
該字段值是表示用戶對目錄的訪問權(quán)限。格式是:目錄名稱、權(quán)限。
用戶對目錄的訪問權(quán)限有R(讀取)、W(寫入)、A(附加)、M(修改)、E(執(zhí)行——由于安全原因,所有帳號均不能開啟此權(quán)限)、L(目錄)列表、C(建立目錄)、D(刪除目錄)、P(將權(quán)限繼承給子目錄)等9種權(quán)限。
例如:用戶可訪問的目錄是h:ftpsj軟件0611班張三20060101001。訪問權(quán)限是:讀取、寫入、修改、列表、建立目錄、刪除目錄、將權(quán)限繼承給子目錄。該字段的值就是h:ftpsj軟件0611班張三20060101001|RWMLCDP
(2)HomeDir(用戶可訪問的主目錄)字段
該字段值表示用戶可訪問的主目錄,建議在設(shè)置用戶目錄時分三層來建立,第一層主目錄,第二層為班級目錄,第三層為用戶目錄。其結(jié)構(gòu)如圖1所示。
(3)Password(用戶口令)字段
Serv-U密碼加密算法為隨機(jī)碼與MD5 32 位加密。算法為隨機(jī)產(chǎn)生2個字符,如ar。將ar+明文密碼(如password)使用MD5加密,如MD5("arpassword"),生成密碼后將所有小寫字符變?yōu)榇髮?最前加上這兩個隨機(jī)字符"ar"+" 3F6D159FF468A70E54E209C3F556601C ",生成最終密碼。
(4)QuotaMax(最大使用硬盤空間)字段
該字段是用來設(shè)置用戶FTP的最大容量的,單位以字節(jié)(byte)。
(5)Type(用戶類型)字段
Type字段是用來保存用戶類型的,在學(xué)校一般用戶類型有三類:學(xué)生、職工、教師。學(xué)生與職工只能使用查看自己的FTP信息;任課教師既能管理和使用自己的FTP數(shù)據(jù),又能查看自己所帶班級的FTP數(shù)據(jù),這樣任課教師就可以在任何時間、任何地點(diǎn)查閱學(xué)生的作業(yè)。
2.班級信息表
表2用于保存使用FTP的學(xué)生班級情況。
3.教師任課班級表
二、Serv-U的主要設(shè)置說明
1.企業(yè)版的Serv-U(4.1以上版本)才夠支持ODBC。在Serv-U安裝完成后,根據(jù)向?qū)Ы⑿碌挠騇yFtp,并將Serv-U的域類型設(shè)置為“存儲于ODBC數(shù)據(jù)庫中”,如圖2所示。
2.選擇MyFtp在ODBC源名稱框內(nèi)輸入ODBC數(shù)據(jù)源名稱ftp。在ODBC帳號名文本框內(nèi)輸入數(shù)據(jù)庫管理員用戶名,在ODBC帳號密碼文本框內(nèi)輸入數(shù)據(jù)庫管理員口令。如圖3所示。
3.退出Serv-U應(yīng)用程序,并結(jié)束ServUDaemon.exe進(jìn)程。
4.使用記事本打開Serv-U的配置文件ServUDaemon.ini。做如下修改:
ODBCSource=ftp|“數(shù)據(jù)庫管理員帳號”、“數(shù)據(jù)庫管理員口令”
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è)置完成。
三、編寫用于管理Serv-U用戶帳號的ASP站點(diǎn)
1.班級信息的添加
班級信息添加時重點(diǎn)要在服務(wù)器的硬盤上建立該班級學(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")
′從添加班級信息頁面讀取班級名稱
dim asan_class_folder
asan_class_folder="F:ftpsj"&class;_1
′創(chuàng)建用戶所在的目錄文件夾
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é)生帳號信息,并進(jìn)行相應(yīng)的設(shè)置,是該系統(tǒng)成功與否的關(guān)鍵。筆者采用將EXCEL文檔導(dǎo)入SQL數(shù)據(jù)表的方法,先將EXCEL文檔上傳至站點(diǎn)的“EXCEL”文件夾中,然后再將EXCEL文檔的學(xué)生信息逐一添加到SQL數(shù)據(jù)庫的User_accounts表中。具體實現(xiàn)方法如下:
(1)EXCEL文檔結(jié)構(gòu)
EXCEL文檔的第一個工作表名稱為“user_accounts”,有兩個字段:xh(學(xué)號)、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對象
Set ConnExcel=Server.CreateObject("ADODB.Connection")
driver="driver={icrosoft EXCEL driver (*.xls)};dbq="&server.mappath;("..excelwwww.xls")
′調(diào)用Open方法EXCEL
Connexcel.Open driver
′注意表名一定要以下邊這種格式“[表名$]"書寫
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
′===========寫入數(shù)據(jù)庫=========
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頁面選擇班級的值
′創(chuàng)建用戶所在的目錄文件夾。
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為字符的個數(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)管理
任課教師帳號的添加可參考學(xué)生信息的添加,只要將字段“type”的值設(shè)置為“任課教師”即可。
任課教師通過Web站點(diǎn)登錄后,可設(shè)置登錄FTP站點(diǎn)查閱內(nèi)容為自己的數(shù)據(jù)或所帶班級的作業(yè)數(shù)據(jù),該功能的實現(xiàn)只要修改教師用戶的Access與HomeDir兩個字段的值為相應(yīng)的目錄即可,限于篇幅這里不再敘述。
四、結(jié)束語
只要我們認(rèn)真研究Serv-U的數(shù)據(jù)庫結(jié)構(gòu),就可以使用ASP編程來實現(xiàn)對Serv-U建立的FTP站點(diǎn)全面管理,如FTP站點(diǎn)的注冊、審批、計費(fèi)等管理業(yè)務(wù)。筆者在近幾年的使用過程中,每學(xué)期都有新功能的添加,為學(xué)院計算機(jī)教學(xué)提供了有力的技術(shù)保障。
參考文獻(xiàn):
[1]Serv-U的ODBC數(shù)據(jù)庫做法[DB/OL].http://hi.baidu.com/my100du/blog/item/b1db1ad7f1a3bdd5a044df08.html.
[2]簡析如何使用Serv-U的ODBC功能[DB/OL].http://www.51cto.com/art/200701/38695.htm.
[3]用程序來自動建立FTP賬號[DB/OL].http://www.west263.com/www/info/23983-1.htm.
[4]使用ODBC數(shù)據(jù)庫管理Serv-U的FTP用戶及相關(guān)ASP編程[EB/OL].http://www.jb51.net/article/12711.htm.
(編輯:楊馥紅)