在ASP程式應注意的問題---開發串連遠程SQL Server

來源:互聯網
上載者:User
server|程式|問題   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 ,則必
須通過Proxy 伺服器才能在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的基本表中,無論使用者通過何種方式更新記錄,都無法跳過觸發器的檢查,因
此使用觸發器實現的安全性是相當高的。但由於在表中只能定義針對手稿刪除和修改的觸發器,不能定義針對查詢的觸發
器,因此,要實現對查詢的存取控制,則要通過中介層存取程式,只有向使用者查詢請示返回特定條件的記錄來實現。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。