收藏本站
网站导航
联系方式
网站首页 | 杂志简介 | 论文欣赏 | 在线订阅 | 征稿启事 | 投稿须知 | 资讯速递 | 写作指南
本刊信息

主管:广西国有资产监督管理委员会
主办:广西轻工业科学技术研究院
协办:广西轻工协会
      广西酿酒协会
编辑/出版:《广西轻工业》编辑部
编委会主任:罗左青
编委会副主任:程劲芝 梁智
编委:白树雄 宋  苹 蒋敬全
      谢晓航 雷光鸿 贤章胜
主编:贤章胜
地址:广西南宁经济技术开发区
      迎凯路8号
邮编:530031
编辑部:0771-4518435
        4518909转8968
投稿信箱:qgkj@vip.126.com
网址:www.qgkjlw.com
国际标准刊号:ISSN2095—3518
国内统一刊号:CN45—1385/TS
订阅:全国各地邮局
邮发代号: 48—123
定价:人民币15元
刊期:月刊

理事单位

广西粮油科学研究所
广西大学轻工与食品工程学院
广西大学生命科学与技术学院
广西农垦糖业集团金光制糖有限公司
广西农垦糖业集团昌菱制糖有限公司
广西机械工业研究院
重庆啤酒集团柳州啤酒有限责任公司
南宁吉然节能环保技术有限公司
柳州柳连机械制造有限责任公司
南京润维热工设备有限公司
广西柳州市嘉诚汽车饰件系统有限公司
广西柳江县柳兴榨辊有限责任公司
广西南宁丰烁电力设备节能有限公司
广西都安密洛陀野生葡萄酒有限公司
广西巴马神酒业有限责任公司
广西中天领御酒业有限公司
广西北海市合浦东园家酒厂
桂林理工大学管理学院
广西工业职业技术学院   
广西农业职业技术学院
广西二轻工业技工学校
广西德保县酒厂
广西全州湘山酒厂
田阳南华纸业有限公司
广西桂平乳泉液酒业有限公司

 
首页>> 论文欣赏 >> 计算机科学与信息技术>> 正 文
 

基于存储过程的ADO.NET数据库访问

2010年第1期(总第134期)
谭鸿健(桂林理工大学高等职业技术学院计算机与信息技术系,广西 南宁 530001)
 
  【摘 要】 在数据库应用程序开发过程中,如何保证数据库应用程序的安全性是开发人员关注的问题,文章就此给出一种解决方案——在ADO.NET的应用中使用存储过程来保证数据库应用程序的安全性,防止各种类型的攻击,并通过举例说明其具体的应用。
  【关键词】 存储过程;ADO.NET;SQL注入式攻击
 
1 引言
  数据库应用程序的安全性对整个软件的安全有着至关重要的作用,如何设计安全的数据库应用程序是许多开发人员关心的问题。对数据库应用程序的攻击主要是注入不安全的代码,对这些代码进行有效的检测与防范是防止攻击的重要内容,这也是目前常见的防止攻击的思路,文章介绍了应用ADO.NET访问数据库的过程中,使用存储过程来防止此类攻击。该方案在实际应用中取得了很好的效果。
 
2 存储过程与ADO.NET简介
  存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,使用它可以将复杂的逻辑放到数据库层面去解决,可以降低网络流量,提高执行效率。文章重点说明它在安全性方面的应用。
  ADO(ActiveX Data Objects).NET提供了平台互用性和可伸缩的数据访问。ADO.NET增强了对非连接编程模式的支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。
  ADO.NET是在.NET编程环境中优先使用的数据访问接口,它提供了操作数据库的一系列类与结构。ADO.NET包含的对象有SqlConnection类、sqlDataReader类、SqlCommand类、SqlParameter类、DataSet类和SqlDataAdapter类等。
 
3 SQL注入式攻击
  所谓SQL注入式攻击,就是攻击者把SQL命令插入到用户界面的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。
  如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。
 
4 应用示例
  在各种信息管理系统的开发中都涉及用户管理,下面USERS表表示一个最简的表结构。
userID
userName
userPWD
userRoles
1
admin
admin
administrator
2
tom
123456
User
  将用户界面的数据写入数据库是开发数据库中一个很常见的工作。在写入的过程中必须考虑注入式攻击,例如如果使用直接SQL语句时,如遇到注入式字符串例如“ABC‘,’BCD‘,’CDE‘)DELETE FROM USER--“时,UERS表中所有的数据都会被恶意删除。在应用ADO.NET操作数据库的过程中使用存储过程可以有效避免注入式攻击。具体过程如下:
 
