在原本的報表資料來源中,想設定為[Windows 驗證],而不是存放固定的帳號密碼。然後設定了[執行帳號](Execution Account),準備讓訂閱的執行動作,可以透過此執行帳號,然後傳遞 Windows 帳號及驗證連線後端的資料來源,進而產生報表。但是,目前發現一旦設定好[執行帳號](Execution Account)後,反而報表寄送作業會失敗。
一開始的設定:
1) [執行帳號](Execution Account):
1. 為 Reporting Services 的 Windows 服務帳號
2. 已經加入Reporting Manager全站台的系統管理員角色中
3. 已經加入Report Manager主目錄的的內容管理員角色中
4. 此帳號擁有資料來源的 SQL Server 上為 SYSADMIN 角色權限
錯誤訊息如下:
library!ReportServer_0-11!b30!09/01/2011-17:57:04:: Call to TestConnectForItemDataSourceAction(/DB/SL-Windows 整合式安全性).
processing!ReportServer_0-11!b30!09/01/2011-17:57:04:: e ERROR: Throwing Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: , Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: 無法與資料來源 'SL-Windows 整合式安全性' 建立連接。 ---> System.Data.SqlClient.SqlException: 使用者 'NT AUTHORITY\ANONYMOUS LOGON' 的登入失敗。è代表遠端伺服器並沒有接受到 Reporting Serviecs 送出的帳號密碼
於 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
於 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
於 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
於 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
於 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
經過調整後,目前已經可以正常使用[自動執行帳號]進行訂閱及發送訂閱工作:
1) 因為使用 HTTPS 存取 Reporting Services,因此必須註冊 HTTPS 的 SPN 在 AD 中,如:
HTTPS://{URL}:443 sql_mgr
2) 資料來源部分:選擇不需要驗證即可通過測試以及進行訂閱,代表設定的[自動執行帳號] 有效
3) 訂閱報表測試:經啟動 SQL Server Agent 服務後進行測試,訂閱有正常發送
使用[自動執行帳號]時,搭配[Windows 整合式安全性]的注意事項:
1) 當存取的資料來源是遠端的 SQL Server,則可能會遇到Double Hop驗證問題,因此建議在Reporting Services 啟動 Kerberos 驗證:
步驟:
- 將 Reporting Services 服務帳號改成 Domain User Account (並擁有 Local Administrator 權限)
- 使用 setspn 工具註冊 Reporting Services 服務帳號的 Service Principal Name,格式如下:
Setspn -a http/<computer-name>.<domain-name>:<port> <domain-user-account>
- 確認 RSReportServer.config 中的 <AuthenticationTypes> 是否有啟用 Kerberos 驗證
如何:為報表伺服器註冊服務主要名稱 (SPN)
http://msdn.microsoft.com/zh-tw/library/cc281382.aspx
如何:為 Reporting Services 設定服務帳戶
http://msdn.microsoft.com/zh-tw/library/bb522727.aspx
如何:在 Reporting Services 中設定 Windows 驗證
http://msdn.microsoft.com/zh-tw/library/cc281253.aspx
Configuring Authentication in Reporting Services
http://technet.microsoft.com/en-us/library/bb283249.aspx
確認自動執行帳號是用來執行排程作業使用或沒有使用者認證時套用,但是目前的資料來源設定為 Windows 驗證,因此預設使用者瀏覽報表時,是以自己的認證透過 Reporting Services 傳遞至資料來源的 SQL Server中,請參考以下說明:
- 設定自動執行帳戶。在排程作業期間或沒有使用者認證時,此帳戶用於遠端連接。
2. 使用者 'NT AUTHORITY\ANONYMOUS LOGON' 的登入失敗
傳遞認證跨越多部電腦的連接時,會發生此錯誤。如果是使用 Windows 驗證,而且未啟用 Kerberos 版本 5 通訊協定,則在認證傳遞跨越一個以上的電腦連接時,就會發生此錯誤。若要解決此錯誤,請考慮使用預存認證或提示認證。如需有關如何解決此問題的詳細資訊,請參閱<指定報表資料來源的認證和連接資訊>。
如果需要多個連接來完成從用戶端電腦至外部報表資料來源的往返,請從下列策略中選擇,讓連接能夠成功。
- 在網域中啟用模擬和委派功能,使認證能夠無限制地委派給其他電腦。
- 使用預存認證或提示認證,即可查詢報表資料的外部資料來源。認證可以是 Windows 網域帳戶或資料庫登入。
- Windows 整合式安全性
當使用 [Windows 整合式安全性] 選項時,報表伺服器會將存取報表之使用者的安全性 Token,傳遞至主控外部資料來源的伺服器。在此情況下,不會提示使用者輸入使用者名稱或密碼。如果模擬和委派功能已啟用,建議使用此方法。如果這些功能未啟用,只有當所有想要存取的伺服器都位於相同電腦上時,才應該使用此方法。
4. 無認證
可以設定資料來源連接,以使用無認證。Microsoft 建議永遠利用認證來存取資料來源;不建議使用無認證。不過,在下列情況下,可以選擇使用無認證來執行報表:
- 遠端資料來源不需要認證。
- 認證會在連接字串中傳遞 (僅建議用於保護連接的安全)。
- 報表是使用父報表之認證的子報表。
在這些狀況下,報表伺服器會使用必須事先定義的自動執行帳戶連接到遠端資料來源。報表伺服器未利用它的服務認證連接到遠端伺服器,因此,必須指定帳戶,讓報表伺服器能夠用於進行連接。如需有關建立此帳戶的詳細資訊,請參閱<設定自動執行帳戶>。
- 自動執行帳戶說明:Reporting Services 提供了一個特殊帳戶,它是用於自動報表處理和透過網路傳送連接要求。以下是使用此帳戶的方式:
- 透過網路針對使用資料庫驗證的報表傳送連接要求,或是連接到不需要或不使用驗證的外部報表資料來源。如需詳細資訊,請參閱《SQL Server 線上叢書》中的<指定報表資料來源的認證和連接資訊>。
- 擷取報表中使用的外部影像檔。如果想要使用影像檔而該檔案無法透過匿名存取來存取,則可以設定自動報表處理帳戶,並授與該帳戶存取檔案的權限。如需有關用來擷取影像之自動執行帳戶的詳細資訊,請參閱《SQL Server 線上叢書》中的<影像 (報表產生器 3.0 和 SSRS)>。
自動報表處理是指由事件觸發 (不論是排程驅動事件或資料重新整理事件),而非由使用者要求觸發的任何報表執行處理。報表伺服器使用自動報表處理帳戶,來登入主控外部資料來源的電腦。因為報表伺服器服務帳戶的認證絕不會用來連接到其他電腦,所以需要此帳戶。
- 資料來源組態和網路連接
下表顯示如何為認證類型和資料處理延伸模組的特定組合進行連接。如果要使用自訂資料處理延伸模組,請參閱<為自訂資料處理延伸模組指定連接>。
類型 |
網路連接的內容 |
資料來源類型 (SQL Server、Oracle、ODBC、OLE DB、Analysis Services、XML、SAP NetWeaver BI、Hyperion Essbase) |
整合式安全性 |
模擬目前的使用者 |
針對所有資料來源類型,利用目前的使用者帳戶來連接。 |
Windows 認證 |
模擬指定的使用者 |
若為 SQL Server、Oracle、ODBC 和 OLE DB:使用模擬使用者帳戶進行連接。 Analysis Services:從 SQL ServerReporting Services Service Pack 2 開始,支援在 Windows Server 2003 上使用網域帳戶。不支援 Windows XP 和更舊版的作業系統。 |
資料庫認證 |
模擬自動執行帳戶或服務帳戶。 (利用服務識別傳送連接要求時,Reporting Services 會移除管理員權限)。 |
若為 SQL Server、Oracle、ODBC 和 OLE DB: 將使用者名稱和密碼附加至連接字串。 若為 Analysis Services: 使用 TCP/IP 通訊協定時,連接會成功,否則會失敗。 如果是 XML: 使用資料庫認證時,會使報表伺服器上的連接失敗。 |
無 |
模擬自動執行帳戶。 |
若為 SQL Server、Oracle、ODBC 和 OLE DB: 使用連接字串中定義的認證。如果未定義自動執行帳戶,報表伺服器上的連接會失敗。 若為 Analysis Services: 指定無認證或定義自動執行帳戶時,永遠會使連接失敗。 如果是 XML: 如果已定義自動執行帳戶,則以匿名使用者連接;否則會使連接失敗。 |
留言列表