本发明涉及计算机技术领域,尤其涉及一种SaaS软件租户数据隔离的方法。

背景技术:

SaaS是Software-as-a-Service的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。

从对SaaS软件的描述可知,SaaS软件服务提供商将软件统一部署在自己的服务器上,诸多客户通过租的方式来“共享”使用软件及服务器资源,SaaS软件的企业客户也称为租户。其中数据库就是一个重要的资源来为应用软件提供基础的数据存储、查询及操作的基础平台。目前SaaS软件一般的做法都是各家租户使用同一个数据库实例来存储数据,通过在数据表中“租户id”来区分各家租户的数据。这种模式和传统软件模式比较类似,实施起来也比较容易。但是这种模式下随着租户规模的扩大,应用的深入,也会带来一系列的问题,包括:

数据并没有做到物理隔离,仅是逻辑上做了区分,业务处理稍严谨各个租户之间的数据可能会出现互相泄露的情况,数据的安全性比较低。

租户不再续租时需要为租户备份数据、或清理数据,会存在非常难以将一个租户的数据单独剥离的问题,从而造成数据的不完整、并存在垃圾数据。

一个数据库来存放众多租户的数据,必然导致数据量庞大、庞大的数据量也必然导致数据处理效率低下。

应用开发在每一个需求实现时均须考虑“租户id”及“租户数据区分”的问题,对应用开发人员的要求比较高,容易出代码逻辑问题。

技术实现要素:

针对“租户id”来区分各家租户数据模式存在的问题,本发明提出一种新的SaaS软件租户数据隔离的方法。

本发明的隔离方法,其特征在于在数据库中为SaaS软件预置一个基础数据库作为租户信息复制基准模板,并配套一个平台数据库作为统一数据管理,该方法包括以下步骤:

1) 创建租户时会生成一个不重复的随机数作为该租户的命名空间,租户数据库会以基础数据库为基准进行复制,复制的租户数据库以“基础数据库_命名空间”命名;在租户数据库创建时,将该租户数据库的权限赋予应用基础数据库用户;

2)SaaS软件注册单元随后调用脚本,将基准数据库数据复制到新创建的租户数据库;

3) 租户实例创建完成后,将命名空间的映射关系记录到平台数据库;

4) 租户在登录后,到平台数据库获取用户租户命名空间并存入用户登陆会话,在用户每次访问SaaS软件时获取到用户会话中的命名空间并将其设置到线程变量中,在整个会话中数据操作始终指向此命名空间;

5) 定制数据源,继承.org.apache.tomcat.jdbc.pool.XADataSource数据源,复写获取长链接方法,在数据源建立连接后,获取线程变量中的命名空间,执行 use database指令切换数据库实例,可实现通过命名空间控制数据库实例的访问控制;

6) 表结构及数据库更新,提供独立的服务处理。

具体的,SaaS软件通过配置基础数据库的用户名密码进行连接,并配套一个平台数据库作为统一数据管理。

具体的,在数据存储过程中不可避免的会遇到公用数据,将公用数据存储至平台数据库,平台数据库提供统一的rpc数据接口进行调用,此种方式也解使得不同业务数据之间的耦合变得松散。

具体的,步骤6)中定制数据源继承.org/.apache/.tomcat/.jdbc/.pool/.XADataSource标准数据源接口,并复写获取长链接方法。

具体的,步骤7)中数据库更新的处理逻辑为:在基础数据库对目标sql脚本进行执行测试,发生错误则终止操作;查询平台数据库记录的命名空间映射关系,链接各租户数据库,逐个执行更新的目标sql脚本,完成对所有租户数据库的更新操作。

通过本方法,租户用户使用软件时,会通过租户命名空间找到对应的租户数据库实例并进行数据库切换,以实现跨库访问的效果;整个多租户数据库切换的逻辑完全封装至自定义数据源中。

本发明的SaaS软件租户数据隔离的方法,实现了各个租户数据之间的物理隔离,数据安全性得到本质性的提高;租户数据的备份、清除方便,保证了数据的完整性,不存在垃圾数据;各个租户之间数据分开,数据处理效率高;应用开发无须考虑“租户id”的问题,提高了应用开发、版本迭代的效率,从而能够更加快速的满足租户的业务需求。

具体实施方式

实施例1:本实施例的SaaS软件租户数据隔离的方法,基于windows或linux操作系统,mysql数据库,以及基于java开发的SaaS软件。数据库中需要为SaaS软件软件预置一个基础数据库作为租户信息复制基准模板,SaaS软件通过配置该基础库的用户名密码进行连接。并配套一个平台数据库作为统一数据管理。

1、 SaaS软件注册单元接收到新租户的创建请求后为租户生成一个不重复的随机数作为该租户的命名空间。注册单元调用数据库创建脚本新建数据库并以“基础数据库_命名空间”命名,在租户数据库创建时,不会再创建对应的数据库用户,而是将该租户数据库的权限赋予到应用基础数据库用户;

2、 SaaS软件注册单元随后调用脚本,将基准数据库数据复制到新创建的租户数据库;

3、 租户实例创建完成后,将命名空间的映射关系记录到平台数据库;

4、 租户在登录后,需要到平台数据库获取用户租户命名空间并存入用户登陆会话,在用户每次访问SaaS软件时获取到用户会话中的命名空间并将其设置到线程变量中,在整个会话中数据操作始终指向此命名空间;

5、 定制数据源,继承org.apache.tomcat.jdbc.pool.XADataSource数据源,复写获取长链接方法,在数据源建立连接后,获取线程变量中的命名空间,执行 use database指令切换数据库实例,可实现通过命名空间控制数据库实例的访问控制。

