天天看點

SQL Server、IIS和 ASP.NET安全配置

<a href="http://www.webjx.com/server/windows-5808_2.html">http://www.webjx.com/server/windows-5808_2.html</a>

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)。

SQL Server、IIS和 ASP.NET安全配置

  然後,調用 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)。

SQL Server、IIS和 ASP.NET安全配置

此時,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(登入名)下拉框中選擇 (&lt;建立&gt;)。

  ·顯示 SQL Server Login Properties - New Login(SQL Server 登入屬性 - 建立登入)對話框時,選擇 General(正常)頁籤,并在 Name(名稱)輸入框中輸入 DotNetKB。確定選中 Windows Authentication(Windows 驗證)單選按鈕,并從 Domain(域)下拉框中選擇自定義使用者帳戶所在的計算機的名稱。然後從 Database(資料庫)下拉框中選擇 DotNetKB。

  ·現在,選擇 Databases(資料庫)頁籤,在對話框頂部的清單中找到 DotNetKB 資料庫并選中它。然後,確定選中對話框底部清單中的 public(公共)角色。最後,單擊對話框底部的 OK(确定)按鈕,儲存您的更改。

SQL Server、IIS和 ASP.NET安全配置

然後,您需要為 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 檔案如下所示:

  

  &lt;configuration&gt;

    &lt;system.web&gt;

      ... 其他要素 ...

      &lt;identity impersonate="true"/&gt; &lt;!-- 假設 IIS 使用者辨別 --&gt;

    &lt;/system.web&gt;

  &lt;/configuration&gt;

  請注意,您隻需添加 元素并将模拟特性設定為 true(真)。不必輸入使用者帳戶或密碼,因為這些資訊将由 IIS 提供。也就是說,即使其他人能夠讀取您的配置檔案,他們也無法确定使用哪些辨別憑據來執行您的 Web 應用程式。

  至此,您已生成了自定義使用者,并為其設定了通路 SQL Server 和 IIS 的相應權限。