角色

適用于:SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

表格式模型中的角色會定義模型的成員許可權。 角色的成員可以依角色權限所定義,對模型執行動作。 以讀取權限定義的角色也可以使用資料列層級篩選,在資料列層級提供額外的安全性。

對於Azure Analysis Services和 Power BI 資料集,使用者必須位於您的Microsoft Entra識別碼和使用者名稱和群組中,必須透過組織電子郵件地址或 UPN。 針對SQL Server Analysis Services,角色包含 Windows 使用者名稱或 Windows 群組的使用者成員,以及讀取、處理、系統管理員) (許可權。 針對Azure Analysis Services和 Power BI 語意模型,使用者必須位於您的 Azure Active Directory 中,且指定的使用者名稱和群組必須是組織電子郵件地址或 UPN。 針對SQL Server Analysis Services,角色包含 Windows 使用者名稱或 Windows 群組的使用者成員,以及讀取、處理、系統管理員) (許可權。

重要

使用 Visual Studio 建立角色,並將組織使用者新增至將部署至Azure Analysis Services或 Power BI 的表格式模型專案時,請使用整合式工作區

重要

若要讓使用者使用報告用戶端應用程式連線到已部署的模型,您必須至少建立一個角色,且至少具有這些使用者所屬的讀取權限。

本文中的資訊適用于使用 SSDT 中 [角色管理員] 對話方塊來定義角色的表格式模型作者。 在模型製作期間定義的角色會套用至模型工作空間資料庫。 部署模型資料庫之後,模型資料庫管理員可以使用 SSMS 來管理 (新增、編輯、刪除) 角色成員。

瞭解角色

Analysis Services 中會使用角色來管理模型資料存取。 目前有兩種角色類型:

  • 伺服器角色,這是提供 Analysis Services 伺服器實例之系統管理員存取權的固定角色。 伺服器角色不適用於 Power BI。 相反地,Power BI 會使用 工作區角色

  • 資料庫角色,這是模型作者和管理員所定義的角色,用來控制非管理員使用者對模型資料庫和資料的存取。

針對表格式模型定義的角色就是資料庫角色。 也就是說,角色包含成員,由具有特定許可權的使用者或群組所組成,這些成員可以在模型資料庫上採取的動作。 角色會建立為資料庫中的個別物件,而且只適用于該角色建立所在的資料庫。 模型作者的角色中會包含使用者和群組,根據預設,該角色具有工作區資料庫伺服器的系統管理員許可權;針對已部署的模型,由系統管理員使用。

表格式模型中的角色可以使用資料列篩選進一步定義,也稱為資料 列層級安全性。 資料列篩選使用 DAX 運算式定義使用者可以查詢的資料表資料列,以及許多方向的任何相關資料列。 只有「讀取」及「讀取和處理」權限,才可以定義使用 DAX 運算式的資料列篩選。 在 Power BI 中,模型角色定義于Power BI Desktop中,並僅適用于資料列層級安全性。 若要深入瞭解,請參閱本文稍後的資料 列篩選

根據預設,當您建立新的表格式模型專案時,專案沒有任何角色。 在 SSDT 中可以使用 [角色管理員] 對話方塊來定義角色。 在模型撰寫期間定義角色時,會將這些角色套用至模型工作空間資料庫。 部署模型時,會將相同的角色套用至已部署的模型。 部署模型之後,伺服器角色的成員 ([Analysis Services 系統管理員) 和資料庫管理員可以使用 SSMS 來管理與模型相關聯的角色,以及與每個角色相關聯的成員。

權限

本節所述的角色許可權僅適用于Azure Analysis Services和SQL Server Analysis Services。 在 Power BI 中,會定義語意模型的許可權。 若要深入瞭解,請參閱 管理語意模型存取

每一個角色都有一個已定義的資料庫權限 (但不包括「讀取和處理」結合權限)。 新角色的預設權限為「無」。 換句話說,成員一旦加入至具有「無」權限的角色後,除非授與其他權限,否則將無法修改資料庫、執行處理作業、查詢資料或查看資料庫。

群組或使用者可以是任意數目角色的成員,每個角色都有不同的許可權。 當使用者是多個角色的成員時,針對每個角色定義的權限會累計。 例如,如果某位使用者是具有「讀取」權限之角色的成員,同時也是具有「無」權限之角色的成員,則該使用者將具有「讀取」權限。

每個角色可以定義下列其中一個權限:

權限 描述 使用 DAX 的資料列篩選
成員無法對模型資料庫結構描述進行任何修改,也無法查詢資料。 不會套用資料列篩選。 此角色的使用者看不到任何資料
讀取 允許成員查詢資料 (根據資料列篩選),但是無法在 SSMS 中看到模型資料庫,也無法對模型資料庫結構描述做任何變更,使用者也無法處理模型。 可套用資料列篩選。 使用者只能看到資料列篩選 DAX 公式中指定的資料。
讀取和處理 成員可以查詢資料 (根據資料列層級篩選),並透過執行指令碼或包含處理命令的封裝來執行處理作業,但無法對資料庫進行任何變更。 無法在 SSMS 中檢視模型資料庫。 可套用資料列篩選。 只能查詢資料列篩選 DAX 公式中指定的資料。
流程 成員可以透過執行指令碼或包含處理命令的封裝來執行處理作業。 無法修改模型資料庫結構描述。 無法查詢資料。 無法在 SSMS 中查詢模型資料庫。 不會套用資料列篩選。 無法查詢此角色中的任何資料
系統管理員 成員可以修改模型架構,並可查詢模型設計工具、報告用戶端和 SSMS 中的所有資料。 不會套用資料列篩選。 可以查詢此角色中的所有資料。

注意

具有讀取和讀取和處理許可權的成員可以根據資料列篩選來查詢資料,但看不到 SSMS 中的模型資料庫。 成員無法對模型資料庫架構進行變更,也無法處理模型。 不過,在 SQL Server Analysis Services 2019 和更早版本中,成員可以使用DMV來判斷量值定義。 SQL Server Analysis Services 2022 和更新版本封鎖對 DMV 的存取,以改善安全性。

資料列篩選

資料列篩選通常稱為 Power BI 中的資料列層級安全性,定義特定角色的成員可以查詢資料表中的資料列。 您可以使用 DAX 公式,為模型中的每個資料表定義資料列篩選。

只能針對具有「讀取」和「讀取和處理」權限的角色定義資料列篩選條件。 根據預設,如果特定資料表未定義資料列篩選,除非從其他資料表套用交叉篩選,否則具有「讀取」或「讀取和處理」權限的角色成員將可以查詢資料表中的所有資料列。

定義特定資料表的資料列篩選之後,必須評估為 TRUE/FALSE 值的 DAX 公式即會定義該特定角色成員可以查詢的資料列。 無法查詢 DAX 公式中未包含的資料列。 例如,對於 Sales 角色的成員,具有下列資料列篩選運算式的 Customers 資料表 =Customers [Country] = 「USA」,銷售角色的成員將只能看到美國的客戶。

資料列篩選會套用至指定的資料列及相關的資料列。 當資料表具有多個關聯性時,篩選條件會針對使用中的關聯性來套用安全性。 資料列篩選會與針對相關資料表定義的其他資料列篩選進行交叉篩選,例如:

資料表 DAX 運算式
區域 =Region[Country]="USA"
ProductCategory =ProductCategory[Name]="Bicycles"
交易 =Transactions[Year]=2020

這些許可權在 Transactions 資料表上的淨效果是,成員將允許查詢客戶在美國的資料列,而產品類別是自行車,而年份為 2020。 除非使用者是授與這些許可權的另一個角色成員,否則使用者將無法查詢美國以外的任何交易,或任何非自行車的交易,或不是在 2020 年的任何交易。

您可以使用 =FALSE() 篩選條件,拒絕存取整個資料表的所有資料列。

若要深入瞭解 Power BI 中的模型角色,請參閱 Power BI 中的資料列層級安全性

動態安全性

動態安全性可讓您根據目前登入的使用者名稱或從連接字串傳回的 CustomData 屬性,定義資料列層級安全性。 若要實作動態安全性,您必須在模型中加入包含使用者登入 (Windows 使用者名稱) 值以及可用來定義特定權限之欄位的資料表,例如具有登入 ID (domain\username) 以及每個員工部門值的 dimEmployees 資料表。

若要實現動態安全性,您可以使用以下函數做為 DAX 公式的一部分,來傳回目前登入使用者的使用者名稱,或傳回連接字串中的 CustomData 屬性:

函式 描述
USERNAME 函數 (DAX) 傳回目前登入使用者的 domain\username。
CUSTOMDATA 函數 (DAX) 傳回連接字串中的 CustomData 屬性。

您可以使用 LOOKUPVALUE 函數傳回資料行值,其中 Windows 使用者名稱與 USERNAME 函數傳回的使用者名稱或 CustomData 函數傳回的字串相同。 然後,可以限制查詢,其中 LOOKUPVALUE 所傳回的值會符合相同或相關資料表中的值。

例如,使用以下公式:

='dimDepartment'[DepartmentId]=LOOKUPVALUE('dimEmployees'[DepartmentId], 'dimEmployees'[LoginId], USERNAME(), 'dimEmployees'[LoginId], 'dimDepartment'[DepartmentId])

LOOKUPVALUE 函式會傳回 dimEmployees[DepartmentId] 資料行的值,其中 dimEmployees[LoginId] 與目前登入之使用者的 LoginID 相同,而 dimEmployees[DepartmentId] 的值與 dimDepartment[DepartmentId] 的值相同。 然後,使用 LOOKUPVALUE 所傳回的 DepartmentId 值,來限制 dimDepartment 資料表和依 DepartmentId 相關的任何資料表中查詢的資料列。 只傳回 DepartmentId 值也是 LOOKUPVALUE 函數所傳回 DepartmentId 值的資料列。

dimEmployees

姓氏 名字 LoginId DepartmentName DepartmentId
Brown Kevin Adventure-works\kevin0 Marketing 7
Bradley David Adventure-works\david0 Marketing 7
Dobney JoLynn Adventure-works\JoLynn0 生產 4
Baretto DeMattos Paula Adventure-works\Paula0 Human Resources 2

dimDepartment

DepartmentId DepartmentName
1 公司
2 Executive General and Administration
3 庫存管理
4 製造業
5 品質保證
6 研究與開發
7 銷售與行銷

測試角色

在 Visual Studio 中撰寫模型專案時,您可以使用 [在 Excel 中進行分析] 功能來測試您所定義角色的效力。 請從模型設計師中的 [模型] 功能表,按一下 [在 Excel 中進行分析][選擇認證和檢視方塊] 對話方塊即會在 Excel 開啟前出現。 在這個對話方塊中,您可指定目前的使用者名稱、其他使用者名稱、角色,以及您想用來連接至做為資料來源之工作空間模型的檢視方塊。 如需詳細資訊,請參閱 [在 Excel 中進行分析]所在電腦上安裝 Excel。

腳本角色

部署模型和語意模型的角色可以使用 表格式模型指令碼語言 (TMSL) 來建立或修改 Roles 物件來編寫腳本。 TMSL 指令碼可以在 SSMS 中執行,或使用 Invoke-ASCmd PowerShell Cmdlet 執行。

另請參閱

建立和管理角色
檢視方塊
在 Excel 中進行分析
USERNAME 函數 (DAX)
LOOKUPVALUE 函數 (DAX)
CUSTOMDATA 函數 (DAX)