資料庫使用者、角色和權限

我們建議您建立一個具有下列資料庫角色的 metabase 資料庫使用者

將您的權限捆綁到基於使用案例的角色中,可讓您未來更輕鬆地管理權限 (尤其是在多租戶情況下)。例如,您可以

  • 針對資料堆疊中需要對資料庫中的分析表格進行唯讀存取的其他 BI 工具,使用相同的 analytics 角色。
  • 撤銷 metabase_model_persistence 的寫入權限,而不會影響 metabase_actions 的寫入權限。

最低資料庫權限

為了在 Metabase 中檢視和查詢您的表格,您必須授與 Metabase 資料庫使用者

  • CONNECT 至您的資料庫。
  • SELECT 權限,用於您想要在 Metabase 中使用的任何結構描述或表格。

為了組織這些權限 (並讓日後的維護更輕鬆)

  • 建立一個名為 analytics 的資料庫角色。
  • 建立一個名為 metabase 的資料庫使用者。
  • metabase 新增至 analytics 角色。
  • 將權限新增至 analytics 角色。

例如,如果您使用的是 Postgres 資料庫,您將以管理員身分登入並執行 SQL 陳述式

-- Create a role named "analytics".
CREATE ROLE analytics WITH LOGIN;

-- Add the CONNECT privilege to the role.
GRANT CONNECT ON DATABASE "your_database" TO analytics;

-- Create a database user named "metabase".
CREATE USER metabase WITH PASSWORD "your_password";

-- Give the role to the metabase user.
GRANT analytics TO metabase;

-- Add query privileges to the role (options 1-4):

