共用方式為


安全性延伸模組範例

更新: 2005 年 12 月 5 日

CustomSecurity 範例安全性延伸模組會將「表單驗證」與 SQL Server 搭配使用,以提供使用 Reporting Services 的自訂安全性模組。以 Itanium 為基礎的作業系統不支援這個範例。

安裝期間不會自動安裝 SQL Server 範例。如需有關如何安裝範例的指示,請參閱<安裝範例>。

ms160724.security(zh-tw,SQL.90).gif安全性注意事項:
安全性延伸模組範例不應在實際執行環境中部署和測試。一般不建議在移轉至不同的安全性延伸模組之後,再還原至「Windows 驗證」。如果執行此動作,則在嘗試存取具有自訂安全性描述項 (但沒有「Windows 驗證」安全性描述項) 之報表伺服器資料庫中的項目時,可能會發生錯誤。若要回復原狀,您必須重新安裝 Reporting Services,並為 Windows 使用者手動重新套用任何以角色為基礎的安全性。使用此範例之前,應備份組態檔。
ms160724.note(zh-tw,SQL.90).gif重要事項:
範例只供教育目的之用。它們不能用於實際執行環境,而且從來沒有在實際執行環境中測試過。Microsoft 不提供對這些範例的技術支援。若沒有系統管理員的權限,就不應該在實際 SQL Server 資料庫或報表伺服器上,連接或使用範例應用程式及組件。

需求

您應該熟悉 Visual Studio 和 Visual C# 或 Visual Basic,而且您必須安裝下列應用程式,才能執行 CustomSecurity 範例:

  • Microsoft Visual Studio 2005 或相容的開發環境 (適用於檢視專案檔案)。
  • Microsoft .NET Framework 2.0 版。
  • SQL Server 2005,包括 Reporting Services。
  • Reporting Services 範例。
  • 如果您計劃使用範例延伸模組,將其他資料處理功能加到您的伺服器,您必須具有在網路上存取報表伺服器的權限。

位置

依預設,此範例位於 Reporting Services 範例目錄的 [Extension Samples\FormsAuthentication Sample] 子目錄:

C:\Program Files\Microsoft SQL Server\90\Samples\Reporting Services\Extension Samples\FormsAuthentication Sample

建立範例

您必須先編譯及安裝延伸模組。此程序假設您已將 Reporting Services 安裝至預設位置 C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services。這一位置在此主題的後續部分中稱為 <install>。

如果您尚未建立強式名稱金鑰檔,請利用下列指示產生金鑰檔。

若要產生強式名稱金鑰檔

  1. 開啟 Microsoft Visual Studio 2005 命令提示字元。按一下 [開始],依序指向 [程式集] 和 [Microsoft .NET Framework SDK 2.0],然後按一下 [SDK 命令提示字元]。

    -- 或 --

    開啟 Microsoft .NET Framework 命令提示字元。按一下 [開始],依序指向 [所有程式] 和 [Microsoft .NET Framework SDK 2.0],然後按一下 [SDK 命令提示字元]。

  2. 使用變更目錄命令 (CD),將命令提示字元視窗的現行目錄切換到範例的安裝資料夾。

    ms160724.note(zh-tw,SQL.90).gif附註:
    若要判斷範例所在的資料夾,按一下 [開始] 按鈕,依序指向 [所有程式]、[Microsoft SQL Server] 和 [文件集和教學課程],然後按一下 [範例目錄]。如果是使用預設安裝位置,則範例位於 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples。
  3. 在命令提示字元中,執行下列其中一個命令來產生金鑰檔:

    sn -k SampleKey.snk

    ms160724.note(zh-tw,SQL.90).gif重要事項:
    如需有關強式名稱金鑰組的詳細資訊,請參閱 MSDN 中 .NET Development Center 中的<Security Briefs: Strong Names and Security in the .NET Framework>。

若要使用 Visual Studio 2005 編譯範例

  1. 在 Microsoft Visual Studio 2005 中開啟 CustomSecurity.sln。如果已將範例安裝至預設位置,則可以在 C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\Samples\Extensions 中存取它。

  2. 在 [方案總管] 中,選取 [CustomSecurity] 專案。

  3. [專案] 功能表上,按一下 [加入參考]

    此時會開啟 [加入參考] 對話方塊。

  4. 按一下 [.NET] 索引標籤。

  5. 按一下 [瀏覽],然後在本機磁碟機中尋找 Microsoft.ReportingServices.Interfaces。依預設,該組件位於 <install>\ReportServer\bin 目錄。按一下 [確定]

    選取的參考即會加入您的專案中。

  6. [建立] 功能表上,按一下 [建置方案]

