Logo
权限控制

权限控制 #

定义 #

DBPlusEngine 为数据库提供了分布式协作的能力,同时将一部分数据库特性抽象到了上层,进行统一管理,以降低用户的使用难度,同时提高运行效率。 权限控制,就是其中的一项能力。 将权限控制交由 DBPlusEngine 统一管理,至少有以下几方面的好处:

  • 避免接入异构资源时为用户带来困惑,无需担心该使用哪种方言进行管理;
  • 使用逻辑库和逻辑表进行授权管理,与下层真实库表隔离,更便于用户理解;
  • 避免数据库资源变化导致的授权信息不一致,不会产生信息同步的消耗。 于是,为了让权限控制更易用,DBPlusEngine 团队倾心打造了全新的权限控制体系。

相关概念 #

用户 #

用户(user)是 DBPlusEngine 的使用者。

初始用户 #

初始用户是指在 DBPlusEngine 启动前,通过配置文件设定的用户。

普通用户 #

与初始用户相对应,普通用户是在 DBPlusEngine 运行过程中被动态创建的用户。

角色 #

角色(role),是被命名的、一定数量的权限的集合。以角色为基础的权限控制,能够简化对用户的权限管理过程。

权限 #

权限(privilege)是指用户对特定目标执行操作的权力。

DistSQL #

DistSQL(Distributed SQL)是 DBPlusEngine 特有的操作语言,在 DBPlusEngine 将权限控制能力进行抽象统一之后,提供了专有的 DistSQL 语法,方便管理员对用户和权限的管理维护。

DML #

数据操纵语言,包含 INSERT、SELECT、UPDATE 和 DELETE 语句。

DDL #

数据定义语言,包含 CREATE、ALTER、DROP 和 TRUNCATE 语句。

对系统的影响 #

  • 细粒度权限管理

可精确控制授予每个用户的库级、表级、列级的操作权限。

  • 统一的交互语言

使用 DBPlusEngine 特有的 DistSQL 进行用户和权限管理,无论存储节点选择 MySQL、PostgreSQL、OpenGauss 还是 Oracle,都可以进行无差别权限控制。

  • 权限管控实时生效

对用户或授权的变更实时生效,无需重启 DBPlusEngine 。

  • 授权信息在集群中自动同步

变更用户和授权信息,集群中其他计算节点也能实时收到该变化,完成用户的授权更新,管理员无需在多个节点进行重复操作,方便集群管理。

原理介绍 #

权限存储 #

架构

在 DBPlusEngine 的体系架构中,计算节点(DBPlusEngine-Proxy)是无状态的,并不提供数据存储能力,因此,用户账户及授权信息都将存储在治理中心。同时,借助治理中心的能力,能够将信息实时分发给集群中的多个计算节点,这将大大减少用户在使用集群时的维护成本,提供管理效率。 另一方面,由于提供了统一的权限管理机制,对于接收到的原生 DCL 语句,DBPlusEngine 不再转发到下层存储节点,而将会给出不支持的提示信息。用户须使用 DBPlusEngine 提供的 DistSQL 进行账户和授权的管理。

权限提供者 #

架构

DBPlusEngine 使用可插拔架构进行功能的组织和扩展。其中,权限引擎为用户提供了多种不同的权限提供者,它们是:

名称描述控制粒度支持动态管理
ALL_PERMITTED不限制权限,每一个用户都拥有 SUPER 授权。
DATABASE_PERMITTED可限制库级权限,需要在启动前通过配置文件指定每一个用户能访问的逻辑库。库级
SphereEx:PERMITTED企业级权限提供者,可进行细粒度授权管理。库、表、列级✔️

说明: 权限提供者由管理员在 DBPlusEngine 启动前指定。

鉴权流程 #

架构

在 DBPlusEngine 中,权限按照自顶向下的顺序逐级校验,当用户拥有上层权限时,不再向下进行检查,以保证鉴权效率。 例如:

  • 若用户拥有全局的 SELECT 权限,则在进行 SELECT 操作时,无需检查该用户是否拥有目标库表的 SELECT 授权;
  • 若用户拥有库级别的 INSERT 权限,则在进行 INSERT 操作时,无需检查该用户是否拥有目标表的 INSERT 授权。 以此类推。

相关参考 #

权限控制的配置