程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 開發連接遠程SQL Server 的ASP程序應注意的問題

開發連接遠程SQL Server 的ASP程序應注意的問題

編輯: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的基本表中,無論用戶通過何種方式更新記錄,都無法跳過觸發器的檢查,因
此使用觸發器實現的安全性是相當高的。但由於在表中只能定義針對手稿刪除和修改的觸發器,不能定義針對查詢的觸發
器,因此,要實現對查詢的存取控制,則要通過中間層存取程序,只有向用戶查詢請示返回特定條件的記錄來實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved