私有云MySQL多租户权限的初版设计

作者: admin 分类: 公众号存档            0 次浏览 发布时间: 2020-01-09 17:06

公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2020-01-09 17:06:46 · 原文链接

这是学习笔记的第 2184 篇文章

读完需要

9

分钟

速读仅需5分钟

关于MySQL私有云平台的方案设计,最从开始要基于RDS的设计方式到现在的迭代,其实还是走过了一段旅程,也算是比较坎坷,我来总结一些思路。

1.首先是实例的概念解释:

通常和业务所说的实例和数据库的实例有一些差别,虽然粒度都是IP和端口。

从业务角度来说:

1)对于单实例环境,实例为单实例本身(IP/域名和端口)

2)对于主从环境,实例为相应的主库环境(IP/域名和端口,暂不可考虑读写分离);

3)对于集群环境,实例为相应的代理服务入口

如果仅存在一个代理,实例为代理IP/域名和端口

如果代理层实现负载均衡,则为相应的service_name和端口

从DBA的角度来说:

实例,主机,集群都是相对独立但又密切关联的模块。 

1)对于单实例环境,实例为单实例本身(IP/域名和端口)

2)对于主从环境,实例为相应的主库和从库环境(IP/域名和端口);

3)对于集群环境,实例为相应的分片节点,包括分片节点主库和从库

2.然后是租户的概念:

租户这个概念该怎么理解,其实可以分很多维度,但是不过怎么来说,他需要有一个统一的业务属性,可以是项目经理,或者是业务部门管理者。

在数据库层面,理论上一个实例,多个实例都可以归属于一个租户,但是从数据库层面来说,建议租户的粒度可以细化到一个实例,一个实例下面有多个DB实现租户成员多元化管理。

租户管理在实例层面的管理都是基于实例这一个基础的维度。

有的同学可能会说租户是不是会很多,其实从使用来说,不会感觉到很多。

因为在一个用户登录之后,他能够看到的实例其实就已经做好了第一层的过滤,他看到的实例列表是有限的。而实例在业务层面的粒度其实和数据库层面的实例概念存在一些偏差,对于业务来说会屏蔽一些不必要的信息。要做某个数据库的管理,是基于某个实例而言,所以一个开发人员可以归属于多个租户,而一个实例下的数据库只能归属于一个租户。

2.然后是租户权限的设计:

权限体系的基础设计,我们可以需要做到租户层级的管理,同时也需要做到租户间的隔离性。

比如一个用户A请了一个实例,他是某某业务的负责人,那么这个用户A就是一个租户管理员,他创建实例的时候就会生成一条租户注册信息,同时会生成相应的租户账号信息,在这个基础上租户管理员(用户A)可以给其他租户成员(如用户B,用户C)等赋予相应的实例管理权限。

稍后可以进行新建数据库等操作,创建数据库后可以把租户下的数据库(比如数据库A,数据库B,数据库C)的相关权限赋予相应的租户成员,这样虽然都是一个租户内,但是他们的权限可以存在差异化。

整体的设计如下图所示:

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注