精华内容
下载资源
问答
  • 多租户表设计

    千次阅读 2018-01-24 22:00:00
    2019独角兽企业重金招聘Python工程师标准>>> multi-tenant-databases-in-the-cloud ...团队开发框架实战—多租户支持 转载于:https://my.oschina.net/yangjiandong/blog/1612626
    展开全文
  • oracle数据库:在oracle中一个数据库可以具有个用户,那么一个用户一般对应一个Schema,都是建立在Schema中的,(可以简单的理解:在oracle中一个用户一套数据库) mysql数据库:mysql数据中的schema比较...

    共享数据库、独立 Schema

    (1) 什么是Schema

    oracle数据库:在oracle中一个数据库可以具有多个用户,那么一个用户一般对应一个Schema,表都是建立在Schema中的,(可以简单的理解:在oracle中一个用户一套数据库表)

     mysql数据库:mysql数据中的schema比较特殊,并不是数据库的下一级,而是等同于数据库。比如执行create schema test 和执行create database test效果是一模一样的

    共享数据库、独立 Schema:即多个或所有的租户使用同一个数据库服务(如常见的ORACLE或MYSQL数据库),但是每个租户一个Schema。

    优点: 为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多的租户数量。

    缺点: 如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据; 如果需要跨租户统计数据,存在一定困难。

    这种方案是方案一的变种。只需要安装一份数据库服务,通过不同的Schema对不同租户的数据进行隔离。由于数据库服务是共享的,所以成本相对低廉。

    共享数据库、共享数据表

    共享数据库、共享数据表:即租户共享同一个Database,同一套数据库表(所有租户的数据都存放在一个数据库的同一套表中)。在表中增加租户ID等租户标志字段,表明该记录是属于哪个租户的。

    优点:所有租户使用同一套数据库,所以成本低廉。
    缺点:隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量,数据备份和恢复最困难。

    这种方案和基于传统应用的数据库设计并没有任何区别,但是由于所有租户使用相同的数据库表,所以需要做好对每个租户数据的隔离安全性处理,这就增加了系统设计和数据管理方面的复杂程度。

     

    展开全文
  • 多租户设计-数据层的多租户支持

    千次阅读 2017-06-12 14:32:28
    参考资料:浅析多租户在 Java 平台和某些 PaaS 上的实现 多租户是什么可以参考上面文章,本文只讨论多租户实现方式的 数据层的多租户支持 。 数据层租户隔离方式: 1 每个上加租户的标识字段,查询时候带上标识的...

    参考资料:

    浅析多租户在 Java 平台和某些 PaaS 上的实现

    数据层的多租户浅谈

    多租户是什么可以参考上面文章,本文只讨论多租户实现方式的  数据层的多租户支持

    数据层租户隔离方式:

    1 每个表上加租户的标识字段,查询时候带上标识的判断。  优缺点:代码侵入强,租户隔离级别较低,同时使用一个单表时容易出现性能问题;

    2 切换多数据库实例,为每一个租户创建一个数据库实例。  优缺点:租户隔离级别最高,一个租户的数据操作完全不会影响到其他租户,但是需要为每个租户创建一个数据库实例,成本高,没有办法做到瞬时开户、销户。同时如果数据库实例采用云产品如阿里云RDS,实现成本更高;

    3 使用同一个数据库实例,动态切换schema。 优缺点:租户的数据层隔离级别适中,维护成本较低,开发成本较高,需要在运行期动态切换DataSource。

    展开全文
  • 多租户系统设计之权限控制

    千次阅读 2020-03-13 21:29:54
    也是多租户系统必须实现的隔离,在上篇文章中提到的数据隔离主要是针对数据存储层面而言的,用户一般感知不到,所以如“基于数据行的租户唯一标识”方案中,即使存储在相同的数据也是可以的。在系统设计层面,业务...

    概述

    业务层面的隔离是用户可以直接感知的隔离,也是多租户系统必须实现的隔离,在上篇文章中提到的数据隔离主要是针对数据存储层面而言的,用户一般感知不到,所以如“基于数据行的租户唯一标识”方案中,即使存储在相同的数据表也是可以的。在系统设计层面,业务隔离就是需要做好权限控制。

    基于RBAC模式的权限模型设计

    多租户系统的权限控制也是基于RBAC模式来设计的,即用户,角色,权限和资源(针对简单业务可以将角色和权限合并为权限即可,以下介绍的业务中台项目就是基于这种方式做的)。
    但是针对资源,或者针对服务端而言,是数据资源,需要限定在租户的数据空间内,如同样是财务出纳角色,拥有打款的权限,但是不同租户只能针对自己的账单进行打款操作。这个主要是通过为资源绑定租户标识来实现:
    33.png

    数据资源的租户绑定

    数据资源的租户绑定需要结合以上介绍的数据存储隔离方案来考虑。
    对于分库方案中的方式一,由于是独立存储、独立部署、独立域名,故每个租户都是访问自己独立的系统,在系统层面就形成了数据资源的租户绑定,故在应用层面和数据存储层面无需对数据资源进行特殊绑定。
    而对于其他数据隔离方案,不管是基于分库分表实现的数据路由,还是共享表内的租户标识列,都需要在应用层通过租户标识来区分出不同的租户的数据,然后在进行进一步操作,说白了就是每个数据资源都需要拥有一个租户标识符来确定自己所属的租户。
    对于分库或者分表方案而言,由于租户拥有独立的分库或者分表,所以在具体存储层面则可以不需要为每行数据都带上这个租户标识,不过具体需要结合所使用的分库分表中间件来确定是否需要;而对于基于数据行的租户唯一标识的共享库,共享表方案而言,则是必需的。

    案例分析

    在业务中台项目中,我们设计了两大核心角色,分别是系统管理员和业务线运营管理员(相当于租户管理员),其中系统管理员是拥有对所有业务线的权限,而每个业务线运营管理员只拥有自己业务线的管理权限。

    在应用代码层面,需要通过业务线标识符(租户标识)来区分当前登陆用户是否可以操作对应租户的数据,基本流程为:

    1. 根据当前登陆用户的角色来确定是否有该操作的权限(简单场景,角色与权限可以合并为权限),如进行指定业务线下的操作时,是否是业务线运营管理员的角色;
    2. 如果角色校验通过,则需要进一步确定是否对所操作的数据资源具有权限,这个主要是通过在用户的账号记录中带有租户标识符,然后与当前需要操作的数据资源的租户标识符来匹配,如果匹配成功,则校验通过。
    核心实现

    以下为简化版的代码实现:

    1. 核心入口:指定用户,是否拥有指定租户的操作权限的方法:用户权限上下文集合,需要操作的租户标识,需要执行的操作

       /**
        * 指定用户,是否拥有指定业务的操作权限
        * @param memberInfo 用户信息
        * @param targetBizCode 目标操作的租户标识
        * @param targetOperate 目标操作的操作类型
        * @return
        */
       public boolean hasPermission(MemberInfo memberInfo, String targetBizCode, String targetOperate) {
      
      	// 遍历当前用户的权限集合,判断是否具有对指定租户标识targetBizCode,进行指定操作targetOperate的权限
      	return memberInfo.getPermissions().stream()
      		.anyMatch(p -> hasAllowedPermission(p, targetBizCode, targetOperate));
       }
      
    2. 是否拥有操作权限:针对用户权限上下文集合的每个权限进行检查是否具有操作权限

       /**
        * 是否拥有操作权限
        *
        * @param pemission 用户的权限上下文
        * @param targetBizCode 需要访问的租户标识
        * @param targetOperate 需要执行的操作
        * @return
        */
       private boolean hasAllowedPermission(PermissionDO pemission, String targetBizCode, String 
       targetOperate) {
      
      	// 权限定义:包含一个操作集合
      	PermissionSpec permissionSpec = permissionSpecs.get(pemission);
      
      	// 检查是否具有对指定租户进行指定操作的权限:
      	// 1. 操作集合中的其中一个操作与目标操作targetOperate匹配
      	// 2. 需要访问的租户标识targetBizCode,与用户允许访问的租户标识pemission.getBizCode()匹配
      	return permissionSpec.operateSpecs.stream().anyMatch(operateSpec ->
      		canOperate(pemission.getBizCode(), targetBizCode, targetOperate, operateSpec)
      	);
       }
      
    3. 是否可以执行指定操作:这里强调的“执行”指定操作,除了检查操作是否匹配之外,更重要的是检查租户标识是否匹配。

       /**
        * 是否可以执行指定操作
        * @param allowedBizCode 用户可以访问的租户标识
        * @param targetBizCode 需要判断的目标租户标识
        * @param targetOperate 需要判断的目标操作类型
        * @param operateSpec 权限支持的操作定义
        * @return
        */
       private boolean canOperate(String allowedBizCode, String targetBizCode, String targetOperate, 
       OperateSpec operateSpec) {
      
      	// 判断这个操作是否是需要执行的目标操作
      	boolean operateMatch = operateSpec.getName().equalse(targetOperate);
      
      	// 核心点:进一步校验租户标识
      	if (operateMatch) {
      		return targetBizCode.equals(allowedBizCode);
      	}
      
      	return false;
       }
      

    总结

    针对以上代码来说,两个点,第一对于简单权限模型,可以将角色与权限统一为权限,如以上的Permission集合,第二对于多租户系统,除了检查是否具有操作权限之外,还需要结合租户标识进一步检查是否可以执行指定操作。

    展开全文
  • 我最初的计划是创建一个商店,一个用户和一个user_stores交叉.然后,我会在stores中保存该存储的数据库名称(并使用应用程序用户和密码创建每个特定于商店的数据库,以便Web应用程序始终可以登录).每个商店都有...
  • 也是多租户系统必须实现的隔离,在上篇文章中提到的数据隔离主要是针对数据存储层面而言的,用户一般感知不到,所以如“基于数据行的租户唯一标识”方案中,即使存储在相同的数据也是可以的。在系统设计层面,业务...
  • Magicodes.WeiChat——多租户设计与实现 概要 多租户(Multi Tenancy/Tenant)是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务。 本框架使用的是共享...
  • 通过数据库或表设计租户ID等租户标志字段,来表明该记录是属于哪个租户的。 优点:所有租户使用同一套数据库,所以成本低廉;能够简单进行数据聚合统计或分析。缺点:隔离级别最低,安全性最低,需要在设计开发时...
  • mallplus采用现阶主流技术...用户和权限表多,用户和角色,角色和权限 比普通权限了 直接给用户授权,因为有的员工 权限比较杂,可以单独累加细节的权限 具体代码在sys模块 前端vue代码 ...
  • saas是目前比较流行的模式,不做过多的...设计一个微信信息配置: 2.在微信公众平台微信公众号中的接口地址 方式一:假设只有一个独立域名,配置微信公众号中的接口地址可以采用一个公众号对应一个二级域名 方式...
  • 目录 0.前言 1.需求分析 2.系统架构设计 3.环境准备 4.编码实现 4.1添加父项目依赖坐标 4.2实现eureka注册中心 4.3实现zuul网关 ...上一篇文章中,我们自己实现了saas系统架构中租户数据隔离的其中一...
  • 目前基于多租户的数据库设计方案通常有如下三种: 独立数据库 共享数据库、独立 Schema 共享数据库、共享数据 独立数据库 独立数据库:每个租户一个数据库。 优点:为不同的租户提供独立的数据库,有助于简化...
  • 网上有好多解释,有些上升到了架构设计,让你觉得似乎非常高深莫测,特别是目前流行的ABP架构中就有提到多租户(IMustHaveTenant),其实说的简单一点就是再每一张数据库的中添加一个TenantId的字段,用于区分属于...
  • 场景描述 不同租户访问同一个地址,tenant100租户有一个个性化服务service-b-100,在API层需要将其路由到service-b-100服务,其它租户则路由到service-b,达到个性化...设计一张个性化服务存储租户的个性化服务...
  • 第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个只做一件事) 第三范式(3NF):在第二范式的基础上,消除传递依赖 反三范式: 反三范式是基于第三范式所调整的,没有冗余的数据库未必是...
  • 多租户在数据存储上主要存在三种方案,独立数据库、共享数据库,独立Schema、共享数据库,共享 Schema,共享数据。 独立数据库 即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高...
  • 在数据库设计方面采用最简单的方式,在应用数据中增加TenantTypeId(存储对应的ApplicationId) 多租户技术意义,在于不同租户间应用程序环境的隔离(application context isolation)以及数据的隔离(data ...
  • 部门管理-Saas多租户平台开发 目录 文章目录1、部门表2、后端接口3、API4、前端页面***后记*** : 内容 1、部门表 正常的公司部门会涉及层级问题,表设计的时候通过添加parent_id字段表示父级id,实现层级数据...
  • 欢迎大家共同探讨解决方案,欢迎私信。 目前面临的问题 多租户技术现在是一种很...系统已经通过 region 字段区分多租户,大部分都有这个字段,只有部分中间(基于 id 关联)无此字段;所有的 SQL 中都带有 re...
  • 网上有好多解释,有些上升到了架构设计,让你觉得似乎非常高深莫测,特别是目前流行的ABP架构中就有提到多租户(IMustHaveTenant),其实说的简单一点就是再每一张数据库的中添加一个TenantId的字段,用于区分属于...
  • 基于 DevExpress从零开始搭建多租户自洽的权限数据配置模块(二) 基础数据的维护管理,以简单基本操作的形式展开。主要是演示devexpress做基本的增删改查、加载表单、建立多关联、用户操作动态加载数据等。 ...
  • 基于关系型与Key-Value型数据库混合存储的多租户数据存储架构,蔺皓,王柏,针对SaaS多租户、可配置、易扩展的特点,在设计其数据存储架构时存在三种主流方案:数据库分离法、空间分离法以及共享空间法��
  • 在公司做了一年的SaaS内核系统,但是有些东西不知道能不能透露出来。我尽量在不透露一些敏感东西的情况下(这个度我无法把控,只能是笼统了),将某些关于数据库方面的...既然是SaaS平台,那么肯定是多租户的一个生态
  • 在流程定义、运行实例和历史的张表增加TENANT_ID_ (租户ID)字段。为了方便对ACTIVITI数据库设计有整体性的理解,我根据其数据反过来制作了E-R图。(图片比较大,可以右键复制图片网址,在独立的标签页打开查看)AC...
  • 一、ACTIVITI 数据库E-R图(5.16.4) Activiti 5.16.4 总共有24张表,增加act_evt_log(事件日志),以及... 为了方便对ACTIVITI数据库设计有整体性的理解,我根据其数据反过来制作了E-R图。 (图片比较...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

多租户表设计