部署範例

編譯範例之後,必須將 DLL 和 ASPX 頁面複製到適當的子目錄中,以用於「報表伺服器」安裝。

若要部署範例

  1. 將 Microsoft.Samples.ReportingServices.CustomSecurity.dll 和 Microsoft.Samples.ReportingServices.CustomSecurity.pdb 複製到 <install>\ReportServer\bin 目錄。

  2. 將 Microsoft.Samples.ReportingServices.CustomSecurity.dll 和 Microsoft.Samples.ReportingServices.CustomSecurity.pdb 複製到 <install>\ReportManager\bin 目錄。

  3. 將 Logon.aspx 頁面複製到 <install>\ReportServer 目錄,並將 UILogon.aspx 頁面複製到 <install>\ReportManager\Pages 目錄。

將組件和登入頁面複製到伺服器之後,需要對「報表伺服器」和「報表管理員」組態檔進行一些修改。

ms160724.note(zh-tw,SQL.90).gif重要事項:
在進行變更之前,請先建立所有組態檔的備份副本。

若要修改 RSReportServer.config 檔

  1. 使用 Visual Studio 2005 或簡單的文字編輯器 (如「記事本」) 開啟 RSReportServer.config 檔案。RSReportServer.config 位於 <install>\ReportServer 目錄中。

  2. 找到 <Security> 和 <Authentication> 元素之後,依如下所示修改設定:

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    <Authentication>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,
     Microsoft.Samples.ReportingServices.CustomSecurity" />
    </Authentication>
    

    如需有關 .NET Framework 安全性與 Reporting Services 的詳細資訊,請參閱<Understanding Code Access Security in Reporting Services>。

若要修改 RSWebApplication.config 檔

  1. 接下來,需要開啟 <install>\ReportManager 目錄中的「報表管理員」組態檔 RSWebApplication.config。

  2. 找到 <UI> 元素,並如下所示對其進行更新:

    <UI>
       <CustomAuthenticationUI>
          <loginUrl>/Pages/UILogon.aspx</loginUrl>
             <UseSSL>True</UseSSL>
       </CustomAuthenticationUI>
       <ReportServerUrl>http://<server>/ReportServer</ReportServerUrl>
    </UI>
    
ms160724.note(zh-tw,SQL.90).gif附註:
如果是在未安裝「安全通訊端層 (SSL)」憑證的開發環境中執行範例安全性延伸模組,則必須在先前的組態項目中將 <UseSSL> 元素的值變更為 [False]。建議在將 Reporting Services 與「表單驗證」結合時,永遠使用 SSL。

您將需要加入自訂安全性延伸模組的程式碼群組,授與延伸模組的 FullTrust 權限。您可以藉由將程式碼群組加入 rssrvpolicy.config 檔來完成此動作。

若要修改 RSSrvPolicy.config 檔

  1. 開啟 <install>\ReportServer 目錄中的 rssrvpolicy.config 檔。

  2. 在安全性原則檔案中尋找現有的程式碼群組,它具有下面所指出的 URL 成員資格 $CodeGen,然後如下所示地在 rssrvpolicy.config 中加入一個項目

    ms160724.note(zh-tw,SQL.90).gif附註:
    如果您已安裝 Analysis Services,則必須將 Url="C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll 變更為 MSSQL.3
    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       Name="SecurityExtensionCodeGroup"
       Description="Code group for the sample security extension"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll"
       />
    </CodeGroup>
    
ms160724.note(zh-tw,SQL.90).gif附註:
為了簡化,「表單驗證範例」會採用弱式名稱,且在安全性原則檔中只需簡單的 URL 成員資格項目。在實際執行安全性延伸模組的實作中,應建立強式名稱組件,並在加入組件的安全性原則時使用強式名稱成員資格條件。如需有關強式名稱組件的詳細資訊,請參閱 MSDN 上的<Creating and Using Strong-Named Assemblies>主題。

接下來,您將需要增加「報表管理員」原則檔中「我的電腦」程式碼群組的權限。

若要修改 RSMgrPolicy.config 檔

  1. 開啟 <install>\ReportManager 目錄中的「報表管理員」原則檔 rsmgrpolicy.config。

  2. 在 rsmgrpolicy.config 中找到下列程式碼群組,並將 PermissionSetName 屬性由 Execution 變更為 FullTrust,如下所示:

    <CodeGroup 
            class="FirstMatchCodeGroup" 
            version="1" 
            PermissionSetName="FullTrust"
            Description="This code group grants MyComputer code Execution 
    permission. ">
        <IMembershipCondition 
                class="ZoneMembershipCondition"
                version="1"
                Zone="MyComputer" />
    

