共用方式為


角色

適用於: 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 群組所指定的用戶成員,以及許可權(讀取、進程、系統管理員)。

重要

如果您使用 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) 傳回目前登入之使用者的 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 相同,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)