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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

privatevoidFrmMain_Load(objectsender,EventArgse){FrmLogonfrmLogon=newFrmLogon();frmLogon.ShowDialog();}在應用程序中增加一個登錄窗體FrmLogon,設計效果如下://退出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.口令加密數據庫中,用戶的口令一般不用明文存放,加密的方法通常采用MD5算法。步驟:原始口令通過MD5計算散列值,散列值存放在數據庫中以后輸入的口令計算散列值,與數據庫里的存放的散列值比較,相符則口令正確。2,口令加密例:MD5算法加密口令usingSystem;usingSystem.Security.Cryptography;usingSystem.Text;usingSystem.Security;//將一個明文用MD5算法加密publicstringGetMD5Hash(stringstrSource){//取得輸入字符串的字節(jié)數組byte[]data=Encoding.Unicode.GetBytes(strSource);//一個MD5加密對象MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();//用MD5加密對象對字節(jié)數組加密,得到字節(jié)數組byte[]hash_byte=md5.ComputeHash(data);//將加密后的字節(jié)數組轉換為字符串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,基于角色的授權多用戶應用程序,不同用戶具有不同功能模塊的操作權限。由于用戶數可能很大,為每一個用戶指定權限不合適。采用基于角色的權限控制方法可以簡化這一問題,即將用戶設置成不同的角色,不同的角色具有不同的權限。以BookStore為例,在BookStore數據庫中增加一個表TRole列名類型約束Rolenchar(10)Pk圖書管理bit讀者管理bit丟書賠付bit統(tǒng)計分析bitTRole為Role輸入一些初始值Role圖書管理讀者管理丟書賠付統(tǒng)計分析管理員0001財務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);//授權}//授權,根據角色設置不同菜單項的可用性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注入攻擊在本應輸入數據的地方夾雜進了SQL命令,從而控制數據庫,對系統(tǒng)構成攻擊,稱為SQL注入攻擊。SQL注入一般用于Web應用程序攻擊。但在WinForm中一樣可以起到攻擊作用,因此應該采取必要防范。SQL注入實例——以BookStore登錄窗體為例程序中的查詢代碼:“Select*FromTUserWhereUserId=‘”+txtUid.Text

溫馨提示

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

評論

0/150

提交評論