若要使用「表單驗證」,需要修改「報表管理員」和「報表伺服器」的 Web.config 檔,以變更驗證模式並停用模擬。

若要修改報表伺服器的 Web.config 檔

  1. 在文字編輯器中開啟 Web.config 檔。依預設,該檔案位於 <install>\ReportServer 目錄。

  2. 找到 <identity> 元素,並將 Impersonate 屬性設定為 false

    <identity impersonate="false" />
    
  3. 找到 <authentication> 元素,並將 Mode 屬性變更為 Forms

  4. 加入下列 <forms> 元素作為 <authentication> 元素的子項,並如下設定 loginUrlnametimeoutpath 屬性:

    <authentication mode="Forms">
       <forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="60" 
                   path="/"></forms>
       </authentication>
    
  5. 將下列 <authorization> 元素直接加入 <authentication> 元素中之後。

    <authorization> 
       <deny users="?" />
    </authorization>
    

    這將拒絕未驗證之使用者存取報表伺服器的權限。先前建立之 <authentication> 元素的 loginUrl 屬性,會將未驗證的要求重新導向至 Logon.aspx 頁面。

若要修改報表管理員的 Web.config 檔

  1. 開啟報表管理員的 Web.config 檔。其位於 <install>\ReportManager 目錄。

  2. 找到 <identity impersonate= "true" /> 區段之後,將它變更成如下,來停用模擬:<identity impersonate="false" />

設定匿名驗證

依預設,Windows 使用者群組 Guests 包括 IUSR_computername 帳戶。此帳戶用於初始本機登入,以及檢視 Logon.aspx 頁面。若要支援「表單驗證」,必須啟用 ReportServer 虛擬目錄的匿名存取。依預設,會停用匿名存取。

若要啟用匿名驗證

  1. [Internet Information Services] 中,選取 ReportServer 虛擬目錄 (通常是「預設網站」的成員),並開啟其 [屬性] 索引標籤。

  2. 按一下 [目錄安全性] 索引標籤。

  3. [匿名存取和驗證控制] 區段中,按一下 [編輯]

    [驗證方法] 對話方塊隨即出現。

  4. 選取 [匿名存取] 核取方塊。

  5. 按一下 [確定]

    針對「報表」虛擬目錄,重複上述步驟。

建立 UserAccounts 資料庫

該範例包括資料庫指令碼 createuserstore.sql,可讓您為 SQL Server 資料庫中的「表單」範例設定使用者存放區。

若要建立 UserAccounts 資料庫

  1. 開啟 SQL Server Management Studio,然後連接到 SQL Server 的本機執行個體。

  2. 找到 createuserstore.sql SQL 指令碼檔案。該指令碼檔案包含於範例專案檔案中。

  3. 往指令碼結尾處找到 "LocalMachine" 之後,以您自己的電腦名稱來取代它。對於 Windows 2003 使用者,請將 LocalMachine\ASPNETNT AUTHORITY\NETWORK SERVICE 取代 (除非是在 IIS 5 相容模式下)。

  4. 執行查詢,以建立 [UserAccounts] 資料庫。

  5. 結束 SQL Server Management Studio。

測試範例

下列程序會測試範例延伸模組。您將註冊管理員使用者,將使用者名稱、密碼雜湊和 Salt 值加入 [UserAccounts] 資料庫中的 users 資料表。還將要求您在「報表伺服器」組態檔中輸入該使用者名稱。然後,您將以同一使用者身分登入,以確定密碼驗證常式運作正確,且報表伺服器正確載入延伸模組組件。

若要建立報表專案

  1. 從命令提示字元執行 Iisreset.exe,以重新啟動 IIS。

  2. 開啟報表管理員。您可以從 Reporting Services 程式功能表,或透過從瀏覽器存取「報表」虛擬目錄,來執行此動作。

  3. 輸入使用者名稱和密碼,並按一下 [註冊使用者],以將使用者加入 accounts 資料庫中。

  4. 開啟 RSReportServer.config 檔。找到 <Security> 元素,並加入先前註冊的使用者名稱,如下所示:

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    
  5. 返回 UILogon.aspx 頁面,重新輸入使用者名稱和密碼,然後按一下 [登入]

您應具有「報表管理員」和報表伺服器不受限制的存取權。建立的管理員使用者與本機電腦上內建的管理員帳戶具有同等的報表伺服器權限。在此範例中,您可以只將一個使用者指定為管理員。擁有內建管理員帳戶後,即可註冊其他使用者並為他們指派報表伺服器上的角色。