-- Option 1: Uncomment the line below to let users with the analytics role query ALL DATA (In Postgres 14 or higher. See [Predefined Roles](https://postgresql.dev.org.tw/docs/current/predefined-roles.html#PREDEFINED-ROLES)).
-- GRANT pg_read_all_data TO analytics;

-- Option 2: Uncomment the line below to let users with the analytics role query anything in the DATABASE.
-- GRANT USAGE ON DATABASE "your_schema" TO analytics;
-- GRANT SELECT ON DATABASE "your_schema"  TO analytics;

-- Option 3: Uncomment the line below to let users with the analytics role query anything in a specific SCHEMA.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON ALL TABLES IN SCHEMA "your_schema" TO analytics;

-- Option 4: Uncomment the line below to let users with the analytics role query anything in a specific TABLE.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON "your_table" IN SCHEMA "your_schema" TO analytics;

根據您使用 Metabase 的方式,您也可以額外授與

  • TEMPORARY 權限來建立暫存表格。
  • EXECUTE 權限來使用預存程序或使用者定義函數。

請記住,當您將權限授與角色時,具有該角色的所有使用者都將獲得這些權限。

授與所有資料庫權限

如果您還不想建構您的資料庫權限

  • 建立一個 metabase 資料庫使用者。
  • 授與 metabase 對資料庫的所有權限。
-- Create a database user named "metabase".
CREATE USER metabase WITH PASSWORD "your_password";

-- Give the user read and write privileges to anything in the database.
GRANT ALL PRIVILEGES ON "database" TO metabase;

如果您要連線到本機資料庫以進行開發或測試,這會是一個不錯的選項。

啟用動作的權限

動作 可讓 Metabase 寫回您資料庫中的特定表格。

除了最低資料庫權限之外,您還需要授與對任何與動作搭配使用的表格的寫入權限

  • 建立一個名為 metabase_actions 的新角色。
  • 授與該角色 INSERTUPDATEDELETE 權限,用於任何與 Metabase 動作搭配使用的表格。
  • metabase_actions 角色授與 metabase 使用者。
-- Create a role to bundle database privileges for Metabase actions.
CREATE ROLE metabase_actions WITH LOGIN;

-- Grant write privileges to the TABLE used with Metabase actions.
GRANT INSERT, UPDATE, DELETE ON "your_table" IN SCHEMA "your_schema" TO metabase_actions;

-- Grant role to the metabase user.
GRANT metabase_actions TO metabase;

啟用模型持久性的權限

模型持久性 可讓 Metabase 將查詢結果儲存到您資料庫中的特定結構描述。Metabase 的資料庫使用者將需要 CREATE 權限來設定模型快取的專用結構描述,以及對該結構描述的寫入權限 (INSERTUPDATEDELETE)。

除了最低資料庫權限之外

  • 建立一個名為 metabase_model_persistence 的新角色。
  • 授與該角色對資料庫的 CREATE 存取權。
  • 授與該角色 INSERTUPDATEDELETE 權限,用於模型持久性所使用的結構描述。
  • metabase_model_persistence 角色授與 metabase 使用者。
-- Create a role to bundle database privileges for Metabase model persistence.
CREATE ROLE metabase_model_persistence WITH LOGIN;

-- If you don't want to give CREATE access to your database,
-- add the schema manually before enabling modeling persistence.
GRANT CREATE ON "database" TO metabase_model_persistence;

-- Grant write privileges to the SCHEMA used for model persistence.
GRANT USAGE ON "your_schema" TO metabase_model_persistence;
GRANT INSERT, UPDATE, DELETE ON "your_model's_table" IN SCHEMA "your_schema" TO metabase_model_persistence;

-- Grant role to the metabase user.
GRANT metabase_model_persistence TO metabase;

啟用上傳的權限

您可以將 CSV 上傳到支援的資料庫。Metabase 的資料庫使用者應具有對您想要儲存上傳內容的結構描述的寫入權限 (INSERTUPDATEDELETE)。

您首先需要建立一個結構描述來儲存上傳內容 (或使用現有的結構描述),並告知 Metabase 您想要使用該結構描述來儲存上傳內容

除了最低資料庫權限之外

  • 建立一個名為 metabase_uploads 的新角色。
  • 授與該角色 INSERTUPDATEDELETE 權限,用於您想要儲存上傳內容的結構描述。
  • metabase_uploads 角色授與 metabase 使用者。
-- Create a role to bundle database privileges for uploads.
CREATE ROLE metabase_uploads WITH LOGIN;

-- Grant write privileges to the SCHEMA used for uploads.
GRANT USAGE ON "your_schema" TO metabase_uploads;
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "your_schema" TO metabase_uploads;

-- Grant role to the metabase user.
GRANT metabase_uploads TO metabase;

多租戶權限

如果您要為需要 SQL 存取的客戶設定多租戶權限,您可以為每位客戶建立一個資料庫連線。這表示每位客戶都將使用自己的資料庫使用者連線到資料庫。

假設您有名為 Tangerine 和 Lemon 的客戶

  • 建立新的資料庫使用者 metabase_tangerinemetabase_lemon
  • 建立一個具有 CONNECT 權限的 customer_facing_analytics 角色。
  • 建立角色以捆綁特定於每位客戶使用案例的權限。例如
    • tangerine_queries,用於捆綁讀取權限,讓人員可以針對 Tangerine 結構描述查詢和建立預存程序。
    • lemon_queries,用於捆綁讀取權限,讓人員可以查詢 Lemon 結構描述中的表格。
    • lemon_actions,用於捆綁建立 Lemon 結構描述中 Lemonade 表格上的動作所需的寫入權限。
  • 將每位使用者新增至其各自的角色。
-- Create one database user per customer.
CREATE USER metabase_tangerine WITH PASSWORD "orange";
CREATE USER metabase_lemon WITH PASSWORD "yellow";

-- Create a role to bundle privileges for all customers.
CREATE ROLE customer_facing_analytics;
GRANT CONNECT ON DATABASE "citrus" TO customer_facing_analytics;
GRANT customer_facing_analytics TO metabase_tangerine, metabase_lemon;

-- Create a role to bundle analytics read access for customer Tangerine.
CREATE ROLE tangerine_queries;
GRANT USAGE ON SCHEMA "tangerine" TO tangerine_queries;
GRANT SELECT, EXECUTE ON ALL TABLES IN SCHEMA "tangerine" TO tangerine_queries;
GRANT tangerine_queries TO metabase_tangerine;

-- Create a role to bundle analytics read access for customer Lemon.
CREATE ROLE lemon_queries;
GRANT USAGE ON SCHEMA "lemon" TO lemon_queries;
GRANT SELECT ON ALL TABLES IN SCHEMA "lemon" TO lemon_queries;
GRANT lemon_queries TO metabase_lemon;

-- Create a role to bundle privileges to Metabase actions for customer Lemon.
CREATE ROLE lemon_actions;
GRANT INSERT, UPDATE, DELETE ON TABLE "lemonade" IN SCHEMA "lemon" TO lemon_actions;
GRANT lemon_actions TO metabase_lemon;

我們建議根據每位客戶的使用案例將權限捆綁到角色中。這樣一來,您就可以跨客戶重複使用常見的權限,同時仍然能夠授與或撤銷每位客戶的精細權限。例如

  • 如果客戶 Tangerine 需要從另一個分析工具查詢 Tangerine 結構描述,您可以在設定該工具時使用 tangerine_queries 角色。
  • 如果客戶 Lemon 決定他們不再想要使用 Metabase 動作 (但他們仍然想要提出問題),您可以簡單地撤銷或刪除 lemon_actions 角色。

延伸閱讀

閱讀其他Metabase 版本的文件。