数据库用户、角色和权限
我们建议创建一个具有以下数据库角色的metabase
数据库用户:
analytics
用于读取分析中使用的任何模式或表的访问权限。- 可选的 为写入访问启用
metabase_actions
的表格,用于 Metabase 动作。 - 可选的 为写入访问启用
metabase_model_persistence
,用于 Metabase 模型持久化所使用的架构。
根据使用案例将权限捆绑到角色中,可以更容易地管理未来的权限(尤其是在 多租户情况 下)。例如,您可以
- 使用相同的
analytics
角色访问您数据栈中的其他 BI 工具,这些工具需要只读访问数据库中的分析表格。 - 撤销对
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 操作的表格的
INSERT
、UPDATE
和DELETE
权限。 - 将
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
权限来设置用于模型缓存的专用架构,以及对该架构的写入访问(INSERT
、UPDATE
、DELETE
)。
除了 最低数据库权限 之外
- 创建一个名为
metabase_model_persistence
的新角色。 - 给该角色授予对数据库的
CREATE
访问权限。 - 给该角色授予对用于模型持久化的架构的
INSERT
、UPDATE
和DELETE
权限。 - 将
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 的数据库用户应该拥有对您希望存储上传的模式的写入访问权限(INSERT
、UPDATE
、DELETE
)。
您首先需要创建一个用于存储上传的架构(或使用现有的架构),并告诉 Metabase 您希望使用该架构来存储上传。
除了 最低数据库权限 之外
- 创建一个名为
metabase_uploads
的新角色。 - 将
INSERT
、UPDATE
和DELETE
权限赋予您想要存储上传的架构。 - 将
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_tangerine
和metabase_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 的其他版本文档。