共用方式為


角色

適用於: 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 中,會定義語意模型的許可權。 若要深入瞭解,請參閱 管理語意模型存取

每個角色都有單一定義的資料庫許可權(除了合併的讀取和進程許可權除外)。 根據預設,新的角色將具有 None 許可權。 也就是說,一旦成員新增至具有 None 許可權的角色,就無法修改資料庫、執行進程作業、查詢數據,或查看資料庫,除非授與不同的許可權。

群組或使用者可以是任意數目角色的成員,每個角色都有不同的許可權。 當使用者是多個角色的成員時,每個角色所定義的許可權都是累積的。 例如,如果使用者是具有讀取許可權的角色成員,以及具有 None 許可權的角色成員,該使用者將具有讀取許可權。

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

權限 描述 使用 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”,Sales 角色的成員只能看到美國的客戶。

數據列篩選會套用至指定的數據列,以及相關的數據列。 當數據表有多個關聯性時,篩選會套用作用中關聯性的安全性。 資料列篩選會與針對相關資料表定義的其他資料列檔案器交集,例如:

桌子 DAX 運算式
地區 =Region[Country]=“USA”
ProductCategory =ProductCategory[Name]=“Bicycles”
交易 =Transactions[Year]=2020

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

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

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

動態安全性

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

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

功能 描述
USERNAME 函式 (DAX) 傳回目前登入之使用者的網域\ 用戶名稱。
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 相同,USERNAME 所傳回,dimEmployees[DepartmentId] 的值與 dimDepartment[DepartmentId] 的值相同。 然後,LOOKUPVALUE 所傳回 DepartmentId 中的值會用來限制 dimDepartment 數據表中查詢的數據列,以及 DepartmentId 相關的任何數據表。 只有 DepartmentId 也位於 LOOKUPVALUE 函式所傳回 DepartmentId 值的數據列。

dimEmployees

LastName FirstName LoginId DepartmentName DepartmentId
棕色 凱文 Adventure-works\kevin0 行銷 7
布蘭得利 大衛 Adventure-works\david0 行銷 7
Dobney JoLynn Adventure-works\JoLynn0 生產 4
Baretto DeMattos 寶拉 Adventure-works\Paula0 人力資源 2

dimDepartment

DepartmentId DepartmentName
1 企業
2 行政一般和管理
3 庫存管理
4 製造業
5 質量保證
6 研發
7 銷售與行銷

測試角色

在 Visual Studio 中撰寫模型專案時,您可以使用 [在 Excel 中進行分析] 功能來測試您所定義角色的效力。 從模型設計工具的 [模型] 功能表中,當您 按兩下 [在 Excel 中分析]時,在 Excel 開啟之前,會出現 [選擇認證和檢視方塊] 對話框 [ 選擇認證和檢視方塊] 對話框。 在此對話框中,您可以指定目前的使用者名稱、不同的用戶名稱、角色,以及您將用來連線到工作區模型作為數據源的檢視方塊。 若要深入瞭解,請參閱 在 Excel 中分析

腳本角色

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

另請參閱

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