基于VB 的远程SQL SERVER 数据库的访问策略.doc_第1页
基于VB 的远程SQL SERVER 数据库的访问策略.doc_第2页
基于VB 的远程SQL SERVER 数据库的访问策略.doc_第3页
基于VB 的远程SQL SERVER 数据库的访问策略.doc_第4页
基于VB 的远程SQL SERVER 数据库的访问策略.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

文库下载 免费文档下载/本文档下载自文库下载网,内容可能不完整,您可以点击以下网址继续阅读或下载:/doc/0a56de6b25c52cc58bd6be2b.html基于VB的远程SQLSERVER数据库的访问策略基于VB的远程SQLSERVER数据库的访问策略基于VB的远程SQLSERVER数据库的访问策略胡吉平?张西展?郝旭军(济南军区司令部工程设计研究院?济南250002)摘?要?本文以VB应用程序为例讨论了访问远程SQLSERVER数据库的几种流行方法,分别论述了每种方法的内部机理,并比较了每种方法的优点及缺点。关键词?VB?远程数据库对象模型?ActiveX?OLEDBTHESTRATEGYFORCALLINGREMOTESQLSERVERDATABASEBASEDONVBHuJiping?ZhangXizhan?HaoXujun(JinanMilitaryAreaHeadquartersEngineeringDesignInstitute,Jinan250002)Abstract?TheauthorsdescribeserialmethodsfortheVBprogramcallingremoteSQLSERVERdatabaseandgiveitsinnerprincipleandcompareitsadvantageandshortage.Keywords?VB?Remotedatabaseobjectmodel?ActiveX?OLEDB并控制远程ODBC数据系统部件的框架,对象和集合的属性描1?引?言MicrosoftSQLSERVER(目前已发展到2000版本)是微软公司推出的一套功能强大的C?S(客户?服务器)数据库系统。本文主要以VisualBasic(简称VB)编程语言为例讨论访问远程SQLSERVER数据库的方法。VB访问本地数据库的方法很多,如用Jet和Data数据控件访问数据库、用数据访问对象(DAO)访问本地数据库,但随着网络技术的发展,基于单机的信息系统已跟不上迅速变化的市场需要,这就要求企业要有一个完整的信息系统,而计算机网络技术的迅猛发展为解决这个问题提供了可能,因而,利用数据服务器在企业内部共享数据便应运而生了。://doc/0a56de6b25c52cc58bd6be2b.htmlpar本文着重讨论目前较流行的用远程数据控件RDC(RemoteDataControl)、远程数据对象RDO(RemoteDataObject)、ADO(Ac?tiveXDataObject)数据控件即ADC(AdvanceDataControl)、ActiveX数据对象即ADO四种方法访问SQLSERVER远程数据库。述了数据库的特性,也描述了用来操纵它们的方法。图1?RDO对象集合框架2?1?2RDO访问远程SQLSERVER数据库步骤首先在窗体中添加MicrosoftRemoteDataObject2.0引用,如果一个ODBC数据源已经设置好了,以Pubs数据库为例,假设其DSN名称为?pubsexample ,那么连接远程数据库的代码如下:?dimmconasRDO.rdoconnectionsetmcon=rdoEnvironments(0).openConnection(?pubsexample )如果没有配置ODBC的DSN,则要建立所谓?DSN接,其步骤如下:less 连!在窗体中添加MicrosoftRemoteDataObject2.0引用。?编写访问远程数据库代码:?dimmconasrdoconnectiondimsConnect=?UID=sa;PWD=mypassword;DATABASE=pubs;SERVER=myserver; &?DRIVER=SQLSERVER;DSN=#;setmcon=rdoEnvironments(0).openConnection(? ,rdDriverNoPrompt,False,sConnect,rdAsyncEnable)2?实现编程方法2?1远程数据对象RDO访问远程SQLSERVER数据库://doc/0a56de6b25c52cc58bd6be2b.htmlpar2?1?1关于RDORDO是VB提供的重要工具之一,其对象集合框架如图1所示。RDO在ODBCAPI(ApplyProgramInterlace)上为我们提供了一个应用层,包括一系列对象和集合,提供了使用代码创建收稿日期:2002-04-18。胡吉平,工程师,主研领域:计算机辅助设计。上述编码中,DSN指定为空,程序运行之后,由用户动态创建DSN以访问远程数据库,这比用ODBC建立DSN省略了一步。与数据库的连接完成之后,生成结果集,其基本代码如下:?dimmrsPublishersasrdoResultsetdimsSQLasstringsSQL= SELECTpublisherssetmrsPublishers=mcon.OpenRusultset(sSQL,rdOpenKeyset,rdConcur?Values)id,pubname,city,state,countryFROMpub?2?4用ActiveX数据对象访问远程SQLSERVER数据库2?4?1关于ADO数据对象通用数据访问UDA(UniversalDataAccess)是Microsoft想使开发人员能够用一种数据访问方法去访问他正在查询的任何数据源。其实,ODBC是向这个目标迈出的一大步,在ODBC中,应用程序只需要API就能访问任何数据库,但ODBC的问题是它直接针对关系数据库,其他数据源并不十分适合它的模型,为解决这个问题,Microsoft创建了对象连接嵌入数据接口OLEDB(ObjectLinkingEmbeddingDatabase),OLEDB是一组C API函数,就像ODBC标准中的ODBCAPI一样,不同的是,OLEDB的API是符合COM(ComponentObjectModel)标准、基于对象的API,ODBCAPI则是简单的CAPI。这样就不用去试图向OD?BC中添加功能以便使它能像/doc/0a56de6b25c52cc58bd6be2b.html处理关系数据库一样去处理其他的数据源了。OLEDB的数据提供者可以是关系数据库、电子表格、文件系统或任何其它数据源,Microsoft在OLEDB上创建了易于使用的ActiveXDataObject(ADO),它是进入OLEDB的接口,借助ADO,VB就能利用UDA的优点。ADO对象模型如图2所示,从模型图中可以看出,ADO与RDO模型的层次结构不同(RDO有一个rdoRecordset对象,rdoRecordset是rdoConnection子对象,rdoConnection是rdoEnvironment的子对象,rdoEnvironment是rdoEngine的子对象),ADO基本上是一种平板结构,从一个数据源中获取记录只需要一个连接和一个记录集,Command和RecordSet与Connection三者之间没有上、下层的关系,这种设计主要是为了适应Internet应用开发的需要,因为在Internet上,像在局域网内那样维护一个永久性的连接,然后在连接的基础上执行查询基本上是不可能的。利用这个结果集对象的AddNew和Delete方法来增加、更新和删除记录,限于篇幅,此处不再赘述。2?2用远程数据控件RDC访问远程SQLSERVER数据库利用远程数据控件,可以很方便地创建一个基于SQLSERVER数据库的表,用RDC创建表是可视化设计的最终目标%不需任何代码。用RDC创建表包括以下步骤:!为数据库创建一个ODBC(OpenDataBaseConnectivity)数据源。?向窗体中添加远程数据控件(即MicrosoftRemoteControl6.0),并设置DataSourceName和SQL属性。&对需要显示的项在窗体中添加控件,设置DataSource和DataField的属性。将远程数据控件绑定到ODBC的用户DSN或系统DSN上,该控件打开与SQLSERVER的连接,提交查询。?中的SQL属性,我们以SQLSERVER自带的?Pubs 数据库为例/doc/0a56de6b25c52cc58bd6be2b.html,比如要查询?Pubs 数据库中的?Publishers 表中的字段,可如下定义:SELECTpubid,pubname,city,state,countryFROMpublishers然后可以将查询的结果以你自己设计的输出或显示方式表示出来,再利用控件提供的导航按钮在查询返回的记录中浏览。实现数据库的遍历比较简单,如果要对数据库中的记录进行修改,则要用到远程数据控件的结果集Resultset对象进行编程,Resultset对象提供了AddNew和Delete方法向数据库的表中添加及删除记录,如rdc.resultset.addnew和rdc.resultset.delete,所要注意的是,执行删除记录的操作以后,当前记录变成未定义,需要添加代码移向有效记录。远程数据控件是一个非常方便使用的控件,如果不向表中添加或删除记录,其基本不用编写代码,但它对远程数据库的操作非常有限。图2?ADO对象模型2?4?2用ActiveX数据对象访问远程SQLSERVER数据库步骤ADO的Connection和RecordSet对象可以直接访问数据库,它访问SQLSERVER的步骤如下:!创建并打开一个连接;?把打开的这个连接作为参数,创建并打开一个记录集;&关闭记录集;?关闭连接。首先在窗体中添加MicrosoftActiveXDataObject2.0Library的引用,并加入MicrosoftWindowsCommonControl6.0组件,一般在窗体加载事件中打开Connection对象和RecordSet对象,如下:?PrivateSubFormload()?DimadocnasADODB.Connection?DimadorsasADODB.RecordSet?Setadocn=NewADODB.Connection2?3ADO数据控件访问远程SQLSERVE/doc/0a56de6b25c52cc58bd6be2b.htmlR数据库ADO数据控件访问远程SQLSERVER数据库步骤为:!先加载组件MicrosoftADODataControl6.0,然后在窗体上画ADO数据控件,再设置其ConnectingString(包括DSN,UserID和Password)和RecordSource属性。?在窗体中添加几个控件并设置它们的DataSource和DataField属性以显示记录源中的字段。只需简单的两步,不要任何代码,就可以连接并查询数据库,整个数据访问全由ADO数据控件来处理。若要对记录源进行添加、修改、删除等操作,数据控件就无能为力了,而需要使用ADO数据控件的RecordSet属性的各种方法,如adodc.RecordSet.AddNew是向缓冲区中创建一个新的空记录,而adodc.RecordSet.Update是把这一新记录保存到数据库中,adodc.RecordSet.Delete来删除一条记录,删除完之后要把数据控件移到一个新的有效记录上。以下分三种方法连接到数据库或数据源方法一?直接用连接字符串连接到数据库pubs:adocn.open?Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID(下转第68页)?使用了公钥密码和对称密码,所以应使两种密码具有同样的安全强度,即使用128比特AES则需相应使用256比特CS ECC,否则整个密码就容易在其最薄弱的环节被攻击。内层的安全是整个混合密码的核心,必须保证要有足够的密钥长度,即128比特以上AES,而且最好使用AES的CFB模式来掩盖明文,以提高安全性。假设攻击者截获到感兴趣的密文e,若选择直接攻击AES则极其困难,因为128比特AES目前来说还是安全的;若选择攻击会话密钥K,则面临解棘手的ECC数学难题,CS结构使之无法绕过这个难题,而要解开256比特ECC,目前的计算能力也不可及。混合密码中还多处使用了Hash函数,可以增强加密解密的单向性,从而加大密码分析难度。外层加密?用AES/doc/0a56de6b25c52cc58bd6be2b.html和pswd对随机因子?进行加密。对组外的攻击者来说,没有正确pswd将无法进行攻击,从而起到外层保护的作用。外层的安全要求可以没有内层高,128位AES就足够,而且pswd还可设为组内共享。由于内层和外层的安全性完全独立,所以即使攻击者破解出?(如组内共享pswd的人员可以做到),对突破内层密码保护也没有太大帮助。该混合密码的计算量比其它密码增加不少,需要实现ECC、AES和Hash三个运算模块。笔者通过调用大数运算函数库MIRACL6进行编程实现,其运算速度较快,在PII233上做一次256比特ECC验证只需二十几毫秒。该混合密码还要求每个组员有4个公钥和5个私钥,这就增加了密钥生成和管理的工作量。解决办法是采用Server-Client模式来管理密钥,即所有组员的公钥都放在服务端集中管理,而组员的私钥则在各自客户端生成。当然每次生成新私钥的同时也需更新服务端的相应公钥,这样各组员就可以定期或不定期地更新自己的私钥公钥对,从而更好地维护系统的安全。另外该混合密码将产生一定的密文扩展,即由e扩展为(e,v,?(),增加了64个字节,这在通信带宽受到限制时可能是一个值得注意的问题。参考文献1BruceSchneier,应用密码学:协议、算法与C源程序(SecondEdition),机械工业出版社,2000,1?2R.CramerandV.Shoup,Apracticalpublickeycryptosystemprovablyse?cureagainstadaptivechosenciphertextattack,InProceedingsofCRYPTO(98,1998?3卢开澄编著,计算机密码学(第二版),清华大学出版社,1998?7?4IEEEP1363/P1363a,?groups?1363?5FederalInformationProcessingStandardsPublication1/doc/0a56de6b25c52cc58bd6be2b.html97,2001.11.26,ht?tp:??encryption?aes?6ShamusSoftwareLtd.,MultiprecisionIntegerandRationalArithmeticC?C Libraray,Version4.43,2000?4?4?结论与建议本文提出的基于CS、ECC和AES的混合密码是在这三种密码相互取长补短的基础上进行整合集成,它能快速地进行数据加解密、身份验证和消息真伪辨别,从而发挥出混合密码的整体优势,既安全又实用,适合在移动办公的小组成员之间进行保密通信。(上接第23页)=sa; &?InitialCatalog=pubs;DataSource=myserverecute方法和Recordset对象的Update,Addnew和Delete方法,Ex?ecute方法还可以使用SQL查询和诸如UPDATE、INSERT、DE?LETE这样的命令,限于篇幅,此处不再赘述。方法二?如果有一个DSN数据源,则用连接字符串连接到ODBC的DSN数据源pubsexample:adocn.Open?Provider=MSDASQL.1;PersistSecurityInfo=False; &?UserID=sa;DataSource=pubsexample方法三?如果没有DSN数据源,就象RDO一样,我们同样可以在数据环境窗口当中创建一个DNSless的连接字符串:?adocn.open?Provider=MSDASQL.1;PersistSecurityInfo=False;UserID=sa; &?ExtendedProperties=(DRIVER=SQLServe;SERVER=WINBOOK;UID=sa; &?APP=VisualBasic;WSID=WINBOOK;DA/doc/0a56de6b25c52cc58bd6be2b.htmlTABASE=pubs(;InitialCatalog=pubsSetadors=NewADODB.RecordSetadors.open?publishers ,cn,adOpenForwardOnly,adLockReadOnly?)(此处是对数据集进行操作)adors.closeadocn.closesetadors=nothingsetadocn=nothingEndSub图3?ADO访问SQLSERVER的三种方式3?小?结上述四种访问远程SQLSERVER数据库的方法各有其特点,RDO方法是基于对象的,因而便于使用,由于它是通过O

温馨提示

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

最新文档

评论

0/150

提交评论