使用模擬身分以取得 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_role
與 vermont_sales_team
。
將群組的權限設定為「模擬身分」
您需要限制「所有使用者」群組的預設權限,然後為您的新群組新增「模擬身分」權限。
-
前往管理設定 > 權限 > [您的資料庫]
-
限制 所有使用者 群組的權限。
多個群組中的人員擁有其所有群組中最寬鬆的存取權。由於每個 Metabase 使用者都屬於「所有使用者」群組,因此我們需要限制「所有使用者」群組的權限,使其不會覆寫佛蒙特州銷售團隊的「模擬身分」權限。
透過設定來限制 所有使用者 權限
- 將檢視資料設定為 已封鎖
- 將建立查詢設定為 否。
-
針對「佛蒙特州銷售團隊」群組,將檢視資料權限變更為「模擬身分」。
Metabase 會要求您選擇要傳遞至資料庫的使用者屬性,因此請選擇我們稍早建立的
database_role
屬性。 -
針對「佛蒙特州銷售團隊」群組,將建立查詢設定為 查詢產生器和原生。
這些權限將允許「佛蒙特州銷售團隊」群組建立查詢產生器問題和原生 SQL 查詢。
因此,您的資料庫的權限設定看起來會像這樣
驗證模擬身分權限是否正常運作
以「佛蒙特州銷售團隊」群組中的人員身分登入。前往左側導覽列中的瀏覽資料,然後前往 範例資料庫。如果您按一下 人員 表格,您應該只能看到居住在佛蒙特州的人員。
當「佛蒙特州銷售團隊」群組中的人員撰寫 SQL 問題時,也會套用相同的權限。
SELECT * FROM people;
結果應僅包含來自佛蒙特州的人員。訂閱和警示也應套用這些權限。
下一步:設定多租戶資料權限
了解如何限制客戶對列、欄或結構描述的存取,以實現安全的自助式分析。