SQL Server、Internet 資訊伺服器和ASP.NET 引擎都提供了堅實可靠的安全模型,它們可以很好地一起協同工作。為了確保使用者資料和應用程式的安全,Microsoft 還為每項服務的預設設定設定了相當低的值。
大多數開發人員面臨的挑戰是如何使用SQL Server、IIS 和ASP.NET 在應用程式和資料之間設定適當的信任級別,而不會留下可被別人輕易攻入的安全漏洞。由於涉及三類服務(SQL Server、IIS 和ASP.NET),需要採取三個關鍵的步驟來確保解決方案的安全性。本部分討論一種為Web 應用程式設定足夠權限和信任等級的更常用(且可靠)的方法。
定義DotNetKB 自訂IIS 使用者帳戶
確保Web 應用程式安全性的最安全的方法是定義一個權限有限的自訂用戶,然後對IIS 進行配置,使之能夠在執行您的Web 應用程式時能作為自訂用戶運行。這是相當容易實現的,可以確保訪問您的Web 應用程式的每個訪客都只具有您希望他們擁有的權限。
第一步是產生一個新的Windows 使用者(本例稱為DotNetKB),為其設定一個增強型密碼,然後將其新增至Windows 來賓群組(Guest Windows Group) 中。同時,確保選取Password never expires(密碼永不過期)和User cannot change password(使用者不能更改密碼)複選框。這樣將產生一個權限有限的用戶,在IIS 中運行您的Web 應用程式時,您可以將其用作識別(參見圖1)。
然後,呼叫Internet 資訊伺服器管理員並選擇承載這些網頁的Web 應用程式。在本例中,您可以選擇承載前文所產生的測試頁的Web 應用程式(DotNetKB_WebSite)。在樹狀圖視圖中的Web 應用程式上按滑鼠右鍵,然後從上下文相關選單中選擇Properties...(屬性...)。然後選擇Directory Security(目錄安全)並點擊該對話框Anonymous access and authentication control(匿名存取和驗證控制)部分中的Edit(編輯)按鈕。最後,輸入自訂使用者名稱(DotNetKB),取消選擇Allow IIS to control password(允許IIS 控制密碼)複選框,並輸入該自訂使用者帳戶的密碼。完成所有這些工作之後,按一下OK(確定)按鈕,將這些變更儲存到IIS 配置資料庫中(請參閱圖2)。
[Cut-Page]
此時,IIS 將在一個權限有限的自訂帳戶下運行。任何訪客造訪您應用程式的網頁時,都會以這個自訂使用者身分執行,且只具有該自訂使用者的驗證權限。
授權DotNetKB 使用者帳號存取SQL Server
然後,您需要為該自訂使用者授予存取資料庫(DotNetKB) 的對應權限。為此,您可以使用Microsoft SQL Server 企業管理器或編寫自訂腳本,以建立這樣的使用者並授予其存取特定物件的權限。本文介紹如何使用SQL Server 企業管理器完成此操作。
注意:儘管Visual Studio .NET 2003 具有與SQL Server 相容的許多強大的整合功能,但也不允許從Visual Studio .NET 2003 中輕鬆管理使用者和使用者權限。在大型的組織和團隊中,這些高階任務通常由資料庫管理員完成。 因此,啟動SQL Server 企業管理器之後,您可以依照下列步驟將自訂使用者(DotNetKB) 新增資料庫。
·在左側的樹狀圖視圖中,展開節點以顯示DotNetKB 資料庫。在我的電腦上,樹狀圖視圖的架構如下:Console Root SQL Server Group (LOCAL) (Windows NT) Databases DotNetKB。
·然後,在資料庫下的Users(使用者)節點上按滑鼠右鍵,並選擇New Database User...(新建資料庫使用者...)。顯示Database User Properties - New User(資料庫使用者屬性- 新使用者)對話方塊時,從Login name(登入名稱)下拉方塊中選擇(<新建>)。
·顯示SQL Server Login Properties - New Login(SQL Server 登入屬性- 新登入)對話方塊時,選擇General(一般)選項卡,並在Name(名稱)輸入方塊中輸入DotNetKB。確保選取Windows Authentication(Windows 驗證)單選按鈕,並從Domain(網域)下拉方塊中選擇自訂使用者帳戶所在的電腦的名稱。然後從Database(資料庫)下拉方塊中選擇DotNetKB。
·現在,選擇Databases(資料庫)選項卡,在對話方塊頂部的清單中找到DotNetKB 資料庫並選取它。然後,確保選取對話方塊底部清單中的public(公共)角色。最後,按一下對話方塊底部的OK(確定)按鈕,儲存您的變更。
然後,您需要為DotNetKB 資料庫中的所有預存程序和自訂函數新增執行權限。為此,您只需為public(公共)角色授予權限。您可以將權限授予DotNetKB 用戶,這將使以後的登入(當這些用戶獲得存取DotNetKB 的權限時)更容易執行預存程序,而不需要為每個用戶新增新的權限。
以下是DotNetKB 資料庫中的預存程序和函數授予執行權限的步驟:
·反白顯示樹視圖中DotNetKB 資料庫下的Users(使用者)節點,以顯示此資料庫的使用者清單。找到DotNetKB 使用者並在其上雙擊,開啟Database Users Properties(資料庫使用者屬性)對話方塊。
·反白(選取)public(公用)角色時,按一下Properties...(屬性...)按鈕,開啟Database Role Properties(資料庫角色屬性)對話方塊。然後點選Permissions...(權限...)按鈕,顯示資料庫物件和權限設定清單。
·選取對話方塊頂部Database role(資料庫角色)下拉清單中的public(公共)角色之後,找到為此資料庫定義的所有預存程序和自訂函數(可能需要展開對話方塊才能看到全名),並確保選取各項旁的EXECUTE(執行)複選框。您可能會發現某些系統物件的其他一些複選框也被選中了,請不要更改這些選項。
·最後,設定所有的EXECUTE(執行)權限後,點選OK(確定)按鈕,儲存變更並關閉對話方塊。依序點選OK(確定)按鈕,直到所有對話方塊均關閉。
至此,您已為IIS 建立了自訂用戶,並設定了該用戶在SQL Server 中的對應權限。現在,您需要在ASP.NET Web 專案中進行一個設定更改,確保ASP.NET 使用同一個使用者帳戶執行對SQL Server 的所有呼叫。
設定您的ASP.NET 應用程式以模擬DotNetKB 用戶
為IIS 下運行的ASP.NET Web 應用程式產生堅實可靠的配置的最後一個步驟是:配置ASP.NET Web 應用程序,使之能夠接受來自IIS 的Windows 用戶標識並能用於訪問其他作業系統資源。為此,您只需在web.config 根檔案中輸入一行程式碼。
修改後的web.config 檔案如下所示:
<configuration>
<system.web>
... 其他要素...
<identity impersonate="true"/> <!-- 假設IIS 使用者識別-->
... 其他要素...
</system.web>
</configuration>
請注意,您只需新增元素並將模擬特性設為true(真)。不必輸入使用者帳戶或密碼,因為這些資訊將由IIS 提供。也就是說,即使其他人能夠讀取您的設定文件,他們也無法確定使用哪些識別憑證來執行您的Web 應用程式。
至此,您已產生了自訂用戶,並為其設定了存取SQL Server 和IIS 的對應權限。
此時,IIS 將在一個權限有限的自訂帳戶下運行。任何訪客造訪您應用程式的網頁時,都會以這個自訂使用者身分執行,且只具有該自訂使用者的驗證權限。
授權DotNetKB 使用者帳號存取SQL Server
然後,您需要為該自訂使用者授予存取資料庫(DotNetKB) 的對應權限。為此,您可以使用Microsoft SQL Server 企業管理器或編寫自訂腳本,以建立這樣的使用者並授予其存取特定物件的權限。本文介紹如何使用SQL Server 企業管理器完成此操作。
注意:儘管Visual Studio .NET 2003 具有與SQL Server 相容的許多強大的整合功能,但也不允許從Visual Studio .NET 2003 中輕鬆管理使用者和使用者權限。在大型的組織和團隊中,這些高階任務通常由資料庫管理員完成。 因此,啟動SQL Server 企業管理器之後,您可以依照下列步驟將自訂使用者(DotNetKB) 新增資料庫。
·在左側的樹狀圖視圖中,展開節點以顯示DotNetKB 資料庫。在我的電腦上,樹狀圖視圖的架構如下:Console Root SQL Server Group (LOCAL) (Windows NT) Databases DotNetKB。
·然後,在資料庫下的Users(使用者)節點上按滑鼠右鍵,並選擇New Database User...(新建資料庫使用者...)。顯示Database User Properties - New User(資料庫使用者屬性- 新使用者)對話方塊時,從Login name(登入名稱)下拉方塊中選擇(<新建>)。
·顯示SQL Server Login Properties - New Login(SQL Server 登入屬性- 新登入)對話方塊時,選擇General(一般)選項卡,並在Name(名稱)輸入方塊中輸入DotNetKB。確保選取Windows Authentication(Windows 驗證)單選按鈕,並從Domain(網域)下拉方塊中選擇自訂使用者帳戶所在的電腦的名稱。然後從Database(資料庫)下拉方塊中選擇DotNetKB。
·現在,選擇Databases(資料庫)選項卡,在對話方塊頂部的清單中找到DotNetKB 資料庫並選取它。然後,確保選取對話方塊底部清單中的public(公共)角色。最後,按一下對話方塊底部的OK(確定)按鈕,儲存您的變更。
然後,您需要為DotNetKB 資料庫中的所有預存程序和自訂函數新增執行權限。為此,您只需為public(公共)角色授予權限。您可以將權限授予DotNetKB 用戶,這將使以後的登入(當這些用戶獲得存取DotNetKB 的權限時)更容易執行預存程序,而不需要為每個用戶新增新的權限。
以下是DotNetKB 資料庫中的預存程序和函數授予執行權限的步驟:
·反白顯示樹視圖中DotNetKB 資料庫下的Users(使用者)節點,以顯示此資料庫的使用者清單。找到DotNetKB 使用者並在其上雙擊,開啟Database Users Properties(資料庫使用者屬性)對話方塊。
·反白(選取)public(公用)角色時,按一下Properties...(屬性...)按鈕,開啟Database Role Properties(資料庫角色屬性)對話方塊。然後點選Permissions...(權限...)按鈕,顯示資料庫物件和權限設定清單。
·選取對話方塊頂部Database role(資料庫角色)下拉清單中的public(公共)角色之後,找到為此資料庫定義的所有預存程序和自訂函數(可能需要展開對話方塊才能看到全名),並確保選取各項旁的EXECUTE(執行)複選框。您可能會發現某些系統物件的其他一些複選框也被選中了,請不要更改這些選項。
·最後,設定所有的EXECUTE(執行)權限後,點選OK(確定)按鈕,儲存變更並關閉對話方塊。依序點選OK(確定)按鈕,直到所有對話方塊均關閉。
至此,您已為IIS 建立了自訂用戶,並設定了該用戶在SQL Server 中的對應權限。現在,您需要在ASP.NET Web 專案中進行一個設定更改,確保ASP.NET 使用同一個使用者帳戶執行對SQL Server 的所有呼叫。
設定您的ASP.NET 應用程式以模擬DotNetKB 用戶
為IIS 下運行的ASP.NET Web 應用程式產生堅實可靠的配置的最後一個步驟是:配置ASP.NET Web 應用程序,使之能夠接受來自IIS 的Windows 用戶標識並能用於訪問其他作業系統資源。為此,您只需在web.config 根檔案中輸入一行程式碼。
修改後的web.config 檔案如下所示:
<configuration>
<system.web>
... 其他要素...
<identity impersonate="true"/> <!-- 假設IIS 使用者識別-->
... 其他要素...
</system.web>
</configuration>
請注意,您只需新增元素並將模擬特性設為true(真)。不必輸入使用者帳戶或密碼,因為這些資訊將由IIS 提供。也就是說,即使其他人能夠讀取您的設定文件,他們也無法確定使用哪些識別憑證來執行您的Web 應用程式。
至此,您已產生了自訂用戶,並為其設定了存取SQL Server 和IIS 的對應權限。