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

一夜四次郎7

一夜四次郎7

2016-01-29 18:07

开发连接远程SQL Server 的ASP程序应注意的问题,开发连接远程SQL Server 的ASP程序应注意的问题
  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的基本表中,无论用户通过何种方式更新记录,都无法跳过触发器的检查,因
此使用触发器实现的安全性是相当高的。但由于在表中只能定义针对手稿删除和修改的触发器,不能定义针对查询的触发
器,因此,要实现对查询的存取控制,则要通过中间层存取程序,只有向用户查询请示返回特定条件的记录来实现。

 
展开更多 50%)
分享

猜你喜欢

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

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

SQL server7.0的远程连接问题

编程语言 网络编程
SQL server7.0的远程连接问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL SERVER 2005 EXPRESS不能远程连接的问题

SQLServer
SQL SERVER 2005 EXPRESS不能远程连接的问题

解决SQL SERVER 2005无法远程连接的问题

SQLServer
解决SQL SERVER 2005无法远程连接的问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ASP调用SQL SERVER存储程序

ASP
ASP调用SQL SERVER存储程序

如何远程连接SQL Server数据库

MySQL mysql数据库
如何远程连接SQL Server数据库

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《NBA 2K15》库里实用技能介绍攻略

《NBA 2K15》库里实用技能介绍攻略

给老应用程序在XP上找个家

给老应用程序在XP上找个家
下拉加载更多内容 ↓