国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 山西省| 巩留县| 肃南| 北票市| 临安市| 苍溪县| 东安县| 蒙城县| 雷州市| 科尔| 新昌县| 眉山市| 宝丰县| 林州市| 泰安市| 宁阳县| 灵丘县| 蒙山县| 平远县| 常山县| 射洪县| 城市| 武夷山市| 德格县| 兰西县| 凤凰县| 潢川县| 揭东县| 葵青区| 江山市| 石家庄市| 元谋县| 饶河县| 靖西县| 游戏| 天等县| 万安县| 巴青县| 抚州市| 乐平市| 宁国市|