使用模擬身分以取得 GUI 和 SQL 查詢的列層級權限

在您的資料庫中建立角色,並讓 Metabase 在查詢您的資料庫時模擬這些角色。

模擬身分是 專業版/企業版 功能,目前僅適用於 PostgreSQL、Redshift 和 Snowflake。

模擬身分是 Metabase 中的權限設定,可讓您管理資料庫中的權限。透過模擬身分,您可以將使用者屬性一直傳遞到資料庫層,這表示您可以在資料庫執行查詢之前設定角色。

模擬身分 vs 沙盒

模擬身分會為以 SQL 編輯器和查詢產生器撰寫的問題設定權限

模擬身分會在資料庫層級運作。在資料庫引擎中,在查詢執行之前設定角色可以變更查詢的結果,因為角色定義了您的資料庫在執行陳述式時應使用的權限。

沙盒僅為查詢產生器問題設定權限

沙盒會在 Metabase 層級運作。由於 Metabase 無法剖析 SQL 查詢以找出人員可以檢視哪些資料,因此沙盒僅適用於在查詢產生器中撰寫的問題(Metabase 可以在其中解譯查詢)。

模擬身分的範例使用案例

假設我們有一個「人員」表格,其中包含來自美國所有 50 個州的帳戶列。

假設您希望您的佛蒙特州銷售團隊能夠

  • 能夠使用查詢產生器和原生 SQL 編輯器提出問題。
  • 只能檢視「人員」表格中居住在佛蒙特州的客戶帳戶。

首先,您將在資料庫中設定權限,方法是建立具有原則的角色。然後在 Metabase 中,您會將該資料庫的資料存取權設定為「模擬身分」,因此當人員在該資料庫上執行查詢時,Metabase 將使用該角色來限制他們可以看到的資料。

在您的資料庫中設定權限

假設您使用的是 Postgres,請使用任何 SQL 用戶端(例如,psql)登入您的資料庫。

您將建立一個名為 vermont_sales_team 的角色,並且僅允許該角色選取 people 表格中 state 欄位中的值為 VT(佛蒙特州的縮寫)的列。

CREATE ROLE vermont_sales_team;

GRANT
SELECT ON ALL TABLES IN SCHEMA PUBLIC TO vermont_sales_team;


CREATE POLICY vermont ON people
FOR
SELECT TO vermont_sales_team USING (state = 'VT');


ALTER TABLE people ENABLE ROW LEVEL SECURITY;

在 Metabase 中設定群組

在 Metabase 中,按一下齒輪圖示,然後前往管理設定 > 人員 > 群組。按一下建立群組。將其命名為「佛蒙特州銷售團隊」。

將人員新增至該群組(如果需要,請建立測試使用者)。

將屬性新增至人員的帳戶

管理設定中,前往人員並尋找該人員的帳戶。編輯他們的帳戶,然後按一下新增屬性

在這裡,您將屬性與角色建立關聯:database_rolevermont_sales_team

Adding a user attribute to an account to specify which role Metabase should pass to the database.

將群組的權限設定為「模擬身分」

您需要限制「所有使用者」群組的預設權限,然後為您的新群組新增「模擬身分」權限。

  1. 前往管理設定 > 權限 > [您的資料庫]

  2. 限制 所有使用者 群組的權限。

    多個群組中的人員擁有其所有群組中最寬鬆的存取權。由於每個 Metabase 使用者都屬於「所有使用者」群組,因此我們需要限制「所有使用者」群組的權限,使其不會覆寫佛蒙特州銷售團隊的「模擬身分」權限。

    透過設定來限制 所有使用者 權限

    • 檢視資料設定為 已封鎖
    • 建立查詢設定為
  3. 針對「佛蒙特州銷售團隊」群組,將檢視資料權限變更為「模擬身分」。

    Metabase 會要求您選擇要傳遞至資料庫的使用者屬性,因此請選擇我們稍早建立的 database_role 屬性。

  4. 針對「佛蒙特州銷售團隊」群組,將建立查詢設定為 查詢產生器和原生

    這些權限將允許「佛蒙特州銷售團隊」群組建立查詢產生器問題和原生 SQL 查詢。

因此,您的資料庫的權限設定看起來會像這樣

Data access set to Impersonated with Native querying set to Yes.

驗證模擬身分權限是否正常運作

以「佛蒙特州銷售團隊」群組中的人員身分登入。前往左側導覽列中的瀏覽資料,然後前往 範例資料庫。如果您按一下 人員 表格,您應該只能看到居住在佛蒙特州的人員。

當「佛蒙特州銷售團隊」群組中的人員撰寫 SQL 問題時,也會套用相同的權限。

SELECT * FROM people;

People who live in Vermont.

結果應僅包含來自佛蒙特州的人員。訂閱和警示也應套用這些權限。

下一步:設定多租戶資料權限

了解如何限制客戶對列、欄或結構描述的存取,以實現安全的自助式分析。

下一篇文章