共用方式為


HOW TO:使用資料來源控制項時保護連接字串

更新:2007 年 11 月

當使用資料來源控制項時,您應集中管理連接字串的位置,將其置於應用程式的 Web.config 檔案中。此優點是雙重的:資料來源控制項會參考組態檔案中之連接字串的名稱,而非將連接字串做為控制項屬性納入;連接字串的集中管理會讓網站管理變得更為容易,這會使得連接字串資訊發生變更時不用重新造訪個別頁面。

在此主題中,您將了解如何使用 Visual Studio 和資料來源控制項,將連接字串置於 Web.config 檔案中,以及如何使用命令列公用程式 Aspnet_regiis.exe,來加密這些連接字串以取得額外安全性階層。

如何使用資料來源控制項將連接字串加入至 Web.config

  1. 在 Visual Studio 的 [設計] 檢視中開啟 .aspx 頁面。

  2. 從 [工具箱] 的 [資料] 資料夾中,將 SqlDataSource 控制項之類的資料來源控制項拖曳至設計介面。

  3. 以滑鼠右鍵按一下控制項,然後按一下 [顯示智慧標籤]。

  4. 在智慧標籤面板中,按一下 [設定資料來源]。

  5. 在 [選擇資料連接] 面板中,按一下 [新增連接]。

  6. 從 [選擇資料來源] 對話方塊上的清單中,選取適當的資料來源,然後按一下 [確定]。

  7. 在 [加入連接] 對話方塊上,指示正確伺服器名稱、使用者名稱和密碼,然後按一下 [確定]。

    您會回到含有連接詳細資料之摘要的 [設定資料來源] 對話方塊。

  8. 按一下 [下一步],再按 [],以將連接字串儲存在 Web.config 檔案中。

    連接字串現在儲存於 Web.config 檔案中,您可以設定控制項的查詢詳細資料。

若要加密儲存在 Web.config 檔中的連接字串資訊

  1. 在 Windows 命令列中,使用下列選項執行 ASP.NET IIS 註冊工具 (Aspnet_regiis.exe):

    • -pe 選項,將字串 "connectionStrings" 傳遞給它以加密 connectionStrings 項目。

    • -app 選項,將應用程式名稱傳遞給它。

    Aspnet_regiis.exe 工具位於 %systemroot%\Microsoft.NET\Framework\versionNumber 資料夾中。

    下列程式碼範例會顯示如何針對名為 SampleApplication 的應用程式加密 Web.config 檔案的 connectionStrings 區段。

    aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"
    

    當命令完成時,您就可以檢視 Web.config 檔的內容。connectionStrings 組態區段將包含加密的資訊,而不是純文字連接字串,如下列程式碼範例所示。

    <configuration>
       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
             <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                      <KeyName>RSA Key
                      </KeyName>
                   </KeyInfo>
                   <CipherData>
                      <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>
    </configuration>
    

    讓命令提示字元保持開啟以便進行稍後的步驟。

  2. 擷取目前的 WindowsIdentity 名稱,判斷執行 ASP.NET 的使用者帳戶或識別。

    下列程式碼範例會顯示一種判斷 WindowsIdentity 名稱的方法。

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
    注意事項:

    根據預設,在 Windows Server 2003 上,ASP.NET 應用程式的模擬會在 Web.config 檔中停用,而執行應用程式的識別是 NETWORK SERVICE 帳戶。在其他版本的 Windows 上,ASP.NET 是在本機 ASPNET 帳戶下執行。

    執行 ASP.NET 的使用者帳戶或識別,必須要有對用來加密和解密 Web.config 檔案區段之加密金鑰的讀取權限。這個程序假設網站設定為使用 Machine.config 檔中所指定的預設 RsaProtectedConfigurationProvider,名為 "RsaProtectedConfigurationProvider"。預設 RsaProtectedConfigurationProvider 所使用的 RSA 金鑰容器,名為 "NetFrameworkConfigurationKey"。

  3. 在命令提示字元中,使用下列選項執行 Aspnet_regiis.exe 工具:

    下列程式碼範例會顯示如何將 "NetFrameworkConfigurationKey" RSA 金鑰容器的存取權授與 NETWORK SERVICE 帳戶。

    aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
    
  4. 若要解密已加密的 Web.config 檔案內容,請使用 -pd 選項執行 aspnet_regiis.exe 工具。除了不指定受保護的組態提供者以外,語法和使用 -pe 選項加密 Web.config 檔案內容一樣。受保護區段的 configProtectionProvider 屬性中會識別適當提供者。

    下列程式碼範例會顯示如何解密 ASP.NET 應用程式 SampleApplication 的 connectionStrings 項目。

    aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"
    

請參閱

其他資源

使用受保護的組態加密組態資訊