SSRS 執行報表發生:使用者資料來源認證錯誤

部屬報表後,若發現以下錯誤:

 

無法完成目前的動作。使用者資料來源認證不符合執行這份報表或共用資料集的需求。可能是使用者資料來源認證未儲存在報表伺服器資料庫中,或使用者資料來源設定為不需要認證卻未指定自動執行帳戶。 (rsInvalidDataSourceCredentialSetting)

這代表報表本身沒有足夠的權限可以存取資料庫。

 

這裡很容易造成誤解,因為我們在 VS 2017 報表中,已經指定資料來源,並且也可以正常的測試運作成功,但部屬之後就會出現上面的問題。

問題的原因應該是部屬時候,並沒有正確的指定報表連線方式,因此預設是不需要認證。

解決方式如下:

  1. 指定報表點選【…】,在 context menu 中點選【管理】

  1. 點選【資料來源】,將之改為【使用下列認證】。並且輸入正確的SQL 登入帳密集可。

可以點選【測試連線】判斷是否輸入正確。

開發第一張 SQL Server Reporting Service 報表

要透過 Visual Studio 才可以進行報表開發,因此必須要下載與安裝 SSDTSql Server Data Tools,判斷條件很簡單,如果 VS 2017 沒有 BI Template 救代表需要下載了。

 

點選 VS 2017 版本,並且勾選 Sql Server Reporting Services

安裝完畢後,開啟 VS 2017,依據 建立基本資料表報表 (SSRS 教學課程)

基本上依據此份文件教學就可以完成基本第一張報表。

 

簡單說明幾個項目:

  1. 匯入 AdventureWorks2014 資料庫

Sql Server docker image,因此這裡必須要執行 copy host file to docker 方式將下載的資料庫備份匯入:

docker cp .\[host]\[filename] [dockerid]:/[docker]/[folder]

之後就可以用 SSMS 匯入

  1. 報表資料的視窗有時候會不見,這時候可以用 hotkey 快速呼叫(不用到檢視中慢慢找): ctrl+alt+D

  1. 透過部署專案就可以直接發佈到 report server,這裡要說明一下幾個網址的差異

發佈網址(點選 專案->屬性 就可以看到):

可以看到 reportserver 是發佈網址

執行報表網址則是 reports

安裝 SQL Server 2017 Linux Docker 與 Windows 環境下的 Reporting Service

SQL Server 2017 支援 Linux 環境,但目前尚未提供 Reporting Serivce。微軟日前提供獨立安裝的 reporting service,因此如果有此需求,可以透過分開安裝達成:

Linux Sql Server 2017 (使用 docker container

Windows Reporting Service 2017

安裝 sql server on linux docker

首先依據Run the SQL Server 2017 container image with Docker 安裝 sql server 2017,要注意建議 port 改為 1433 only

docker run -e "ACCEPT_EULA=Y" -e
"MSSQL_SA_PASSWORD=Strong!Passw0rd" -p 1433:1433 --name sql1 -d
microsoft/mssql-server-linux:2017-latest

要使用 docker logs sql1 檢查是否正確執行。

更詳細步驟參閱 使用 Docker 安裝 SQL Server 。

安裝 SSRS

然後下載 SSRS Standalone 版本,進行安裝。

安裝完畢後,開啟 Report Server Configuration Manager

在『伺服器名稱』中輸入 localhost (對應 docker image),選擇連線。

主要設定:

服務帳戶、Web服務URL、入口網站URL:使用預設即可

分需要點選套用,例如『Web 服務 URL』中,不需要修改直接點選『套用』:

設定資料庫

連結比較麻煩,需要建立新的報表伺服器資料庫(因為不是跟 SQL Server 一起安裝):

這裡要輸入 Docker 的資料庫名稱(因為docker 安裝在本機,並且將 1433 port forwarding 到內部,因此可以當作是 localhost 使用),後續的資料庫名稱接受預設值即可:

上面提到驗證類型有很多,但因為使用 linux docker 的資料庫,因此使用服務認證與本機使用者認證都會有風險,因此建議使用  sa 帳號。

點選入口網站時候,要輸入本機登入帳號、密碼(因為服務帳戶的設定)。當我們看到這個畫面代表已經設定成功: