
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本文以 Metabase 官方文档 docs/people-and-groups/managing.md 为主线系统讲解 Metabase 中人员账户与用户组Groups的完整管理流程。你将掌握如何创建、编辑、停用账户如何通过用户属性User Attributes支撑行列级安全与数据库角色伪装如何设计与维护 Administrators、All Users、Data Analysts 等特殊组与自定义组以及忘记管理员密码时如何通过reset-password命令恢复访问。文末还会结合 src/metabase 下的后端源码解释这些操作背后的数据模型与实现原理。Metabase 中的人员People指拥有账户、可以登录你自建 Metabase 实例的用户用户组Groups则是用于归并这些账户、进而承接 权限体系 的容器。一个人可以同时属于多个组其最终权限由各组权限取并集决定。本文介绍的这些账户是登录你的Metabase 的账户与用于管理付费计划的 Metabase Store 账户是两回事。进入人员与用户组管理界面管理入口有两个任选其一按下Cmd/Ctrl K唤起命令面板Command Palette搜索 People点击People设置项点击页面右上角的网格图标AdminPeople即可看到组织内所有人员的列表。从源码看People 管理界面背后是 users_rest/api.clj 提供的一组 REST 端点例如GET /api/user用于分页拉取用户列表管理端前端则基于这些端点完成展示与增删改操作。用户实体在数据库中对应core_user表这一点在 users/models/user.clj 中通过(t2/table-name :model/User ...) :core_user明确映射。创建账户Invite someone管理员可以通过三种方式为组织添加人员方式一手动邀请进入AdminPeople页签点击右上角的Invite someone输入对方的邮箱必填名字和姓氏为可选项。点击Create后账户即被激活——即使对方从未登录过账户也处于 active 状态直到你手动停用账户为止。在 Pro 或 Enterprise 套餐上所有激活账户都会计入用户总数如果一个人拥有多个账户每个账户都会分别计入。邀请后的引导行为取决于你是否已配置邮件已配置 邮件服务Metabase 会自动向对方发送一封登录邀请邮件未配置邮件Metabase 会生成一个临时密码你需要手动转交给对方。从后端实现看手动邀请调用的是 users/models/user.clj 中的create-and-invite-user!它先通过insert-user!写入用户记录随后发布:event/user-invited事件触发内置的通知机制发送邀请邮件。新用户的默认字段值如is_active true、is_superuser false、is_data_analyst false也定义在该文件 insert-default-values 中。方式二从仪表盘或问题Question定向邀请在任意仪表盘或问题上点击Sharing图标选择Invite someone to view this输入邮箱、选择其所属组点击Send invitation。对方注册登录后会被直接引导到该仪表盘或问题。这一机制在后端对应create-and-invite-user!的可选参数invite-target见 users/models/user.clj该参数会随:event/user-invited事件一起传递前端据此将新用户引导至指定内容页。方式三通过 SSO 自动创建如需通过 Google、SAML、OIDC 等身份提供方创建账户参见认证选项。SSO 登录创建的用户如 Google 用户走的是独立的 create-new-google-auth-user! 路径账户创建后立即可用并可选择向所有活跃管理员发送新用户加入通知邮件。编辑账户点击人员行右侧的三个点图标选择Edit user即可修改其姓名和邮箱地址。⚠️ 注意修改账户邮箱会改变对方登录 Metabase 时使用的地址。请确保新邮箱准确无误避免锁死他人登录入口。添加用户属性User Attributes用户属性是挂在账户上的键值对Key-Value它是行列级安全Row and Column Security的必要前提也可用于数据库伪装访问Impersonation——即指定该人员查询数据库时 Metabase 切换使用的数据库角色。手动添加步骤进入AdminPeople找到目标账户点击其three dot...菜单点击Edit user点击 Add an attribute在 Key 中输入属性名例如Department在 Value 中输入适用于该人员的值例如Engineering可选创建一个组用来组织需要接受行列级安全的人员将该人员加入该组。除手动添加外也可以通过 SSO 从身份提供方同步用户属性。从源码实现看用户属性存储于core_user.login_attributes字段JSON 编码定义在 users/models/user.clj 的transform-attributes中入库时会被序列化并统一转为字符串键值出库时同样反序列化为字符串映射。而 add-attributes 函数显示只有:personal类型的用户才携带属性API Key、内部账户等其它类型用户的属性恒为空映射{}——这保证了对 API Key 发起的沙箱查询会正确地报告缺少用户属性而不是误读用户行上残留的属性值。停用账户Deactivating an Account点击人员行右侧的三个点图标选择Deactivate。停用后账户被标记为 inactive、无法再登录但不会删除该人员创建的已保存问题Questions或仪表盘Dashboards。使用 SSO 时你需要在 Metabase 和 IdP身份提供方两侧分别停用账户——停用不会在 Metabase 与 IdP 之间自动同步。如需恢复已停用账户点击人员列表顶部的Deactivated单选按钮查看停用账户列表再点击最右侧的图标即可重新激活恢复其登录能力。删除账户Metabase 的设计取舍Metabase不提供显式的账户删除功能。它采用停用策略账户无法登录但其创建的问题、模型、仪表盘等资产全部保留避免组织数据资产因删号而丢失。如果只是因为账户信息登记错误而想删掉它推荐的做法是修改旧账户的姓名和邮箱改为占位或正确信息停用旧账户创建新账户并填写该人员的正确信息。查看某人的认证方式在人员列表中搜索目标人员观察其姓名旁的图标若显示Google 图标说明该账户通过 Google 凭据登录若没有图标说明该账户使用 Metabase 本地存储的邮箱密码登录。注意认证类型在账户首次创建时即被固定。如果你在 Metabase 中手动创建了用户但对方之后改用 Google 或其它 SSO 登录后者对应的图标不会出现在其姓名旁。SSO 登录会禁用密码登录如果一个原本使用用户名密码注册的账户首次通过 SSO 登录Metabase 会将该账户与 SSO 提供方关联起来。此后该人员将无法再使用用户名密码登录只能通过 SSO 登录。如果需要恢复该账户的密码认证能力需要联系 Metabase 支持团队处理。重置某人的密码若已配置邮件设置人员可通过登录页的 forgot password 链接自助重置若未配置邮件设置对方会看到提示需请管理员代为重置。管理员重置方法点击该账户旁的三点图标选择Reset Password。同样地已配置邮件时对方会收到重置邮件未配置时你会获得一个临时密码需要手动转交。重置管理员密码管理员忘记密码时恢复访问的方式取决于部署形态Metabase Cloud 用户联系 Metabase 支持团队协助重置自托管用户如果你能访问服务器控制台可以借助内置的reset-password命令行工具完成重置。具体步骤如下停止正在运行的 Metabase 应用使用管理员账户对应的邮箱重启 Metabase并附带reset-password参数java --add-opens java.base/java.nioALL-UNNAMED -jar metabase.jar reset-password emailexample.comMetabase 会打印出一个随机 token形如... Resetting password for emailexample.com... OK [[[1_7db2b600-d538-4aeb-b4f7-0cf5b1970d89]]]不带reset-password参数正常重启 Metabase在浏览器中访问/auth/reset_password/:token将:token替换为第 3 步生成的 token完整 URL 形如https://metabase.example.com/auth/reset_password/1_7db2b600-d538-4aeb-b4f7-0cf5b1970d89此时会看到输入新密码的页面为管理员账户设置新密码即可。这一命令的实际实现在 cmd/reset_password.cljreset-password!会先完成应用数据库初始化setup-db!且不创建示例内容然后查找指定邮箱对应的用户找不到用户会报错账户已停用也会明确拒绝Cannot reset the password for the deactivated user最后通过create-password-reset!为该用户生成重置 token并以OK [[[token]]]的格式打印。生成 token 的 URL 拼接逻辑见 form-password-reset-url它使用system/site-url作为站点根地址。退订该人员名下的所有订阅与告警该操作会删除该人员创建的所有仪表盘订阅Subscriptions和告警Alerts并将其从其它订阅/告警的接收人列表中移除。它不会影响 Metabase 之外维护的邮件分发列表。默认用户账户Metabase 内置了一些用于处理系统任务的默认账户。了解它们有助于辨别日志中的可疑登录尝试。这些账户的共同特征客户不会被收取这些账户的费用没有人可以登录这些账户Metabase 会从 Admin People 页签中排除这些账户因此你在人员列表中看不到它们。匿名用户账户Anonymous UserID0名First nameExternal姓Last nameUser邮箱nullMetabase 用这个虚拟账户标识匿名访问例如查看公开问题或仪表盘。它是一个虚拟用户不存在于应用数据库中。你可以在使用分析Usage Analytics中看到该账户的活动记录。Metabase 内部账户Metabase InternalID13371338名First nameInternal姓Last nameMetabase邮箱internalmetabase.comMetabase 用这个账户向实例中装载内容如 Usage Analytics 集合。你可能会在日志中看到internalmetabase.com的活动。该账户的 ID 常量定义于 config/core.cljinternal-mb-user-id 13371338其创建逻辑见 app_db/custom_migrations.clj 中的CreateInternalUser迁移该迁移直接以固定 ID 向core_user插入记录字段包括is_active false、type internal、无密码password nil、password_salt nil并自动将其加入All Users组permissions_group_membership。因此从数据模型上就保证了它永远无法登录。此外 users/models/user.clj 定义的allowed-user-types#{:internal :personal :api-key}也印证了 Metabase 用户体系包含内部账户与 API Key 账户两类特殊实体。用户组Groups权限分配的载体要确定谁对什么有访问权你需要遵循四步创建一个或多个用户组为每个组设定对不同数据库、集合Collections等资源的访问级别将人员加入这些组可选将部分成员提升为组管理员Group Managers。查看和管理用户组进入Admin PanelPeople页签点击侧边菜单中的Groups。从后端看组与成员的关联关系存储于permissions_group与permissions_group_membership两张表成员行上的is_group_manager标志即用于标记组管理员见 permissions/db.clj 对 membership 的查询与写入逻辑。人员可以同时属于多个组最终权限取各组权限的并集。特殊默认组每个 Metabase 都有两个不可删除的特殊默认组Administrators与All Users。Administrators管理员组将某人加入 Administrators 组即可使其成为 Metabase 管理员。管理员可以登录 Admin Panel 并修改系统配置且始终拥有对实例内所有数据的无限制访问权。因此请谨慎决定谁能加入该组。All Users全员组All Users是另一个特殊组每个 Metabase 用户都自动是该组的成员同时他们还可以属于任意多个其它组。官方建议把 All Users 当作新用户默认访问级别的基准来使用。若启用了 Google 单点登录通过该方式加入的新用户会被自动加入 All Users 组。关键原则All Users 组对某项资源的访问权限绝不能大于你正在限制访问的那个组——否则更宽松的设置会胜出取并集。具体见权限设置。Data Analysts数据分析师组你可以将非管理员加入特殊的Data Analysts组授予其 Data Studio 的访问权该功能属于付费套餐特性。默认且不可更改地Data Analyst 组固定获得Data Studio 访问权Library 集合 的 Curate 权限实例内所有数据库、所有表的管理表元数据权限Manage Table Metadata。除上述固定权限外你可以像普通组一样为 Data Analyst 组分配数据、集合与应用权限。另外注意Data Analysts 组中的成员默认对 Transforms 只有只读访问权前提是涉及的表格该成员本就可查看。若要让 Data Analyst创建并运行transforms你需要为其授予相应表上的transform 权限。创建与删除用户组创建进入AdminPeopleGroups点击Add a group按钮。官方建议按团队组织来建组如 Human Resources、Engineering、Finance 等。默认情况下新建组不拥有任何资源的访问权需要你显式配置。删除点击组列表中某组右侧的 X 图标即可移除特殊默认组不可删除。向组中添加/移除人员点击进入某个组点击Add members添加成员点击成员右侧的X将其移出。也可以在People列表中通过Groups列的下拉框直接增删该人员的组归属。从实现角度成员关系的批量调整对应 set-permissions-groups!它对比用户当前组 ID 集合与目标集合在事务内调用remove-user-from-groups!与add-user-to-groups!完成差异同步保证组归属修改的原子性。组管理员Group Managers组管理员可以在自己负责的组内管理其他人员付费套餐特性。组管理员可以向组内添加/移除人员仅限已在 Metabase 拥有账户的人查看AdminPeople页签中的全部人员将他人提升为组管理员或将组管理员降级为普通成员重命名自己的组。但组管理员不是管理员权限有限他们不能创建新组也不能邀请新人员进入 Metabase。提升/降级组管理员点击右上角网格图标AdminPeopleGroups选择目标人员要管理的组若该人员尚不在组内需先将其加入找到目标人员悬停其成员类型Member type点击上箭头提升为组管理员点击下箭头则降级回普通成员。延伸阅读配置单点登录SSO权限策略详解嵌入场景的权限【免费下载链接】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),仅供参考