王萬東 王罡 杜晉博 方淑津 張林石
摘 要:本地部署的Power BI采用Windows身份認(rèn)證方式,要實現(xiàn)與統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)的集成,需要改寫其認(rèn)證方式為Forms認(rèn)證。同時通過控制報表文件夾訪問權(quán)限,來實現(xiàn)與統(tǒng)一授權(quán)系統(tǒng)的集成。本文以上海交通大學(xué)管理決策系統(tǒng)與統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)為研究對象,介紹了Power BI與統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)集成的主要步驟,并列出了關(guān)鍵代碼。
關(guān)鍵詞:Power BI ;數(shù)據(jù)可視化;統(tǒng)一身份認(rèn)證;統(tǒng)一授權(quán);高校信息化
中圖分類號:TP311.1 文獻標(biāo)志碼:A 文章編號:1673-8454(2018)23-0054-04
一、背景介紹與相關(guān)工作
1.背景介紹
隨著高校信息化的不斷發(fā)展,積累了大量的人事、財務(wù)、外事、教務(wù)、資產(chǎn)等方面的數(shù)據(jù),為各個高校進行大數(shù)據(jù)分析奠定了基礎(chǔ)。一些高校為了更好地發(fā)揮大數(shù)據(jù)的價值,開始建立管理決策支持系統(tǒng)。高校的大數(shù)據(jù)分析平臺,需要建立直觀的可視化分析展示平臺,確保數(shù)據(jù)安全和穩(wěn)定,數(shù)據(jù)自動更新,對接學(xué)校統(tǒng)一身份認(rèn)證和授權(quán)體系,實現(xiàn)學(xué)校不同層級管理人員的操作權(quán)限、數(shù)據(jù)權(quán)限,并為各個業(yè)務(wù)領(lǐng)域內(nèi)的專業(yè)人員提供高效易用的分析數(shù)據(jù)、報表等專業(yè)分析工具,達到以支持學(xué)校管理決策的作用。因此選擇一款適合高校的BI產(chǎn)品變得十分關(guān)鍵。由于Power BI產(chǎn)品比同行業(yè)性價比高、發(fā)展趨勢好,因此上海交通大學(xué)管理決策系統(tǒng)選擇了微軟的Power BI產(chǎn)品構(gòu)架。基于數(shù)據(jù)安全和性價比的考慮,選擇了Power BI 本地部署的方式。由于本地部署是基于Windows身份認(rèn)證方式,所以Power BI與學(xué)校的統(tǒng)一身份認(rèn)證和授權(quán)的無縫集成工作變得十分重要。本文對Power BI與上海交通大學(xué)統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)的集成實現(xiàn)進行詳細(xì)分析。
2.Power BI
Power BI 是一套商業(yè)數(shù)據(jù)分析工具,為管理者提供決策支持??蛇B接數(shù)百個數(shù)據(jù)源、簡化數(shù)據(jù)準(zhǔn)備并提供及時分析。生成美觀的報表并進行發(fā)布,供組織在 Web 和移動設(shè)備上使用。每個人都可創(chuàng)建個性化儀表板,獲取針對其業(yè)務(wù)的全方位獨特見解。在企業(yè)內(nèi)實現(xiàn)擴展,內(nèi)置管理和安全性。Power BI都可讓你輕松地連接到數(shù)據(jù)源,直觀看到或發(fā)現(xiàn)重要內(nèi)容,與任何所希望的人進行共享。[1]
3.統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)
(1)統(tǒng)一身份認(rèn)證
單點登錄(即jaccount)是上海交通大學(xué)網(wǎng)絡(luò)信息中心開發(fā)的用戶認(rèn)證體系。通過jaccount認(rèn)證體系,可以在Web應(yīng)用中實現(xiàn)單點登錄,即用戶在一個瀏覽器會話期里只需登錄一次就能進入所有他擁有訪問權(quán)限的jaccount成員站點。同時,jaccount也可以為校內(nèi)第三方應(yīng)用提供統(tǒng)一身份認(rèn)證和單點登錄服務(wù),提供了方便的開發(fā)方式和接口。[2]
(2)統(tǒng)一授權(quán)系統(tǒng)
統(tǒng)一授權(quán)系統(tǒng)是在統(tǒng)一身份認(rèn)證體系的基礎(chǔ)上建立起來的統(tǒng)一管理各業(yè)務(wù)系統(tǒng)權(quán)限、角色、崗位的通用平臺,各業(yè)務(wù)系統(tǒng)可以在統(tǒng)一授權(quán)系統(tǒng)中定義所需的權(quán)限、角色、崗位、屬性等內(nèi)容,管理員可以在統(tǒng)一授權(quán)系統(tǒng)中通過統(tǒng)一的入口直接管理各業(yè)務(wù)系統(tǒng)的角色和崗位。各業(yè)務(wù)系統(tǒng)可以通過Web 接口或者數(shù)據(jù)交換平臺獲取用戶在各自業(yè)務(wù)系統(tǒng)中的角色、崗位和權(quán)限。[3]
二、設(shè)計與實現(xiàn)
1.概述
用Power BI相關(guān)產(chǎn)品開發(fā)數(shù)據(jù)分析系統(tǒng),主要開發(fā)內(nèi)容包括,建立數(shù)據(jù)倉庫、創(chuàng)建Sql Server Analysis Service模型項目、創(chuàng)建Sql Server Integration Services項目、創(chuàng)建Power BI Report Server、Power BI Desktop進行自助分析并發(fā)布到Power BI Report Server、Web應(yīng)用訪問Power BI Report Server發(fā)布的報表等,本文提到的Web應(yīng)用系統(tǒng)主要是指上海交通大學(xué)管理決策系統(tǒng)。具體的業(yè)務(wù)主要是利用ETL工具從數(shù)據(jù)中心獲取到相關(guān)業(yè)務(wù)數(shù)據(jù)存到數(shù)據(jù)倉庫,建立數(shù)據(jù)模型,創(chuàng)建大數(shù)據(jù)可視化的分析圖表發(fā)布到圖表服務(wù)器,用戶通過Web應(yīng)用系統(tǒng)訪問相應(yīng)的圖表。具體的Power BI 本地部署架構(gòu)如圖1所示。
本文討論的解決方案是基于Power BI 采用本地部署的方式。Power BI與學(xué)校的統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)集成主要有兩個難點,一個是用戶通過統(tǒng)一身份認(rèn)證登錄后,如何免登錄到Power BI Report Server;另一個是用戶登錄到Power BI Report Server后,如何控制用戶訪問Power BI Report Server報表權(quán)限。
2.統(tǒng)一身份認(rèn)證集成
由于本文討論的Power BI基于本地部署的方式,所以Power BI Report Server的認(rèn)證方式是Windows身份認(rèn)證的方式,需要借助于CustomSecuritySample開源項目[4]來實現(xiàn)自定義認(rèn)證。需要對CustomSecuritySample項目的代碼進行二次開發(fā),同時按照CustomSecuritySample項目的說明進行配置,從而實現(xiàn)用戶通過統(tǒng)一身份認(rèn)證后登錄到Web應(yīng)用系統(tǒng),然后借助CustomSecuritySample實現(xiàn)Power BI Report Server的Forms認(rèn)證,從而自動登錄到Power BI Report Server。(見圖2)
(1)搭建項目
本系統(tǒng)開發(fā)中用的開發(fā)工具是Microsoft Visual Studio 2015、Microsoft SQL Server 2016,以自定義認(rèn)證項目CustomSecuritySample為基礎(chǔ)進行二次開發(fā),用Microsoft Visual Studio 2015打開CustomSecuritySample.sln,添加引用Microsoft.ReportingServices.Interfaces.dll。
(2)項目關(guān)鍵代碼
修改Logon.aspx里的Page_Load方法,用戶登錄Web應(yīng)用后,自動登錄到Power BI Report Server,這樣用戶查看報表的時候就可以直接訪問發(fā)布在Power BI Report Server里的報表了。主要代碼如下所示:
//Logon.aspx.cs里的代碼,統(tǒng)一身份認(rèn)證登錄后自動跳轉(zhuǎn)到自定義認(rèn)證項目的Logon.aspx頁面,在Page_Load方法里進行登錄驗證
ReportServerProxy reportServerProxy = new ReportServerProxy();
reportServerProxy.Url = “/ReportServer/ReportService2010.asmx”;
try{
//調(diào)用AuthenticationExtension.cs里的LogonUser方法
reportServerProxy.LogonUser(uname, upwd, null);
Response.Redirect(returnURL, false);// returnURL是跳轉(zhuǎn)過來的url
return;
}
catch (Exception ex){
Response.Redirect("/Logon.aspx");// cookie過期或者身份驗證錯誤。
Response.End();
}
// AuthenticationExtension.cs里的LogonUser方法的主要代碼
bool result = AuthenticationUtilities.VerifyPassword(userName, password);
// AuthenticationUtilities.cs里的VerifyPassword方法代碼
主要是就是驗證用戶名和密碼是否正確。如果正確返回true,用戶自動登錄到Power BI Report Server,自定義認(rèn)證項目內(nèi)部實現(xiàn)了登錄到Power BI Report Server。
(3)項目配置部署到Power BI Report Server服務(wù)器
一是將Logon.aspx頁面復(fù)制到Report Server的安裝目錄下。將CustomSecurity.dll和CustomSecurity.pdb復(fù)制到bin文件夾下,同理將這兩個文件復(fù)制到Portal和PowerBI安裝目錄下。
二是修改RSReportServer.config文件。找到
三是修改Report Server的Web.config文件。找到
四是配置Passthrough cookies,如下所示:
(4)項目遠(yuǎn)程調(diào)試
項目部署好后,如果有問題可以用遠(yuǎn)程調(diào)試來定位問題。下面就給出遠(yuǎn)程調(diào)試的主要步驟。主要就是在自定義認(rèn)證項目CustomSecuritySample里修改好代碼,部署到Power BI Report Server后,如果發(fā)現(xiàn)修改的內(nèi)容沒有生效或出錯,就可以開啟遠(yuǎn)程調(diào)試的方式來定位問題。遠(yuǎn)程調(diào)試主要就是把本地的Visual Studio 2015安裝目錄下的 Remote Debugger文件夾全部拷貝到Power BI Report Server部署所在的服務(wù)器上,然后以管理員的權(quán)限運行msvsmon文件,在工具菜單里選擇允許任何人遠(yuǎn)程調(diào)試即可。在Visual Studio 2015項目里選擇附加到進程調(diào)試,傳輸方式選擇“遠(yuǎn)程(無身份驗證)”,限定符的IP為遠(yuǎn)程服務(wù)器的IP地址,端口號是msvsmon里允許的端口號,例如211.X.X.58:5022 。點擊刷新按鈕,附加到相應(yīng)的進程即可進行遠(yuǎn)程調(diào)試。
3.統(tǒng)一授權(quán)系統(tǒng)集成
上海交大統(tǒng)一授權(quán)系統(tǒng)可以對用戶進行崗位授權(quán),例如在統(tǒng)一授權(quán)系統(tǒng)中,對用戶A授權(quán)崗位B,這樣用戶A就擁有了崗位B在各個應(yīng)用系統(tǒng)中對應(yīng)的崗位權(quán)限。崗位權(quán)限在應(yīng)用系統(tǒng)中進行設(shè)置,崗位可以被授予頁面權(quán)限,用戶登錄應(yīng)用系統(tǒng)后就可以訪問應(yīng)用系統(tǒng)中相應(yīng)的頁面。而我們討論的Power BI的報表就是嵌套在頁面里,如果想訪問頁面里的報表內(nèi)容,就必須把Power BI Report Server里的報表訪問權(quán)限授予崗位,這樣用戶擁有了報表對應(yīng)的崗位權(quán)限后就可以訪問報表了。
Power BI Report Server報表崗位授權(quán)的關(guān)鍵步驟是把報表訪問的權(quán)限授予崗位,這樣用戶擁有崗位的權(quán)限后就可以訪問報表了。用Power BI Desktop制作好報表后,發(fā)布到Power BI Report Server指定的文件夾里。發(fā)布報表前管理員需要在Power BI Report Server上新建文件夾。在對文件夾的安全性里添加“組或用戶”,新增“組或用戶”的時候需要和崗位名稱保持一致,同時用戶訪問報表的時候會判斷用戶的崗位是否在文件夾的“組或用戶”里。主要代碼是改寫CustomSecuritySample項目里的Authorization.cs類的CheckOperations方法。主要代碼如下所示:
//通過用戶名獲取用戶崗位
DataSet dsRoles = GetUserRoles(principalName);
if (dsRoles.Tables[0].Rows.Count > 0){
roles = new string[dsRoles.Tables[0].Rows.Count];
for (int i = 0; i < dsRoles.Tables[0].Rows.Count; i++){
roles[i] = dsRoles.Tables[0].Rows[i][0].ToString();
}
if (roles != null){
foreach (string role in roles){
//校驗用戶訪問文件夾的權(quán)限
if (IsUserAuthorized(role, acl, requiredOperation))
return true;
}}
return false;
}else{
return false;
}
private bool IsUserAuthorized(string principalName, AceCollection acl, object requiredOperation)
{
CollectionBase operations = null;
if (principalName.Trim() == String.Empty) return false;
if (0 == String.Compare(principalName, m_adminUserName, true, CultureInfo.CurrentCulture)) return true;
foreach (AceStruct ace in acl)
{
if (0 != String.Compare(principalName, ace.PrincipalName, true, CultureInfo.CurrentCulture)) continue;
if (requiredOperation is CatalogOperation)
operations = ace.CatalogOperations;
else if (requiredOperation is DatasourceOperation)
operations = ace.DatasourceOperations;
else if (requiredOperation is FolderOperation)
operations = ace.FolderOperations;
else if (requiredOperation is ReportOperation)
operations = ace.ReportOperations;
else if (requiredOperation is ResourceOperation)
operations = ace.ResourceOperations;
foreach (object aclOperation in operations)
{
if (aclOperation.ToString() == requiredOperation.ToString()) return true;
}
}
return false;
}
三、結(jié)束語
本文闡述了上海交大管理決策系統(tǒng)采用本地部署的Power BI產(chǎn)品、上海交大統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)進行無縫集成的設(shè)計和實現(xiàn),其中的難點就是本地部署Power BI產(chǎn)品采用的是Windows身份認(rèn)證方式,借助于自定義認(rèn)證項目改寫其認(rèn)證方式為Forms認(rèn)證,同時通過控制Power BI Report Server里文件夾訪問權(quán)限,來實現(xiàn)與統(tǒng)一授權(quán)系統(tǒng)集成。授權(quán)用戶通過統(tǒng)一身份認(rèn)證登錄后,根據(jù)其崗位顯示相應(yīng)的菜單,如果有權(quán)限就可以在Web應(yīng)用系統(tǒng)里直接瀏覽相應(yīng)菜單下的Power BI Report Server里的報表了,從而實現(xiàn)了對報表的精確權(quán)限控制。由于Power BI的功能強大和性價比較高,在Gartner 2018 BI與數(shù)據(jù)分析魔力象限中可以看出Power BI已經(jīng)處于行業(yè)的領(lǐng)先地位。[5]未來會有越來越多的高校和企業(yè)開始使用Power BI。希望本文中的內(nèi)容,可以給這些高校和企業(yè)帶來一定的幫助,讓他們在和統(tǒng)一身份認(rèn)證和授權(quán)系統(tǒng)對接的時候少走一些彎路。
參考文獻:
[1]什么是Power BI?[DB/OL].https://docs.microsoft.com/zh-cn/power-bi/power-bi-overview.
[2]白雪松,茅維華.身份與權(quán)限體系關(guān)鍵技術(shù)的總體設(shè)計與實踐[J].中山大學(xué)學(xué)報(自然科學(xué)版),2009(s1):260-263.
[3]白雪松,蔣磊宏,茅維華.全局角色在統(tǒng)一授權(quán)體系中的應(yīng)用[C].中國高等教育學(xué)會教育信息化分會第十次學(xué)術(shù)年會論文集,2010:116-118.
[4]CustomSecuritySample[DB/OL].https://github.com/Microsoft/Reporting-Services/tree/master/CustomSecuritySample.
[5]Discover best-in-class products for BI and analytics[DB/OL].https://info.microsoft.com/ww-landing-gartner-bi-analytics-mq-2018-partner-consent-test.html.
(編輯:王天鵬)