Skip to main content
Version: v4

Query Impersonation

開始之前

在開始之前,請先了解什麼是模擬查詢(Query Impersonation)

您將了解

  1. Tableau Query Impersonation 的應用情境
  2. 如何操作使用 Tableau Query Impersonation

應用情境與流程概觀

在組織內進行報表資料分享時,需要考慮不同人員層級、組織單位和地區等因素,以建立出多張不同的的視圖 (View)。然而,透過 Canner Enterprise 的 Query Impersonation 功能,使用者可以直接在一張報表中建立不同的資料權限策略,讓組織內 Tableau 的使用者在讀取報表時只能看到和自己權限相關的資料。

1_tableau_query_impersonation

操作步驟

Step 1: 開啟模擬 (Impersonation) 權限

首先,Tableau Server 連線到 Canner Enterprise 中的使用者需要具備模擬權限,才有辦法在 Canner Enterprise 中模擬其他使用者進行查詢。假設進行連線的使用者為 User A,接著需要先至 Members 頁面開啟 User A 的模擬權限。

進入 Members 頁面,點擊 Edit 選項。

2_tableau_query_impersonation

Impersonation 的開關開啟。當開啟後,此角色就具有模擬其他使用者的權限。

3_tableau_query_impersonation

Step 2: 建立資料權限

以資料行層級安全原則 (Column-level Security) 為範例。

使用者在 Canner Enterprise 中要建立 View 或是 Materialized View 時,可以在 SQL 語法中加入上述的函數來定義資料權限

資料權限定義: 當使用者在工作區中權限角色不是工作區擁有者 (Owner) 時,資料表中的 address 欄位會回傳 *** 的值給使用者。

SELECT
(CASE
WHEN get_workspace_role() != 'owner' THEN '***'
ELSE address::text
END)
FROM
customer_27487

4_tableau_query_impersonation

建立成 View。

5_tableau_query_impersonation

Step 3: 設定 Canner Enterprise 為 Tableau 資料來源

設定 Canner Enterprise 為 Tableau 資料來源方式請參考此篇教學

設定 Initial SQL

設定完連線資訊後,暫時不要點擊登錄,切換到 Initial SQL 的標籤頁中。Initial SQL 為當 Tableau 連線到資料庫時,可以先執行一段初始的 SQL 指令。

6_tableau_query_impersonation

此外,Tableau 也支援在 Initial SQL 可以帶入相關參數,如當前 TableauServerUser 的使用者名稱。

ParameterDescriptionExample of returned value 
TableauServerUserThe user name of the current server user. Use when setting up impersonation on the server. Returns an empty string if the user is not signed in to Tableau Server.jsmith

結合以上方式,我們可以在 Tableau Server 連線到 Canner Enterprise 時,輸入以下語法。在進行連線時,會模擬成當前的 Tableau Server 的使用者進行查詢。

impersonate '[TableauServeruser]'

7_tableau_query_impersonation

完成設定後,點擊 Sign In 按鈕即可進行連線。若出現以下錯誤訊息,代表連線的使用者在 Canner Enterprise 中未開啟模擬 (Impersonation) 權限,請到 Step 1 開啟模擬權限。

ERROR: UserId 377e8838-8c6f-45df-801d-3604c130a5ab didn't have the privilege to impersonate anyone

Step 4: 執行模擬查詢

首先,我們先查看從 Tableau Server 連線到 Canner Enterprise 的工作區中有哪些使用者,分別有以下兩位

8_tableau_query_impersonation

astro 這位使用者登入 Tableau 時,並查看 Step 2 所建立的報表資料,此時 Tableau 在進行連線時,會先執行 Initial SQL,模擬成 astro 這位使用者去進行查詢。

impersonate 'astro'

根據我們針對這張報表定義的資料權限,由於 astro 這位使用者在工作區中的角色並非工作區擁有者owner,因此 address 欄位呈現 ***

9_tableau_query_impersonation

同樣地,當 tom 這位使用者登入 Tableau 時,並查看 Step 2 所建立的報表資料,此時 Tableau 在進行連線時,會先執行 Initial SQL,模擬成 tom 這位使用者去進行查詢。

impersonate 'tom'

根據我們針對這張報表定義的資料權限,由於 tom 這位使用者在工作區中的角色為工作區擁有者owner,因此 address 欄位呈現原始的值。

10_tableau_query_impersonation