具体实施
5.1  准备存储过程
  首先我们将写入数据库的存储过程准备好,并在数据库中编译,具体实现代码如下:
     CREATE PROC PROCE_ADDUSER
        @userName varchar(20),
@userPWD varchar(20)
@userRoles varchar(20)
AS
INSERT INTO USERS(username,userPWD,userRoles)
 VALUES(@userName, @userPWD,@userRoles)
5.2  创建连接对象,连接到数据库
  定位及打开数据库由SqlConnection类负责,定位一个数据库需要知道数据库所在的数据库服务器,具体数据库名,登录凭证等,把这些信息构造为一个连接字符串,作为构造函数的参数传递给具体的SqlConnection对象。
  登陆凭证有两种情况需要考虑,一是登陆模式为信任连接方式,这种情况不需要提供用户名和密码,二是登陆模式为非信任连接方式,需要提供用户名和密码。
  打开数据库可以调用Open方法,具体实现代码如下:
string ConnectionStr = "server=localhost;uid=sa;pwd=sa;     database=pubs;Trusted_Connection=no";
SqlConnection conn = new SqlConnection(ConnectionStr);
myConn.Open();
5.3  创建命令对象,设置相关参数
  向数据库发出命令由SqlCommand与SqlParameter类负责,其中SqlCommand负责设置、发送命令,SqlParameter负责准备存储过程参数。
  需要用到的Command对象属性:
  CommandText指出被执行的SQL语句或者存储过程,在调用存储过程时,将它设置为存储过程名。
  CommandType指出CommandText数据如何解释,在调用存储过程时,需要将它设置为 StoredProcedure。
  Connection用于执行数据命令的Connection对象。
  Parameters参数集合,将准备好的存储过程参数添加到这个集合。
  SqlParameter类用于实例化一个具体参数对象,只需掌握它的构造方法和Value属性即可,其构造方法原形为:
  SqlParameter(string paraName,SqlDbType dbtype,int length)其中paraName表示参数名,它与存储过程名要一致,dbtype表示数据类型,length表示数据长度。
  Value属性须设置为具体的数值。
SqlCommand cmd=new SqlCommand();
cmd.CommandText=" PROCE_ADDUSER ";
cmd.CommandType=CommandType.StoredProcedure;
cmd.Connection=conn;
SqlParameter p= new SqlParameter("@userName",SqlDbType.Varchar,20);
p.Value=this.txtName.Text;
cmd.Parameters.Add(p);
/*其他两个参数类似*/
5.4  执行存储过程
  需要用到的Command对象方法:
  ExecuteNonQuery 执行如INSERT,DELETE,UPDATE语句等命令后,返回数据库中执行该操作后受影响的行数。
  执行完毕后要注意关闭数据库。
  具体实现代码如下:
cmd.ExecuteNonQuery();
conn.Close();
5.5  测试
  把注入式字符串例如“ABC‘,’BCD‘,’CDE‘)DELETE FROM USER--“写入用户界面的用户名输入控件,可以发现,字符串被当作一般字符串处理,恶意代码DELETE FROM USER不能在数据库中执行。所以利用ADO.NET访问数据库时使用存储过程可以达到了防范攻击的目的。
 
6 结语
  文章探讨了如何在ADO.NET中使用存储过程来对数据库进行访问,使用存储过程可以防范攻击,保证数据库程序的安全性,在今后软件开发中必然会受到广泛应用。
 
参考文献
[1]陈承欢.ADO.NET数据库访问技术案例教程[M].北京:人民邮电出版社,2008.
[2]孙三才,许薰尹.精通C#与ASP.net程序设计[M].北京:中国铁道出版社,2003.
[3]贾铁军.网络安全技术及应用[M].北京:机械工业出版社,2009.
[4]梁冰,陈丹丹,苏宇.SQL语言参考大全[M].北京:人民邮电出版社,2008.
[5]王继刚.揭秘Web应用程序攻击技术[M].北京:水利水电出版社,2009.
 
谭鸿健(1977-),男,广西上林人,讲师,研究方向:软件设计。
   
关于我们 | 版权声明 | 广告服务 | 网站地图 | 联系方式
Copyright© 2005 QGKJLW.COM All Rights Reserved. 版权所有.《轻工科技》编辑部
工作QQ:373180636 投稿信箱:qgkj@vip.126.com 咨询电话:0771-4518435 4518909转8968
通讯地址: 广西南宁经济技术开发区迎凯路8号《轻工科技》编辑部 邮编:530031