ByteHouse 的权限模型基于 ClickHouse 社区。ClickHouse 社区的默认权限体系为 RBAC 模型,支持用户(User)、角色(Role)、权限(Prevililege)、实体(Data Object)四元组的相互关联,通过 Revoke 和 Grant 语法进行互联操作。
在单个集群下,ByteHouse 企业版的权限模型如下:
由于一套 ByteHouse 支持管理多个集群,我们将 ClickHouse 的权限模型进行了扩展。具体改动如下。
用户为跨集群的实体,可同时存在于不同的集群。
用户名在租户内不允许重名。一个 ByteHouse 租户仅允许同名的一个用户。
通过控制面,对用户进行修改密码操作时,同时影响用户所在的每一个集群。
在创建用户时,可以将用户加入至少一个集群;
在修改用户时,可以让用户加入或离开某集群。
请勿直接连接集群,对集群的用户进行密码修改,会导致通过控制面无法对该集群下的表进行增、删、改、查的操作。
一般情况下,角色为集群维度下的实体。
系统拥有四个默认角色:System Admin,Cluster Admin,Data Engineer,Query User。自定义角色不允许与四个角色重名。
仅有一个默认角色是跨集群的角色:System Admin 。可认为 System Admin 是超级管理员:拥有全集群的全权限。
在给用户授予角色时,必须先选择集群,再选择角色,此时用户会被加入该角色所在的集群;或直接授予 System Admin 角色,此时用户会被加入每一个集群。
角色允许在不同集群中重名。在控制面展示角色时,同时显示该角色所在的集群。
权限由于和 DataObject(DB/Table/Column)关联,为集群下的实体。
权限仅能被赋予本集群下的角色。
当权限被赋予用户时,用户会自动被加入当前集群。
因此,ByteHouse 的 RBAC 模型示意图如下:
注意
直接通过 console 或其他连接方式对集群的用户进行密码修改,会导致通过控制面无法对该集群下的表进行增、删、改、查的操作。请避免此类操作。