2014年2月26日 星期三

[SQL Server 2008R2][SSRS] 報表安全性設定(身份認證模式)

在身份驗證方面,除了與 Windows 帳號驗證緊密結合之外,SSRS 2008 中也提供了彈性的自訂驗證設定;至於權限授權方面則是採取角色基礎的安全管理模式,可將安全性角色以及報表物件作彈性的結合。

目前 SSRS 內建兩種驗證模組,分別是 Windows 驗證延伸模組以及自訂延伸模組。其中 Windows 驗證延伸模組可支援多種驗證類型,包含:RSWindowsNegotiate、RSWindowsKerberos、RSWindowsNTLM 及 RSWindowsBasic,每一個驗證類型都可以個別開啟或關閉,因此,報表伺服器可以開啟複數種 Windows 驗證類型。

參考:
http://technet.microsoft.com/zh-tw/library/bb283249.aspx

設定 Windows 整合驗證

SSRS 預設是使用 Negotiate 驗證以及 NTLM 驗證  ( Windows 整合模式 ),報表伺服器管理員不需額外設定即可使用此種驗證模式。( IE 不直接支援 Kerberos 驗證類型 )
整合式安全性的設定步驟如下:

在文字編輯器中開啟 RSReportServer.config ( 預設的位置在 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer )。尋找 "<Authentication>" 區段。如果報表伺服器的服務帳戶是 NetworkService 或 LocalSystem 時 RSReportServer.config 檔就會包含 RSWindowsNegotiate 設定。否則,就會使用 RSWindowsNTLM 設定。如果您的應用程式只使用 Kerberos 驗證,您可以加入 RSWindowsKerberos。


當報表伺服器服務帳戶是 NetworkService 或 LocalSystem 時

<Authentication>
      <AuthenticationTypes>
             <RSWindowsNegotiate />
      </AuthenticationTypes>
      <EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>


當報表伺服器服務帳戶不是 NetworkService 或 LocalSystem 時

<Authentication>
      <AuthenticationTypes>
             <RSWindowsNTLM />
      </AuthenticationTypes>
      <EnableAuthPersistence>true</EnableAuthPersistence>
<Authentication>


指定用於 Windows 整合式安全性的所有安全性封裝

      <AuthenticationTypes>
             <RSWindowsNegotiate />
             <RSWindowsKerberos />
             <RSWindowsNTLM />
      </AuthenticationTypes>


針對不支援 Kerberos 的部署指定 NTLM,或是暫時解決 Kerberos 驗證錯誤

      <AuthenticationTypes>
             <RSWindowsNTLM />
      </AuthenticationTypes>

  • ASP.NET 必須設定 Windows 驗證。 根據預設,報表伺服器 Web 服務和報表管理員的 Web.config 檔案 ( 預設的位置在 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer )會包括 設定 如果您將它變更為 ,Reporting Services 的 Windows 驗證將會失敗。
  • 報表伺服器 Web 服務和報表管理員的 Web.config 檔案必須有設定
  • 用戶端應用程式或瀏覽器必須支援 Windows 整合式安全性。
重新啟動所有報表伺服器,清除目前開啟的任何工作階段。

參考:



設定基本驗證

使用基本驗證時,瀏覽器會要求使用者輸入使用者名稱與密碼。這項資訊會透過 Base64 編碼方式來編碼的 HTTP 加以傳輸。由於密碼會以明碼方式傳送,可配合使用 SSL 進行加密。當設定為基本驗證之後,此時資料來源的連接屬性時,將無法選取「Windows 整合式安全性」的選項。

在文字編輯器中開啟 RSReportServer.config ( 預設的位置在 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer )。尋找 <Authentication> 區段。

若要啟動基本驗證

<Authentication>
      <AuthenticationTypes>
             <RSWindowsBasic>
                   <LogonMethod>3</LogonMethod>
                   <Realm></Realm>
                   <DefaultDomain></DefaultDomain>
             </RSWindowsBasic>
      </AuthenticationTypes>
      <EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>


