第9講數(shù)據(jù)庫程序的安全性設(shè)計_第1頁
第9講數(shù)據(jù)庫程序的安全性設(shè)計_第2頁
第9講數(shù)據(jù)庫程序的安全性設(shè)計_第3頁
第9講數(shù)據(jù)庫程序的安全性設(shè)計_第4頁
第9講數(shù)據(jù)庫程序的安全性設(shè)計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8講數(shù)據(jù)庫程序的安全性設(shè)計事務(wù)系統(tǒng)分析數(shù)據(jù)庫設(shè)計UI設(shè)計數(shù)據(jù)庫連接數(shù)據(jù)庫查詢離線數(shù)據(jù)管理安全性設(shè)計XML數(shù)據(jù)交換程序發(fā)布部署課程內(nèi)容目錄1,身份認證2,口令加密3,基于角色的授權(quán)4,防范SQL注入攻擊1,身份認證身份認證的意思是:確定你就是你所聲稱的你。一般做法是,在數(shù)據(jù)庫中設(shè)計用戶表,存放用戶登錄號與密碼。用戶進入系統(tǒng)之前,輸入登錄號和密碼,系統(tǒng)將輸入數(shù)據(jù)與用戶表中的數(shù)據(jù)進行匹配。從而驗證身份。1,身份認證以BookStore系統(tǒng)為例,在BookStore數(shù)據(jù)庫中設(shè)計表TUser,結(jié)構(gòu)如下:列類型UserIdnchar(10)pkUserNamenchar(10)notnullpwdnchar(10)notnullTUser在FrmMain中,改寫FrmMain_Load方法

privatevoidFrmMain_Load(objectsender,EventArgse){FrmLogonfrmLogon=newFrmLogon();frmLogon.ShowDialog();}在應(yīng)用程序中增加一個登錄窗體FrmLogon,設(shè)計效果如下://退出privatevoidbtnExit_Click(objectsender,EventArgse){Application.Exit();}//登錄privatevoidbtnLogon_Click(objectsender,EventArgse){boolloginSuccess;Dac.Conn.Open();SqlCommandcmd=Dac.Conn.CreateCommand();cmd.CommandText="Select*FromTUserWhereuid='"+txtUserId.Text+"'";SqlDataReaderdr=cmd.ExecuteReader();if(!dr.Read()){MessageBox.Show("無此用戶");}elseif(txtPwd.Text!=dr["Pwd"].ToString()){MessageBox.Show("口令錯誤");}else{loginSuccess=true;}dr.Close();Dac.Conn.Close();if(loginSuccess){this.Close();}}2.口令加密數(shù)據(jù)庫中,用戶的口令一般不用明文存放,加密的方法通常采用MD5算法。步驟:原始口令通過MD5計算散列值,散列值存放在數(shù)據(jù)庫中以后輸入的口令計算散列值,與數(shù)據(jù)庫里的存放的散列值比較,相符則口令正確。2,口令加密例:MD5算法加密口令usingSystem;usingSystem.Security.Cryptography;usingSystem.Text;usingSystem.Security;//將一個明文用MD5算法加密publicstringGetMD5Hash(stringstrSource){//取得輸入字符串的字節(jié)數(shù)組byte[]data=Encoding.Unicode.GetBytes(strSource);//一個MD5加密對象MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();//用MD5加密對象對字節(jié)數(shù)組加密,得到字節(jié)數(shù)組byte[]hash_byte=md5.ComputeHash(data);//將加密后的字節(jié)數(shù)組轉(zhuǎn)換為字符串stringresult=System.BitConverter.ToString(hash_byte);returnresult;}口令加密例:MD5算法檢驗輸入的口令

publicboolvalidateInput(stringinput,stringpwd){byte[]data=Encoding.Unicode.GetBytes(input);MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();byte[]hash_byte=md5.ComputeHash(data);stringresult=System.BitConverter.ToString(hash_byte);//比較if(result==pwd){returntrue;}else{returnfalse;}}3,基于角色的授權(quán)多用戶應(yīng)用程序,不同用戶具有不同功能模塊的操作權(quán)限。由于用戶數(shù)可能很大,為每一個用戶指定權(quán)限不合適。采用基于角色的權(quán)限控制方法可以簡化這一問題,即將用戶設(shè)置成不同的角色,不同的角色具有不同的權(quán)限。以BookStore為例,在BookStore數(shù)據(jù)庫中增加一個表TRole列名類型約束Rolenchar(10)Pk圖書管理bit讀者管理bit丟書賠付bit統(tǒng)計分析bitTRole為Role輸入一些初始值Role圖書管理讀者管理丟書賠付統(tǒng)計分析管理員0001財務(wù)0010操作員1101修改TUser,增加一列Role,如下:列名類型UserIdnchar(10)pkUserNamenchar(10)notnullPwdnchar(10)notnullRolenchar(10)notnullTUser修改FrmLogon的部分代碼:增加一個屬性Role;修改checkUserIdAndPwd方法,在驗證了Uid和Pwd后,取得Role。

publicstringRole=string.Empty;

……

if(!dr.Read()){MessageBox.Show("無此用戶");}elseif(pwd!=dr["Pwd"].ToString()){MessageBox.Show("口令錯誤");}else{result=true;this.Role=dr["Role"].ToString();

}……修改FrmMain的部分代碼privatevoidFrmMain_Load(objectsender,EventArgse){mnuMain.Enabled=false;FrmLogonfrmLogon=newFrmLogon();frmLogon.ShowDialog();stringrole=frmLogon.Role;grant(role);//授權(quán)}//授權(quán),根據(jù)角色設(shè)置不同菜單項的可用性voidgrant(stringrole){mnuMain.Enabled=true;SqlCommandcmd=Dac.Conn.CreateCommand();Dac.Conn.Open();cmd.CommandText="Select*FromTRoleWhereRole='"+role+"'";SqlDataReaderdr=cmd.ExecuteReader();if(dr.Read()){if(!Convert.ToBoolean(dr["圖書管理"])){mnu圖書管理.Enabled=false;}if(!Convert.ToBoolean(dr["讀者管理"])){mnu讀者管理.Enabled=false;}if(!Convert.ToBoolean(dr["統(tǒng)計分析"])){mnu統(tǒng)計分析.Enabled=false;}if(!Convert.ToBoolean(dr[“丟書賠付”])){mnu丟書賠付.Enabled=false;}}dr.Close();Dac.Conn.Close();}4,防范SQL注入攻擊在本應(yīng)輸入數(shù)據(jù)的地方夾雜進了SQL命令,從而控制數(shù)據(jù)庫,對系統(tǒng)構(gòu)成攻擊,稱為SQL注入攻擊。SQL注入一般用于Web應(yīng)用程序攻擊。但在WinForm中一樣可以起到攻擊作用,因此應(yīng)該采取必要防范。SQL注入實例——以BookStore登錄窗體為例程序中的查詢代碼:“Select*FromTUserWhereUserId=‘”+txtUid.Text

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論