自訂沙盒:限制欄位的存取權
了解如何使用已儲存的 SQL 查詢,針對不同人員顯示特定的列和欄位。
沙盒功能在 Pro 和 Enterprise 方案中提供,可用於根據人員身分指定人員可以存取的資料。我們關於列權限的文章涵蓋如何建立基本沙盒,以根據人員的使用者屬性限制列。例如,我們建立了一位 Brown 女士的使用者,並授予她存取權限,以存取 People
和 Orders
表格中與她的 user_id
屬性相符的列。
在本文中,我們將逐步說明如何為 Products
表格建立自訂沙盒,以限制 Brown 女士可以檢視的列和欄位。在本例中,我們希望 Brown 女士
- 僅在
Products
表格中看到她已下訂單的產品。 - 僅看到
Title
、Category
和Price
欄位(以及任何其他欄位)。
計畫
我們將
-
建立只有管理員可以存取的集合。
-
建立新的 SQL 查詢。
Products
表格不包含關於使用者的資訊。因此,為了限制 Brown 女士對Products
表格的存取權,我們需要找出 Brown 女士訂購了哪些產品。我們將撰寫一個 SQL 查詢,將Products
表格中的資料與Orders
表格中的資料結合。在結合這些表格時,我們將建立一個新的表格結果,其中僅包含我們想要的欄位。 -
對
Product
表格進行沙盒處理,方法是顯示我們查詢的結果,而不是 Brown 女士的原始表格。 -
透過驗證 Brown 女士可以看到哪些資料,確認我們的沙盒。
建立只有管理員可以存取的集合
我們會想要建立一個集合來儲存我們將用來沙盒處理此表格的 SQL 查詢。我們將其命名為 Sandbox Questions
,並在此集合上設定權限,以便只有管理員可以管理其問題。這樣,非管理員將無法變更問題並變更沙盒的「維度」,例如,透過包含 Brown 女士不應看到的欄位。請參閱集合權限以深入了解如何設定權限。
建立 SQL 查詢
從頂端列中,按一下 + 新增 > SQL 查詢 以提出 SQL 問題。選取 Metabase 隨附的範例資料庫。
以下是我們將貼到編輯器中的查詢
SELECT DISTINCT PRODUCTS.TITLE,
PRODUCTS.CATEGORY,
PRODUCTS.PRICE
FROM PRODUCTS
LEFT JOIN ORDERS ON ORDERS.PRODUCT_ID=PRODUCTS.ID
[[WHERE ORDERS.USER_ID IN ({{sandbox}})]]
以下是查詢的作用
- 傳回包含
Products
表格中欄位的結果:Title
、Category
和Price
。 - 檢查產品是否相異,亦即每個產品只有一列。
- 選擇性地篩選此清單,僅顯示沙盒使用者訂購的產品。
雙方括號 [[…]]
圍繞 WHERE
子句使子句成為選用項目。雙大括號 {{sandbox}}
定義變數。當我們沙盒處理此問題時,我們將使用此 {{sandbox}}
變數。
讓我們執行查詢,這會產生此結果
現在讓我們將此問題儲存為 Products from Orders
,將其儲存在我們建立的 Sandbox Questions
集合中,並選擇不將問題新增至儀表板。
這裡要重申一點:我們僅選取了 Products
表格中的欄位,因為我們的查詢應僅傳回我們想要沙盒處理的表格中的欄位。
使用我們儲存的問題沙盒處理 Products 表格
現在我們已建立 Products from Orders
問題,現在是時候沙盒處理 Products
表格了。我們將設定沙盒,以便 Metabase 將我們在關於列權限的文章中提供給 Brown 女士的 user_id
屬性插入到我們已儲存的 SQL 問題 Products from Orders
中的 {{sandbox}}
變數中。
我們將按一下齒輪圖示,選取管理設定,然後按一下權限標籤。在左側的資料庫下方,我們將按一下 Sample Database
和 Products
。由於 Brown 女士是 Customers 群組的成員,且 Metabase 將資料權限授予群組,而非個人,因此我們將授予 Customers 沙盒存取 Products
表格的權限。
當 Metabase 彈出沙盒處理模式時,在「您要如何為此群組中的使用者篩選此表格?」區段中,我們將選取第二個篩選選項:「使用已儲存的問題為此表格建立自訂檢視」。
我們將導覽至僅限管理員的 Sandbox Questions
集合,並選取我們的問題 Products from Orders
。針對 PARAMETER OR VARIABLE
,我們將選取我們包含在 SQL 查詢中的變數 {{sandbox}}
。針對 USER ATTRIBUTE
,我們將選取 user_id
。
我們的摘要現在顯示
- Customers 群組中的人員
- 可以檢視
Products from Orders
問題中的列 - 其中
sandbox
變數的值等於user_id
讓我們按一下模式中的儲存,然後按一下通知列中的儲存變更以確認我們的變更。
以沙盒使用者身分檢查設定
讓我們從 Brown 女士的角度看看我們的沙盒 Products
表格的外觀。開啟私密瀏覽器視窗,導覽至我們的 Metabase,並以 Brown 女士身分登入。
當我們使用資料瀏覽器開啟 Products
表格時,我們可以確認 Brown 女士只能看到她訂購的產品清單,以及我們包含在已儲存的 Products from Orders
問題中的三個欄位:Title
、Category
和 Price
。
如果 Brown 女士提出查詢 Products
表格的問題,她仍然只會看到根據她訂購的產品的結果。如果她有權存取包含沙盒外部欄位的問題,她會看到錯誤。
沙盒處理表格時,偏好使用 SQL 問題
雖然我們可以使用查詢產生器問題來沙盒處理表格,但我們建議改為使用 SQL 問題。在幕後,問題會根據我們問題中的篩選器、摘要和聯結建立 SQL 查詢。當我們根據 GUI 問題進行沙盒處理時,我們可能不會意識到我們給予人員存取權限的資訊的完整範圍。
或者,我們可以使用查詢產生器建立問題,然後查看幕後,以查看 Metabase 將執行的 SQL 程式碼。在查詢產生器中,我們可以按一下右上角的檢視 SQL 按鈕,以確認 Metabase 是否包含正確的表格和欄位,以及其他任何內容。
重點回顧
使用問題進行沙盒處理時
- 使用 SQL 問題.
- 請確定您已儲存的 SQL 問題僅傳回您打算沙盒處理的表格中的欄位。
- 將沙盒處理問題儲存在僅限管理員的集合中,最好是專門用於沙盒處理問題的集合。
延伸閱讀
下一步:資料沙盒:個人化人員可以在 Metabase 中看到的資料
將沙盒與使用者屬性配對,以針對幾乎任何情況自訂資料。