国产探花免费观看_亚洲丰满少妇自慰呻吟_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的基本表中,無論用戶通過何種方式更新記錄,都無法跳過觸發器的檢查,因
此使用觸發器實現的安全性是相當高的。但由于在表中只能定義針對手稿刪除和修改的觸發器,不能定義針對查詢的觸發
器,因此,要實現對查詢的存取控制,則要通過中間層存取程序,只有向用戶查詢請示返回特定條件的記錄來實現。


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

圖片精選

主站蜘蛛池模板: 乌拉特中旗| 云和县| 朝阳县| 五华县| 蕲春县| 玉山县| 通榆县| 富源县| 古田县| 津市市| 双柏县| 西城区| 白水县| 宁陵县| 苍南县| 洪湖市| 鄂托克前旗| 崇义县| 宁陕县| 浙江省| 毕节市| 曲松县| 衡山县| 曲水县| 客服| 天气| 清河县| 故城县| 大石桥市| 稷山县| 尉氏县| 烟台市| 吉木萨尔县| 杭州市| 云林县| 平和县| 阿瓦提县| 平邑县| 延川县| 巫山县| 南澳县|