尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Metabase 数据库用户、角色与权限配置完整指南:最小权限原则与写权限拆分实践

发布时间:2026/9/10 16:46:47

资讯中心
01
ARTICLE

Metabase 数据库用户、角色与权限配置完整指南:最小权限原则与写权限拆分实践

Metabase 数据库用户、角色与权限配置完整指南:最小权限原则与写权限拆分实践
Metabase 数据库用户、角色与权限配置完整指南最小权限原则与写权限拆分实践【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase导读本文以 docs/databases/users-roles-privileges.md 为骨架系统讲解如何为 Metabase 创建专用的数据库用户与角色以最小权限原则为只读分析配置metabase用户再按功能场景Actions、可编辑表格、Transforms、模型持久化、CSV 上传分别拆分只写角色并给出多租户场景下的按客户隔离授权方案。读完本文你将掌握一套可直接复制执行的 PostgreSQL以及 MySQL、Redshift、ClickHouse 等授权 SQL 模板理解 Metabase 主连接与可写连接writable connection的权限分工以及如何避免在生产环境中给 Metabase 连接授予过高的数据库权限。一、推荐的整体授权方案角色捆绑 最小权限Metabase 官方推荐的数据库账号治理思路非常明确创建一个专用的metabase数据库用户仅授予只读访问权限CONNECTSELECT且权限范围只覆盖参与分析的 schema 或表即最小数据库权限见下文第二节。如果启用了需要写数据库的功能不要把这些写权限直接堆到主连接上而是按用途拆分出独立的角色metabase_transforms授予 Transforms数据变换所需写权限metabase_uploads授予 CSV 上传所需写权限metabase_actions授予可编辑表格与 Metabase Actions 所需写权限metabase_model_persistence授予模型持久化所需写权限。将权限按用例捆绑进角色role核心好处是便于未来维护尤其在多租户场景下。例如同一套analytics角色可以复用于数据栈中其他 BI 工具让它们也以只读方式访问同一批分析表当你需要撤销metabase_model_persistence的写权限时不会影响到metabase_actions的写权限。重要实践对于一切需要写数据库的操作官方建议使用独立的可写连接Writable connection只把写角色授予可写连接所用的数据库用户主连接始终保持只读。这一设计在源码层面也有印证src/metabase/driver/connection.clj等驱动层代码中即存在对可写连接writable-connection的解析与切换逻辑。二、最小数据库权限只读分析所需为了让 Metabase 能查看并查询你的表至少需要给数据库用户授予CONNECT连接到数据库SELECT访问在 Metabase 中使用的任意 schema 或表。推荐的整理方式是建立角色层级把维护成本降到最低创建名为analytics的数据库角色创建名为metabase的数据库用户把metabase加入analytics角色把各项权限授予analytics角色。以 PostgreSQL 为例管理员登录后执行以下 SQL-- 创建名为 analytics 的角色。 CREATE ROLE analytics WITH LOGIN; -- 给角色添加 CONNECT 权限。 GRANT CONNECT ON DATABASE your_database TO analytics; -- 创建名为 metabase 的数据库用户。 CREATE USER metabase WITH PASSWORD your_password; -- 把角色授予 metabase 用户。 GRANT analytics TO metabase; -- 给角色添加查询权限以下四种方案任选其一 -- 方案 1让拥有 analytics 角色的用户查询 ALL DATAPostgres 14 及以上 -- 见 PostgreSQL 官方文档 Predefined Roles。 -- GRANT pg_read_all_data TO analytics; -- 方案 2让拥有 analytics 角色的用户查询数据库中的任意内容。 -- GRANT USAGE ON DATABASE your_schema TO analytics; -- GRANT SELECT ON DATABASE your_schema TO analytics; -- 方案 3让拥有 analytics 角色的用户查询某个 SCHEMA 中的任意内容。 -- GRANT USAGE ON SCHEMA your_schema TO analytics; -- GRANT SELECT ON ALL TABLES IN SCHEMA your_schema TO analytics; -- 方案 4让拥有 analytics 角色的用户查询某个具体 TABLE。 -- GRANT USAGE ON SCHEMA your_schema TO analytics; -- GRANT SELECT ON your_table IN SCHEMA your_schema TO analytics;其中方案 1 利用了 Postgres 14 的内置预定义角色pg_read_all_data一条语句即可放开全库只读方案 24 则把权限粒度从数据库收窄到 schema 再到具体表实践中最常用的是方案 3按 schema 隔离分析数据。根据 Metabase 的使用方式还可以额外授予TEMPORARY允许创建临时表EXECUTE允许调用存储过程或用户自定义函数。务必记住权限是授予角色的因此拥有该角色的所有用户都会继承这些权限——这也是为什么不要直接把权限散落在单个用户上的原因。三、不纠结权限结构时的兜底方案授予全部权限如果暂时不想细化权限结构可以用最简方式创建metabase数据库用户把数据库的全部权限授予metabase。-- 创建名为 metabase 的数据库用户。 CREATE USER metabase WITH PASSWORD your_password; -- 给用户授予数据库中任意内容的读写权限。 GRANT ALL PRIVILEGES ON database TO metabase;这个方案适合本地开发或测试时连接数据库的场景官方明确建议生产环境避免使用。在生产中请回到第二节的最小权限结构或至少为写操作拆出独立角色与可写连接。四、Actions 与可编辑表格metabase_writer写角色Actions操作与可编辑表格editable table data都允许 Metabase 将数据写回数据库中的特定表。目前两者都只支持PostgreSQL 与 MySQL见 editable-tables.md 与 actions/introduction.md。在最小数据库权限之外需要为所有要写入的表额外授予写权限创建名为metabase_writer的新角色给该角色授予相关表的INSERT、UPDATE、DELETE权限把metabase_writer角色授予数据库连接所用的用户。官方建议使用可写连接并且只把该角色授予可写连接所用的用户主连接保持只读。-- 创建角色用于捆绑 Metabase 写数据库所需的权限。 CREATE ROLE metabase_writer WITH LOGIN; -- 给 TABLE 授予写权限。 GRANT INSERT, UPDATE, DELETE ON your_table IN SCHEMA your_schema TO metabase_writer; -- 把角色授予 metabase 用户。 GRANT metabase_writer TO metabase;权限落地后管理员还需在Admin Databases 选择数据库中打开Model actionsActions与Editable table data可编辑表格开关。注意Actions 只运行在其所挂模型背后的原始表上不会修改模型定义本身而可编辑表格则允许管理员像操作电子表格一样增删改表中的行Metabase 会强制类型约束如不允许修改自增主键、不允许写入类型不符的值。五、模型持久化metabase_model_persistence写角色模型持久化让 Metabase 把模型查询结果保存到数据仓库中专门的 schema注意不是 Metabase 应用数据库从而让模型及其衍生问题加载更快。目前仅支持PostgreSQL、MySQL、Redshift且与行级/列级安全、身份模拟impersonation不兼容。官方文档同时提示模型持久化未来将被 Transforms 取代新项目建议优先考虑 Transforms。Metabase 的数据库用户需要CREATE权限来建立模型持久化专用 schema以及对该 schema 的写权限INSERT、UPDATE、DELETE。在最小数据库权限之外创建名为metabase_model_persistence的新角色给该角色授予数据库的CREATE权限给该角色授予模型持久化所用 schema 的INSERT、UPDATE、DELETE权限把metabase_model_persistence角色授予连接用户建议仅授予可写连接的用户。-- 创建角色用于捆绑 Metabase 模型持久化权限。 CREATE ROLE metabase_model_persistence WITH LOGIN; -- 如果不想给数据库授予 CREATE 权限 -- 可以在启用模型持久化之前手动创建 schema。 GRANT CREATE ON database TO metabase_model_persistence; -- 给模型持久化所用的 SCHEMA 授予写权限。 GRANT USAGE ON your_schema TO metabase_model_persistence; GRANT INSERT, UPDATE, DELETE ON your_models_table IN SCHEMA your_schema TO metabase_model_persistence; -- 把角色授予 metabase 用户。 GRANT metabase_model_persistence TO metabase;在 Metabase 侧的操作路径是Admin Performance Model persistence打开实例级开关并设定刷新频率可选 cron 自定义语法→ 在Admin Databases 对应数据库中打开模型持久化 → 对单个模型在... Edit settings中打开Persist model data。若连接凭据权限不足需要按界面 info 图标提示的 schema 名手动执行CREATE SCHEMA IF NOT EXISTS schema_namePostgreSQL 示例。这一流程在源码中由src/metabase/model_persistence/目录下的模块驱动src/metabase/model_persistence/api.clj提供了持久化的 API 入口。六、Transforms 与 CSV 上传的写角色6.1 Transformsmetabase_transformsTransforms 允许 Metabase 把查询结果写回数据库相当于在 Metabase 内完成 ETL 的 T支持 BigQuery、ClickHouse仅 Cloud、MySQL/MariaDB、PostgreSQL、Redshift、Snowflake、SQL Server。官方建议为 Transforms创建专用 schemaMetabase 的数据库用户需要能够创建和删除 transform 表。在最小数据库权限之外创建名为metabase_transforms的新角色为 Transforms 创建专用 schema给metabase_transforms角色授予该 schema 的CREATE TABLE/ALTER/DROP权限把角色授予连接用户建议仅授予可写连接的用户。某些情况下Metabase 会提供新建 schema的选项此时还需要给 metabase 用户授予CREATE SCHEMA权限ClickHouse 则为CREATE DATABASE。Transforms 源码实现位于src/metabase/transforms/query_impl.clj它会创建目标表、写入结果并触发表同步。6.2 CSV 上传metabase_uploadsMetabase 支持向受支持的数据库上传 CSVPostgreSQL、MySQL、Snowflake、Redshift、ClickHouse Cloud。数据库用户需要对存放上传数据的 schema 具备INSERT、UPDATE、DELETE写权限。首先需要创建或复用一个用于存放上传数据的 schema并在Admin Settings Uploads中选择该数据库与 schema 来存储数据。在最小数据库权限之外创建名为metabase_uploads的新角色给该角色授予上传 schema 的INSERT、UPDATE、DELETE权限把metabase_uploads角色授予连接用户。-- 创建角色用于捆绑上传权限。 CREATE ROLE metabase_uploads WITH LOGIN; -- 给上传所用的 SCHEMA 授予写权限。 GRANT USAGE ON your_schema TO metabase_uploads; GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA your_schema TO metabase_uploads; -- 把角色授予 metabase 用户。 GRANT metabase_uploads TO metabase;需要留意的是GRANT ... ON ALL TABLES IN SCHEMA只作用于执行时刻已存在的表Metabase 后续新建的上传表不会被自动覆盖这在实际运行中会反映在src/metabase/upload/impl.clj的表创建逻辑中——因此若上传表由 Metabase 动态创建通常需要更宽的 schema 级权限如CREATE或对新表补授权限。此外向 MySQL 上传时建议在 MySQL 侧开启local_infile命令行参数--local-infileON以加快上传速度否则 Metabase 会自动回退到慢速上传模式。七、多租户权限隔离按客户拆分角色当需要为拥有 SQL 访问权限的客户搭建多租户隔离时可以为每个客户创建一个独立的数据库连接详见 embedding 文档中的原生 SQL 访问授权每个客户使用自己的数据库用户连接数据库。以 Tangerine 和 Lemon 两家客户为例创建数据库用户metabase_tangerine和metabase_lemon创建公共角色customer_facing_analytics授予CONNECT权限按客户用例创建捆绑角色例如tangerine_queries捆绑 Tangerine schema 的读权限供查询及创建存储过程使用lemon_queries捆绑 Lemon schema 中表的读权限lemon_actions捆绑 Lemon schema 中lemonade表上创建 Actions 所需的写权限把各用户加入各自对应的角色。-- 为每个客户创建一个数据库用户。 CREATE USER metabase_tangerine WITH PASSWORD orange; CREATE USER metabase_lemon WITH PASSWORD yellow; -- 创建捆绑所有客户公共权限的角色。 CREATE ROLE customer_facing_analytics; GRANT CONNECT ON DATABASE citrus TO customer_facing_analytics; GRANT customer_facing_analytics TO metabase_tangerine, metabase_lemon; -- 创建捆绑 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; -- 创建捆绑 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; -- 创建捆绑 Lemon 客户 Metabase Actions 权限的角色。 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 schema可以直接复用tangerine_queries角色去配置那个工具如果 Lemon 决定停用 Metabase Actions但仍保留提问能力只需撤销或删除lemon_actions角色不影响其他权限。八、主连接与可写连接权限的最终落地形态综合以上所有角色权限配置的最终形态取决于连接方式。Metabase 的可写连接是一个挂在现有数据库连接上的可选附加连接主连接负责查询保持只读对应analytics角色的权限可写连接负责 Transforms、CSV 上传、可编辑表格、Actions、模型持久化等写操作对应各写角色且只需把写角色授予可写连接的用户。Metabase 会在后台根据用户操作自动切换连接。可写连接可以使用与主连接不同的数据库用户甚至可以连接到不同的数据库例如主连接指向只读副本可写连接指向主库。需要注意的限制可写连接不能与数据库路由database routing同时使用且可写连接必须与主连接使用相同的数据库引擎。如果移除了可写连接Metabase 将回退到使用主连接执行写操作此时主连接就必须具备相应的写权限——这正是本文介绍的各类角色的用武之地。九、总结与检查清单场景需要的最小权限建议角色支持数据库只读分析基础CONNECTSELECTanalytics所有 Metabase 支持的数据库Actions / 可编辑表格目标表的INSERT/UPDATE/DELETEmetabase_writerPostgreSQL、MySQL模型持久化数据库CREATE 专属 schema 写权限metabase_model_persistencePostgreSQL、MySQL、RedshiftTransforms专属 schema 的CREATE TABLE/ALTER/DROPmetabase_transformsBigQuery、ClickHouse、MySQL、PostgreSQL、Redshift、Snowflake、SQL ServerCSV 上传上传 schema 的INSERT/UPDATE/DELETEmetabase_uploadsPostgreSQL、MySQL、Snowflake、Redshift、ClickHouse多租户 SQL 访问每客户独立用户 按用例捆绑角色customer_facing_analytics 客户专属角色视租户场景而定落地检查清单主连接用户只授予analytics只读角色生产环境禁用GRANT ALL PRIVILEGES写权限一律拆到独立角色只授予可写连接的用户权限变更通过角色进行GRANT role TO user/REVOKE role FROM user避免逐表散改多租户场景坚持每客户一用户 按用例捆绑角色便于复用与回收。延伸阅读可写连接Writable connection连接与管理数据库设置 CSV 数据上传权限体系介绍人员与分组概览【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。