6、 表结构及数据更新,提供独立的服务处理。处理逻辑:1、在基础测试库对目标sql脚本进行执行测试,发生错误则终止操作;2、通过查询平台数据库记录的命名空间映射关系,链接各租户数据库,逐个执行更新的目标sql脚本。完成对所有租户数据库的更新操作。

租户隔离怎么做MYSQL_一种SaaS软件租户数据隔离的方法与流程相关推荐

  1. 使用mysql做saas_一种SaaS企业平台数据库系统及其连接方法与流程

    本发明属于数据库领域,尤其涉及一种SaaS企业平台数据库及其连接方法. 背景技术: SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟,在2 ...

  2. spark集群访问mysql_一种Spark并行访问MPP数据库的方法与流程

    本发明涉及数据库 技术领域: :,具体来说,涉及一种Spark并行访问MPP数据库的方法. 背景技术: ::从关系数据库读取数据,Spark可以使用DataFrame和JdbcRDD等方法.这些方法在 ...

  3. 事物日志恢复 mysql_一种基于事务日志的Mysql数据恢复方法与流程

    本发明涉及一种mysql数据恢复方法,尤其涉及一种基于事务日志的mysql数据恢复方法. 背景技术: :在对mysql数据库进行日常操作的过程中,总是无法避免会产生各种误删数据,误改数据等操作.这个时 ...

  4. 插值法补齐缺失数据_一种挽救你缺失数据的好方法——多重补插

    原标题:一种挽救你缺失数据的好方法--多重补插 缺失数据--研究中的绊脚石 在医学研究中,我们经常会碰到缺失数据.无论是因为实验设计的问题,或是检测手段精度,又或是医学实验中的不可抗力因素.一旦数据没 ...

  5. 并注册烧写钩子 获取启动介质类型_一种基于USB烧写的数据传输方法与流程

    本发明涉及嵌入式系统固件量产技术领域,特别涉及嵌入式系统基于USB烧写的固件数据的场景. 背景技术: 嵌入式产品已广泛应用于社会的各行各业,在产品生产过程中,需要将嵌入式系统固件量产到产品设备中. 固 ...

  6. 租户隔离怎么做MYSQL_基于JPA实现SaaS多租户模式的数据存储——共享数据库,隔离数据架构...

    SaaS是Software-as-a-Service(软件即服务)的简称,这边具体的解释不介绍.多租户的系统可以应用这种模式的思想,将思想融入到系统的设计之中. 现在SaaS Multi-Tenant ...

  7. bga焊盘怎么做_一种bga焊盘封装结构的制作方法

    一种bga焊盘封装结构的制作方法 [专利摘要]本实用新型公开了一种BGA焊盘封装结构,包括若干焊盘,焊盘的内部设有阻焊层,走线穿过焊盘与阻焊层连接.本实用新型增大了焊盘的有效面积,增大其与PCB基材的 ...

  8. python 回声程序_一种回声消除系统及回音消除方法与流程

    本发明涉及通信技术领域,具体涉及一种回声消除系统及回音消除方法. 背景技术: 回声消除器通常由滤波器和算法组成,根据具体应用和性能要求的不同可以有多种选择. 滤波器有FIR(有限长度冲激晌应)滤波器和 ...

  9. dncnn图像去噪_一种基于DnCNNs改进的图像降噪方法与流程

    本发明涉及图像处理技术领域,具体涉及一种基于dncnns改进的图像降噪方法. 背景技术: 随着科技进步,新的图像技术在逐渐推广,在日常生活中人们对于图像的要求也越来越高,针对阴天或夜晚等弱光条件下拍摄 ...

最新文章

  1. 函数重载(续)==》函数重载和函数指针在一起
  2. Android开发之打开指定APP | 打开APP任意页面的方法
  3. python3(八)sys模块
  4. 笔记本软件页面分辨率低_笔记本最容易忽略的屏幕 有几个参数一定要知道
  5. JAVAWEB入门之Servlet相关配置
  6. 数据结构(六)霍夫曼树与编码
  7. linux 减小根分区大小_减小linux下根分区
  8. magisk安装失败_MIUI eu版安装刷入教程
  9. 【hive】hive(hive cli)中显示列名,不带表名
  10. warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
  11. paip.java 多线程参数以及返回值Future FutureTask 的使用.
  12. vim的异常退出处理
  13. Win10不能禁和不建议禁的服务以及禁用后的影响
  14. 喜报!芝诺大数据教学科研平台入选重庆市重点软件公共服务平台
  15. matlab wmaxlev函数,CT-PET小波图像融合在精确放射治疗应用研究
  16. 跟我一起水疗的哥俩儿,其实挺猛的!
  17. c语言我想你,c语言土味情话
  18. 此Flash Player 与您的地区不相容,请重新安装Adobe Flash Player问题解决
  19. 电脑主板DEBUG指示灯的提示
  20. Nginx 服务器配置域名证书

热门文章

  1. 控制PowerPoint里的Flash歌曲播放
  2. 层压卷轴标签的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  3. 重点用能单位能耗系统在湖南三立集团的应用
  4. python strip()函数和Split函数的用法总结
  5. (转)程序员专属壁纸
  6. 计算机在英语课堂的应用,浅谈信息化技术在英语课堂的应用
  7. 如何控制蜂鸣器的响动频率
  8. 使用C语言完成---温度转换表
  9. 报错:sun.security.validator.ValidatorException: PKIX path building failed
  10. ShareTechnote系列LTE(6):下行子帧解码(PCFICH、PHICH、PDCCH、PDSCH解码)