若所有元素都使用預設值,可以把語法簡化如下

      <AuthenticationTypes>
             <RSWindowsBasic/>
      </AuthenticationTypes>


內可以同時啟用其他 Windows 整合驗證類型,但不能與 Custom 類型共用。另外,如果使用者是使用 Safari 瀏覽器,則不能同時啟用多個驗證類型。

報表產生器3.0是利用 ClickOnce 技術,因為它不支援基本驗證,所以,當報表伺服器設定為基本驗證,ClickOnece 應用程式啟動器將無法通過驗證檢查。必須將報表產生器程式檔案設為匿名存取,才能讓 ClickOnce 擷取檔案時略過驗證檢查。

在基本驗證的報表伺服器設定報表產生器存取的步驟如下:
  • 在 ReportBuilder 之下建立 bin 資料夾 (預設位置 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\ReportBuilder )。
  • 將下列組件從 ReportServer\Bin 資料夾複製到 ReportBuilder\BIN 資料夾:
    Microsoft.ReportingServices.Diagnostics.dll
    Microsoft.ReportingServices.Interfaces.dll
    ReportingServicesAppDomainManager.dll
    RSHttpRuntime.dll
  • 建立一個 Web.config 檔,儲存到 ReportBuilder\bin 資料夾下,內容如下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authentication mode="Windows" />
<identity impersonate="true " userName="username" password="password"/>
</system.web>
</configuration>
如果包含 Web.config 檔,驗證模式必須設定為 Windows。
Identity impersonate 可以是 True False


  • 如果您不希望 ASP.NET 讀取安全性 Token,請將它設定為 False 此要求將會在報表伺服器服務的安全性內容中執行。


  • 如果您希望 ASP.NET 從主機層級讀取安全性 Token,請將它設定為 True 如果您將它設定為 True,也必須指定 userNamepassword 來指派匿名帳戶。 您所指定的認證將會決定要求發出所在的安全性內容


  • 開啟 RSReportServer.config 檔案,並在 Services 區段中尋找 IsReportManagerEnabled,然後在它的下方加入以下設定:

    <IsReportBuilderAnonymousAccessEnabled>True</IsReportBuilderAnonymousAccessEnabled>

    重新啟動報表伺服器。

    參考:




    設定表單驗證

    除了 Windows 驗證之外,為了配合企業的安全性需求,SSRS 允許開發人員實作自訂驗證延伸模組,利用表單驗證或是使用單一簽入,以自訂的驗證延申模組取代預設的 Windows 驗證延伸模組,並控制授與外部使用者存取報表伺服器的權限。

    自訂表單驗證如下:

    在文字編輯器中開啟 RSReportServer.config ( 預設的位置在 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer )。尋找
    <Authentication>
          <AuthenticationTypes>
                 <Custom />
          </AuthenticationTypes>
          <EnableAuthPersistence>true</EnableAuthPersistence>
    </Authentication>

    開啟報表伺服器的 Web.config 檔。 根據預設,它位於 C: \Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\ReportServer。

    • 尋找 authentication mode 並將其設定為 Forms
    • 尋找 identity impersonate 並將其設定為 False



    開啟報表管理員的 Web.config 檔。 根據預設,它位於 C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\ReportServer。
    • 尋找 authentication mode 並將其設定為 Forms
    • 尋找 identity impersonate 並將其設定為 False
    將 <PassThroughCookies> 元素加入至 RSReportServer.config 檔中的報表管理員組態設定,藉以讓報表管理員將其他 Cookie 傳送至報表伺服器。 當單一登入驗證方案不僅需要報表伺服器驗證 Cookie,同時也需要協力廠商驗證系統提供的 Cookie 時,傳送其他 Cookie 這項功能就顯得非常有用。


    <UI>
       <CustomAuthenticationUI>
          ...
          <PassThroughCookies>
             <PassThroughCookie>cookiename1</PassThroughCookie>
             <PassThroughCookie>cookiename2</PassThroughCookie>
          </PassThroughCookies>
       </CustomAuthenticationUI>
          ...
    </UI>

    參考:

    沒有留言: