Query Impersonation
在開始之前,請先了解什麼是模擬查詢(Query Impersonation)。
您將了解
- Tableau Query Impersonation 的應用情境
- 如何操作使用 Tableau Query Impersonation
應用情境與流程概觀
在組織內進行報表資料分享時,需要考慮不同人員層級、組織單位和地區等因素,以建立出多張不同的的視圖 (View)。然而,透過 Canner Enterprise 的 Query Impersonation 功能,使用者可以直接在一張報表中建立不同的資料權限策略,讓組織內 Tableau 的使用者在讀取報表時只能看到和自己權限相關的資料。
操作步驟
Step 1: 開啟模擬 (Impersonation) 權限
首先,Tableau Server 連線到 Canner Enterprise 中的使用者需要具備模擬權限,才有辦法在 Canner Enterprise 中模擬其他使用者進行查詢。假設進行連線的使用者為 User A
,接著需要先至 Members
頁面開啟 User A
的模擬權限。
進入 Members 頁面,點擊 Edit 選項。
將 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
建立成 View。
Step 3: 設定 Canner Enterprise 為 Tableau 資料來源
設定 Canner Enterprise 為 Tableau 資料來源方式請參考此篇教學。
設定 Initial SQL
設定完連線資訊後,暫時不要點擊登錄,切換到 Initial SQL
的標籤頁中。Initial SQL 為當 Tableau 連線到資料庫時,可以先執行一段初始的 SQL 指令。
此外,Tableau 也支援在 Initial SQL
可以帶入相關參數,如當前 TableauServerUser
的使用者名稱。
Parameter | Description | Example of returned value |
---|---|---|
TableauServerUser | The 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]'
完成設定後,點擊 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 的工作區中有哪些使用者,分別有以下兩位
當 astro
這位使用者登入 Tableau 時,並查看 Step 2 所建立的報表資料,此時 Tableau 在進行連線時,會先執行 Initial SQL,模擬成 astro 這位使用者去進行查詢。
impersonate 'astro'
根據我們針對這張報表定義的資料權限,由於 astro
這位使用者在工作區中的角色並非工作區擁有者owner
,因此 address
欄位呈現 ***
。
同樣地,當 tom
這位使用者登入 Tableau 時,並查看 Step 2 所建立的報表資料,此時 Tableau 在進行連線時,會先執行 Initial SQL,模擬成 tom
這位使用者去進行查詢。
impersonate 'tom'
根據我們針對這張報表定義的資料權限,由於 tom
這位使用者在工作區中的角色為工作區擁有者owner
,因此 address
欄位呈現原始的值。