数据库用户、角色和权限

我们建议创建一个具有以下数据库角色的 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.ac.cn/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 的新角色。
  • 向该角色授予对任何用于 Metabase 操作的表的 INSERTUPDATEDELETE 权限。
  • 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 版本的文档。