第9讲数据库程序的安全性设计_第1页
第9讲数据库程序的安全性设计_第2页
第9讲数据库程序的安全性设计_第3页
第9讲数据库程序的安全性设计_第4页
第9讲数据库程序的安全性设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8讲数据库程序的安全性设计事务系统分析数据库设计UI设计数据库连接数据库查询离线数据管理安全性设计XML数据交换程序发布部署课程内容目录1,身份认证2,口令加密3,基于角色的授权4,防范SQL注入攻击1,身份认证身份认证的意思是:确定你就是你所声称的你。一般做法是,在数据库中设计用户表,存放用户登录号与密码。用户进入系统之前,输入登录号和密码,系统将输入数据与用户表中的数据进行匹配。从而验证身份。1,身份认证以BookStore系统为例,在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){//取得输入字符串的字节数组byte[]data=Encoding.Unicode.GetBytes(strSource);//一个MD5加密对象MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();//用MD5加密对象对字节数组加密,得到字节数组byte[]hash_byte=md5.ComputeHash(data);//将加密后的字节数组转换为字符串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统计分析bitTRole为Role输入一些初始值Role图书管理读者管理丢书赔付统计分析管理员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["统计分析"])){mnu统计分析.Enabled=false;}if(!Convert.ToBoolean(dr[“丢书赔付”])){mnu丢书赔付.Enabled=false;}}dr.Close();Dac.Conn.Close();}4,防范SQL注入攻击在本应输入数据的地方夹杂进了SQL命令,从而控制数据库,对系统构成攻击,称为SQL注入攻击。SQL注入一般用于Web应用程序攻击。但在WinForm中一样可以起到攻击作用,因此应该采取必要防范。SQL注入实例——以BookStore登录窗体为例程序中的查询代码:“Select*FromTUserWhereUserId=‘”+txtUid.Text

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论