設定多租戶數據權限
了解如何限制客戶存取列、欄或結構描述,以實現安全的自助式分析。
單一結構描述與多個客戶(混合數據)
如果所有客戶數據都在相同的結構描述和相同的表格中(通常稱為「數據混合」)
租戶 ID | 欄位 1 | 欄位 2 |
---|---|---|
A | … | … |
B | … | … |
C | … | … |
數據沙箱化是最佳選擇。大多數使用 Metabase 提供多租戶分析的組織將使用
您還可以設定具有數據沙箱權限的 SSO,以便使用者從第一次登入即可獲得正確的列和欄存取權限。若要深入了解多租戶權限和嵌入如何協同運作,請參閱「使用 SSO 和數據沙箱保護數據」。
基於租戶 ID 限制列
假設您有一個名為Data的表格,如下所示
租戶 ID | 卓越指標 | 驚人洞察 |
---|---|---|
A | … | … |
B | … | … |
C | … | … |
您可以建立一個基本沙箱,根據租戶 ID 向不同租戶顯示 Data 的篩選版本。這表示租戶 A 將看到「租戶 ID」欄位值為「A」的列,租戶 B 將看到「租戶 ID」欄位值為「B」的列,依此類推。
以下是基本沙箱的運作方式
- 您將建立一個群組,例如「沙箱租戶」,並將人員的 Metabase 帳戶新增到該群組。
- 針對每個人的帳戶,您將新增使用者屬性,例如「租戶 ID」,並將使用者屬性值設定為「A」、「B」或「C」。
- 設定具有使用者屬性的群組後,請從管理設定 > 權限 建立基本沙箱。
基本沙箱將顯示套用篩選器的「租戶 ID」欄位的 Data 表格。篩選器值將根據每個人的登入動態設定。例如,使用者屬性「租戶 ID」設定為「A」的帳戶將看到依 Tenant ID = A
篩選的 Data 表格。
基於租賃限制欄位
現在,假設您的「驚人洞察」欄位是一項高級功能,而租戶 B 是唯一付費查看這些「驚人洞察」的客戶。租戶 A 和 C 正在省錢,因此他們只能看到「卓越指標」。
租戶 ID | 卓越指標 | 驚人洞察 |
---|---|---|
A | … | |
B | … | … |
C | … |
在這種情況下,您可以將租戶 A 保留在列限制範例中的基本沙箱中。但是您需要將租戶 A 和 C 移動到自訂沙箱 — 這將讓您除了列之外還可以限制欄。
以下是如何設定自訂沙箱以選擇性地隱藏欄位(除了將租戶限制為自己的列之外)
- 建立一個名為「僅指標租戶」的群組。
- 將租戶 A 和租戶 C 的人員移動(或新增)到「僅指標租戶」群組。
當您以不同方式為不同群組沙箱化 Data 表格時,請確保每個 Metabase 帳戶僅屬於單一群組 — 「沙箱租戶」或「僅指標租戶」。
- 針對每個人的 Metabase 帳戶,您都必須新增使用者屬性,例如「租戶 ID」,並將使用者屬性值設定為「A」、「B」或「C」。
-
接下來,您將使用如下所示的 Data 表格建立一個 SQL 問題
SELECT marvelous_metrics FROM tenants WHERE tenant_id = {{ tenant_user_attribute }}
- 將 SQL 問題另存為「卓越指標」。
- 使用「僅指標租戶」群組和「卓越指標」SQL 問題建立自訂沙箱。
自訂沙箱將向「僅指標租戶」群組中的人員顯示「卓越指標」SQL 問題(取代原始 Data 表格)。
例如,使用者屬性「租戶 ID」設定為「A」的人員將僅看到 Data 表格中的「卓越指標」欄位,並篩選到「租戶 ID」欄位值為 A 的列。
多個結構描述(每個客戶一個結構描述)
如果您的客戶數據儲存在同一個結構描述或一個數據庫中不同結構描述中的不同表格中,如下所示
Tenant A 的結構描述
Tenant A | 欄位 1 | 欄位 2 |
---|---|---|
列 1 | … | … |
列 2 | … | … |
列 3 | … | … |
Tenant B 的結構描述
Tenant B | 欄位 1 | 欄位 2 |
---|---|---|
列 1 | … | … |
列 2 | … | … |
列 3 | .. | … |
您可以選擇
與混合資料不同,每個客戶一個結構描述(反社交?)資料與沙箱不相容,因為沙箱只能在列和欄位層級分配權限,而不能在結構描述層級分配權限。
授予客戶其結構描述的自助服務或唯讀權限
假設您有一個包含十個不同表格的單一資料庫,而這些表格中的每一個都對應到一個客戶(在本例中,是不同的公司)。我們的目標是確保每個客戶只能存取包含其自身資訊的表格。
注意:以下方法假設您的客戶不需要存取 Metabase 的原生 SQL 編輯器,而是使用查詢建立器來提問。
-
如果您尚未執行此操作,請將您的資料來源連接到 Metabase。
-
在管理設定 > 權限 > 資料中,封鎖所有使用者群組對資料庫的存取權。
-
在管理設定 > 人員中,為您的第一個客戶建立群組。您可能每間公司只需要一個群組,但如果您的客戶希望他們的一些員工能夠提出問題,而另一些員工只能查看問題,您就需要為每個客戶建立多個群組,以便您可以設定不同的權限層級。根據某些已定義的慣例命名您的群組可以幫助您保持井然有序 — 可以考慮類似公司 A (自助服務) 和 公司 A (唯讀) 的名稱。
-
返回權限 > 資料 > 資料庫頁面,然後授予您新建立的群組對應於正確客戶的表格的存取權。如果您希望您的客戶能夠在他們的表格內提出問題和建立儀表板,請將他們的建立查詢權限變更為查詢建立器。在這種情況下,「建立查詢」存取權是指表格,而不是整個資料庫。
如果您的客戶有一些員工應該只查看資料(而不是擁有自助服務存取權),您需要建立集合來存放這些特定問題和儀表板。請參閱集合權限。
避免授予您的群組對原生 SQL 編輯器的存取權,因為這種原生查詢編輯允許人員查詢他們在 Metabase 中看不到且不應存取的表格。
-
邀請您的第一位使用者,並在此過程中將他們新增到適當的群組。如果您使用 SSO 來處理帳戶建立,您將不需要手動邀請使用者。
-
重複步驟 3–5,為您的十個客戶中的每一個客戶新增使用者帳戶。
如果您授予群組對資料庫中所有表格的存取權,然後稍後修改您的資料庫以包含新表格,Metabase 將預設授予該群組對新表格的存取權。但是,如果您已將每個群組的權限限定為單一表格 — 就像我們在上面所做的那樣 — Metabase 將預設隱藏您新增的任何新表格。
授予客戶其結構描述的原生 SQL 存取權
由於 Metabase 的 SQL 編輯器需要對您的整個資料庫進行不受限制的存取,因此使用上述方法啟用它會讓您的客戶查詢不屬於他們的表格。如果原生 SQL 查詢對您的客戶來說是必須的
-
在資料庫層級(而不是在 Metabase 中)為您的第一個客戶建立使用者帳戶。此使用者帳戶應僅具有存取其資料庫中特定表格或結構描述的權限。例如,如果您有 Postgres 資料庫,您需要透過 psql 將使用者新增到您的資料庫。在 Postgres 中,您接著只會授予他們對您希望客戶看到的表格的權限。
-
在 Metabase 中,使用您剛在資料庫中建立的使用者帳戶新增資料庫連線。
-
在 Metabase 中建立新的群組。授予該群組對您新新增的資料庫(即對應於該客戶結構描述的連線)的存取權。由於資料庫層級的使用者角色決定了您的客戶可以查看的內容,您可以授予群組可以查看資料庫的權限,以及查詢建立器和原生存取權。
屬於該群組的人員將能夠在 Metabase 中看到 Postgres 使用者(或您正在使用的任何資料庫)在資料庫中有權存取的所有表格。如果您稍後想要隱藏表格,您需要在資料庫本身中變更權限,而不是在 Metabase 中。即使您在 Metabase 中隱藏了表格,具有原生存取權的人員仍然可以查詢它們。
-
邀請您的第一位使用者,並在此過程中將他們新增到適當的群組。如果您使用 SSO 來處理帳戶建立,您將不需要手動邀請使用者。
-
為其餘客戶重複步驟 1–4。在 Metabase 中,看起來您新增的資料庫數量與您的客戶數量一樣多。
以程式設計方式建立沙箱權限
如果您要服務數百或數千名客戶,請考慮使用 Metabase API 編寫權限設定流程的腳本。如果您需要設定新的 Metabase 執行個體,或想要為您的每位客戶複製相同的儀表板和已儲存的問題,序列化功能(在 Pro 和 Enterprise 方案上提供)可以幫助加快速度。請記住,序列化不包含權限設定,因此您需要編寫腳本或手動設定哪些群組可以存取每個表格。
延伸閱讀
下一步:如何追蹤您的資料
設定使用情況分析警示,以便在有人變更設定、下載資料或將資料公開時收到通知。