ByteHouse 遵循 RBAC 模型设计了权限模型,支持单集群和多集群权限管理。ByteHouse 权限管理支持通过角色、行为用户授予权限,实现对集群中的数据库、表、列、索引、视图等数据资源的灵活访问控制。本文介绍了 ByteHouse 权限模型的基本概念和架构设计。
在一个 ByteHouse 集群内,权限模型涉及以下 5 个概念:
ByteHouse 基于 ClickHouse 社区的默认权限体系构建了自己的权限模型,包含了单集群和多集群模型。ClickHouse 社区的默认权限体系为 RBAC 模型,支持用户(User)、角色(Role)、权限(Privilege)、实体(Data Object)四元组的相互关联,通过 Revoke 和 Grant 语法进行互联操作,实现权限的分配和调整。ByteHouse 在 ClickHouse 权限模型的基础上构建了多集群模型,支持通过为用户赋予跨集群的角色和权限,实现跨集群的数据统一管控,提升权限管控效率的同时,细化权限管控粒度,满足不同场景的权限管控需求。
单集群模型 | 多集群模型 |
---|---|
在单个集群下,ByteHouse 企业版的权限模型如下,支持将直接为用户赋予权限,也支持通过角色为用户赋予权限。
| 多集群模型实现了跨集群用户权限管理。系统管理员可在每个集群中基于数据对象关联的权限创建角色,授予给同集群的不同用户,同一用户可以存在于不同的集群。 注意
|
ByteHouse 为您提供了默认角色和自定义角色,默认角色包含 4 种,分别为 System Admin、Cluster Admin、Data Engineer、Query User,不同的角色的权限不同。同时,您也可以创建自定义角色,自定义角色名称及权限,自定义角色名称不能与默认角色重名。
自定义角色 | Query User | Data Engineer | Cluster Admin | System Admin | |
---|---|---|---|---|---|
角色简介 | 用户自定义角色 | 仅可查询数据的只读角色 | 可操作数据的角色 | 可操作整个集群的角色 | 可操作整个 ByteHouse GUI 的角色 |
角色级别 | 集群内角色 | 集群内角色 | 集群内角色 | 集群内角色 | 跨集群角色 |
库表权限 | 默认无,支持用户自定义库表权限范围 | 默认只有 Default 库的读权限。 | 默认有 Default 库的读写权限。 | 默认有集群内所有库表的读写权限 | 默认有租户下所有集群所有库表的读写权限 |
资源权限/控制台功能 | |||||
数据管理 | 无 | 无 | 无 | 角色管理、角色授权 | 用户管理、用户授权、角色管理、角色授权 |
数据导入 | 查看 | 查看 | 查看、编辑 | 查看、编辑 | 查看、编辑 |
数据查询 | 查看、查询 | 查看、查询 | 查看、查询 | 查看、查询 | 查看、查询 |
集群管理 | 查看 | 查看 | 查看 | 查看、集群管理 | 查看、集群管理 |
ByteHouse 的用户可细分为主用户、子用户、系统管理员、非管理员用户、系统用户。
用户类型 | 定义 | 用户默认权限与授权操作说明 |
---|---|---|
用户 | 主用户与子用户统称用户。一个用户对应一个用户名与密码。 | 通用描述,请参见主用户和子用户权限和授权说明区分使用。 |
主用户 | 火山引擎主账号对应的用户,一个火山账号只有一个主用户。 | 该用户拥有 ByteHouse 所有服务的访问权限,可在所属租户下创建子用户并分配特定的权限。 |
子用户 | 火山引擎账号主用户在 ByteHouse 中创建的用户。 | 该用户创建时默认不具备任何 ByteHouse 集群的访问权限,需要主用户分配特定的权限策略之后,普通用户通过的主用户分配的子用户密码登录并使用 ByteHouse 的服务。 |
系统管理员 | 具有“system_admin”角色的用户。 | 该用户为超级管理员,可管控 ByteHouse 全部功能,系统默认创建。 |
非管理员用户 | 未被授予 “system_admin” 角色的用户。 | 该用户的权限需由系统管理员授予,不同用户的权限不同,可联系系统管理员配置,配置操作详见子用户管理。 |
系统用户 | DBA 用户,ByteHouse 引擎配置用户。 | 该用户仅用于系统内部通信,仅在用户列表中展示,无需操作。一个火山引擎账号只有一个 DBA 用户,但每个集群里的密码会不同。 |
不管使用者是谁,进行权限管控的原则都是「最小权限分配」原则:只分配该用户活动需要的必要权限。