当前位置: 首页 > 图文教程 > 网络编程 > ASP > 开发连接远程SQL Server 的ASP程序应注意的问题

ASP
对连串英文自动换行的解决方法 IE5.5
怎样写你自己的EMAIL组件(原理)
ASP中有关timeout超时的体会
用ASP实现从SQL Server导出数据到Access
ASP向NT域中加一个用户
ASP乱码的解决方法
关于 aspsmartupload 注册问题
利用XML不离开页面刷新数据
IIS 处理 SEARCH 请求漏洞
不用组件实现上载功能(1)
不用组件实现上载功能(2)
在网页中实现OICQ里的头像选择的下拉框
仅用xsl和asp实现分页功能
如何使用context()方法将数据置入表格(XML)
利用ASP从远程服务器上接收XML数据
将数据库里面的内容生成EXCEL
怎样在ASP里面创建统计图表
加密你的Access数据库
利用global.asp定时执行ASP
加密QueryString数据

开发连接远程SQL Server 的ASP程序应注意的问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 31 ::
收藏到网摘: n/a

  Microsoft SQL Server7.0是一种大型、分布式数据库系统,也可被认为是一种大型、分布式数据仓库。由于其与
Windows NT和BackOffice以及Visual Studio具有紧密的配合,已被越来越多的网络应用系统所采用。而ASP程序也以其和
NT的紧密连接,可使用ActiveX对象、CGI接口对象化等特点向CGI程序发起了有力的挑战。下面,就谈谈开发连接远程SQL
Server 的ASP程序应注意的几个问题。
  SQL Server是一个十分注重安全性的数据库,特别是在7.0版本发布以后,可以将数据库的许可直接授予Windows NT用
户,数据库角色也可以包括NT 用户或组及SQL Server旧版本的用户和角色。另外,结合Microsoft Proxy Server ,则必
须通过代理服务器才能在Internet 上访问SQL Server,这样更确保了数据的安全。
   在连接方案上,可选择TCP/IP套接字和命名管道的方法访问。具有NT用户帐号的用户适合于采用命名管道的方法,没
有NT用户帐号的用户则不适合用此方法.。这是因为在建立连接之前,数据库用户必须被NT确认,而选择TCP/IP套接字的连
接则无此限制,该连接可直接连到数据库服务器,不必通过使用命名管道的中间计算机,只要通过了SQL Server确认用户
就可获得访问权。

  由于是编写数据库连接的ASP应用程序,采用的数据访问编程模式当然是ADO啦!在ADO以前的数据访问编程模式有数据
访问对象DAO和远程访问对象RDO,RDODAO都是在ODBC下开发的,ODBC是用C语言编写的基于SQL的桌面规程。相反,ADO是在
一种新型的规程OLE
DB下开发的,OLE DB可以被看作是OLE技术在数据库中应用。它是基于C++开发的,给ODBC的功能提供了标准化的COM接
口。C++是面向对象的,因此ADO也具有面向对象的特性。并能通过一系列COM接口来扩展自己。这一点对于ASP程序来说,
实在是太重要了。我们知道ASP程序使用的VBScript脚本语言的功能是很弱的,若要扩充VBScript的能力,使其能访问数
据,则必须创建一个服务器端组件,通过COM接口来访问数据,而这正是ADO所擅长的。

  在编程连接网络上指定的服务器和数据库时,还必须在Web服务器上创建数据源名(DSN)。要设置一个DSN,必须给服
务器提供数据库的名字、通信所用的ODBC驱动、以及在网络中的地址。要注意的是:只有设置的DSN为一个系统DSN,才能
让ADO在ASP中正常工作。如何确定DSN是系统DSN而不是用户或文件DSN呢?很简单,只有对于NT服务器上的所有用户和服务
都可以访问的DSN才是系统DSN。
  设置SQL
  SERVER的DSN很简单,只须在有IIS或PWS的机器上启动“控制面板”的“ODBC”,在“ODBC数据源管理员”对话框中选
取“系统数据源名称”选项后,选取“SQL SERVER”即可。若无“SQL SERVER”,则先添加,再选取即可。这样,即使我
们要变更数据库,也不必修改程序中的ODBC参数,只需重新设置系统的DSN即可。
  设计ASP程序连接SQL SERVER的另一个重要问题是实现对SQL SERVER的存取控制。由于在关系型数据库中,DBMS本身的
DCL语言只支持对表和字段的存取控制,而不直接支持对表中记录提供安全性保护。为实现其安全性,同时又不失B/S结构
的开放性,可以考虑采用使用中间层存取程序逻辑结合触发器的方式来实现。使用中间层存取程序即用户端程序不直接访
问DBMS,而是通过一个中间层的存取程序。以网上BBS应用于为例,用户查询时,存取程序把表中的全部记录返回给用户;
用户插入记录时,存取程序在新记录的User_name字段填写当前用户名,表明记录的主人,当用户删除和修改记录时,存取
程序根据User_name字段向用户返回只属于他自己的记录,并允许用户从自己的记录中选择进行操作。使用触发器的方式则
是所有用户直接访问表,但在表上建立如下的触发器:

CREATE TRIGGER trigger_1 on table_ 1 FOR INSERT AS
BEGIN
IF EXITS(SELECT * FROM inserted WHERE User_name<>User_name())
BEGIN
ROLLBACK TRANSACTION
RAISERROR('请输入正确的用户名',16,-1)
END
END
CREATE TRIGGER trigger_2 on table_1 FOR UPDATE,DELETE AS
BEGIN
IF EXITS (SELECT * FROM deleted WHERE User_name<>User_name())
BEGIN
RAISERROR('你不能修改他人的数据',16,-1)
END
END


  在上面的程序中,trigger_1对于用户名不正确的用户的插入请求予以否决。trigger_2对于试图修改他人的记录的请
示予以否决。由于触发器附着在SQL Server的基本表中,无论用户通过何种方式更新记录,都无法跳过触发器的检查,因
此使用触发器实现的安全性是相当高的。但由于在表中只能定义针对手稿删除和修改的触发器,不能定义针对查询的触发
器,因此,要实现对查询的存取控制,则要通过中间层存取程序,只有向用户查询请示返回特定条件的记录来实现。