ms160724.note(zh-tw,SQL.90).gif附註:
您應將管理員使用者加入報表伺服器的官方「系統管理員」和「內容管理員」(根資料夾) 角色。這可防止報表伺服器資料庫中存在空的安全性描述項。如需有關「系統管理員」和「內容管理員」角色的詳細資訊,請參閱<預先定義的角色概觀>。

將 Web 服務與自訂安全性搭配使用

您可以將 Web 服務 API 與「表單驗證」搭配使用,如同與「Windows 驗證」搭配使用一樣。不過,您必須在 Web 服務程式碼中呼叫 LogonUser,並傳遞目前使用者的認證。此外,您的 Web 服務用戶端不會從 Internet Explorer 或其他 Web 瀏覽器提供之自動 Cookie 管理中獲得好處。您必須擴充 Microsoft.ReportingServices Proxy 類別,以包含 Cookie 管理。這可以透過覆寫 Web 服務類別的 GetWebRequestGetWebResponse 方法來完成。

偵錯範例延伸模組

在偵錯工具中執行範例延伸模組,不僅是疑難排解可能遇到之困難的好方法,同時也是逐步執行程式碼並查看所發生之報表伺服器驗證和授權處理的有效方法。

Microsoft .NET Framework 提供數個偵錯工具,可以協助您分析範例程式碼。下列程序使用 Visual Studio 2005 來進行上一個範例的偵錯。

若要偵錯表單驗證範例程式碼

  1. 啟動 Visual Studio,然後在測試報表伺服器上開啟 CustomSecurity.sln。

  2. 開啟 Internet Explorer,並導覽到「報表管理員」,同時使範例程式碼在 Visual Studio 中繼續處於開啟狀態。

  3. 切換到 Visual Studio,並在自訂安全性延伸模組專案程式碼中設定一些中斷點。

  4. 延伸模組專案仍為使用中視窗時,按一下 [偵錯] 功能表的 [處理]

    [處理] 對話方塊隨即開啟。

  5. 從處理序清單中,選取 Aspnet_wp.exe 處理序 (或者,如果在 IIS 6.0 上部署應用程式則選取 W3wp.exe),然後按一下 [附加]

  6. [附加到處理序] 對話方塊中,選取 [Common Language Runtime] 程式類型,然後按一下 [確定]。為了提升偵錯效能,請確定選取的程式類型不是 [原生]

  7. 範例執行時會顯示登入表單。將使用者認證輸入至登入表單,然後按一下 [登入] 按鈕。

    每當在處理期間遇到中斷點時,偵錯程式將在該點停止執行。

  8. 使用 F11 鍵逐步執行程式碼。如需有關使用 Visual Studio 進行偵錯的詳細資訊,請參閱 Visual Studio 2005 文件集。

ms160724.note(zh-tw,SQL.90).gif附註:
這種偵錯方式需要大量的資源和處理器時間。如果您遇到困難,請關閉 Visual Studio 並重設 IIS,然後透過將 CustomSecurity 方案附加至 ASP.NET 工作者處理序並登入「報表管理員」,以重新開始。

移除範例延伸模組

雖然一般不建議在測試範例之後還原為「Windows 驗證」,但仍可以這樣做。

若要還原為 Windows 安全性

  1. 從備份副本還原下列檔案:Web.config、RSReportServer.config 和 RSWebApplication.config。這會將報表伺服器的驗證和授權方法設定為預設 Windows 安全性。還會移除您在「報表伺服器」或「報表管理員」組態檔中為延伸模組建立的任何項目。

  2. 停用報表伺服器虛擬目錄之 Internet Information Services (IIS) 中的匿名存取。

移除組態資訊之後,您的安全性延伸模組無法再用於報表伺服器。您不必移除在範例安全性延伸模組下執行報表伺服器期間所建立的任何安全性描述項。啟用「Windows 驗證」時,報表伺服器會自動將 System Administrator 角色指派給裝載報表伺服器之電腦上的 BUILTIN\Administrators 群組。不過,必須為 Windows 使用者手動重新套用任何以角色為基礎的安全性。

請注意,一般不建議在移轉至不同的安全性延伸模組之後,再還原至「Windows 驗證」。如果執行此動作,則在嘗試存取具有自訂安全性描述項 (但沒有「Windows 驗證」安全性描述項) 之報表伺服器資料庫中的項目時,可能會發生錯誤。

請參閱

工作

SQL Server Reporting Services 範例

其他資源

延伸模組範例 (Reporting Services)
Implementing a Security Extension

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2005 年 12 月 5 日

變更的內容:
  • 已變更產生金鑰檔的指示,包括金鑰檔的名稱和位置。