本发明涉及计算机技术领域,尤其涉及一种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脚本。完成对所有租户数据库的更新操作。