数据库多租户数据隔离设计

摘要:
该方案具有最高级别的用户数据隔离和最佳安全性。租户之间的数据可以物理隔离。

1. 什么是saas系统
 “SaaS平台是运营saas软件的平台。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。SaaS 是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。”

也就是说,我只需要能连接上互联网,并且给saas平台交租金,我就能用saas平台给我提供的系统服务。这方面最典型的例子就是各种云平台,例如阿里云。既然我能通过互联网使用saas平台提供的服务,那么其他人当然也是可以的。于是这就产生了一个多租户的问题。

2. 什么是多租户
多租户问题,简单来说,是一种架构设计方式,就是在一台或者一组服务器上运行的saas系统,可以为多个租户(客户)提供服务,目的是为了让多个租户在互联网环境下使用同一套程序,且保证租户间的数据隔离。从这种架构设计的模式上,不难看出来,多租户架构的重点就是同一套程序下多个租户数据的隔离。由于租户数据是集中存储的,所以要实现数据的安全性,就是看能否实现对租户数据的隔离,防止租户数据不经意或被他人恶意地获取和篡改。

3. 数据隔离方案 
目前saas多租户系统的数据隔离有三种解决方案,即为每个租户提供独立的数据库、独立的表空间、按字段区分租户,每种方案都有其各自的适用情况。下面我们依次讲解这3种方案。

3.1 每个租户提供独立的数据库系统
这种方案的实现方式是所有租户共享同一个应用,但应用后端会连接多个数据库系统,一个租户单独使用一个数据库系统。这种方案的用户数据隔离级别最高,安全性最好,租户间的数据能够实现物理隔离。但成本较高(即不同租户使用不同的数据库)。

 数据库多租户数据隔离设计第1张

3.2 每个租户提供独立的表空间
这种方案的实现方式,就是所有租户共享同一个应用,应用后端只连接一个数据库系统,所有租户共享这个数据库系统,每个租户在数据库系统中拥有一个独立的表空间(即不同租户在同一个数据库下,使用不同的表)。

 数据库多租户数据隔离设计第2张

3.3 按租户id字段区分租户
这种方案是多租户方案中最简单的设计方式,即在每张表中都添加一个用于区分租户的字段(如租户id或租户代码)来标识每条数据属于哪个租户,其作用很像外键。当进行查询的时候每条语句都要添加该字段作为过滤条件,其特点是所有租户的数据全都存放在同一个表中,数据的隔离性是最低的,完全是通过字段来区分的(即不同租户使用同一个数据库,同一张表,数据用租户字段(tenantID)进行数据区分)。

 数据库多租户数据隔离设计第3张

4. 三种数据隔离方案的优劣势分析
数据库多租户数据隔离设计第4张

免责声明:文章转载自《数据库多租户数据隔离设计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Fiddler_HTTPS 如何抓包和浏览器设置从程序员到项目经理(14):项目经理必须懂一点“章法”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle 的用户管理 sqlplus的常用命令

创建用户:create user 用户名 identified by 密码; SQL> create user scw identified by 123; 用户已创建。 SQL> 在oracle中创建用户只能由管理员或者具有管理员的权限的用户创建 修改密码: 1.修改自己的密码: SQL> passw; 更改 SCW 的口令 旧口令...

clickHouse 导入/删除/更新数据

1、 --导入数据: CREATE TABLE FactSaleOrders ENGINE = MergeTree ORDER BY OrderID AS SELECT * FROM mysql('10.42.134.136:4000', 'dbname', 'tableName', 'root', 'password'); orderId mysql中的...

jmeter(八)-JDBC请求(sqlserver)

做JDBC请求,首先要了解这个JDBC对象是什么,然后寻找响应的数据库连接URL和数据库驱动。 数据库URL:jdbc:sqlserver://200.99.197.190:1433;databaseName=ebank 数据库驱动:com.microsoft.sqlserver.jdbc.SQLServerDriver 下载sqljdbc4.jar放在...

造轮子之数据库对比工具DataBaseComparer

最近同时在维护好几个项目,有些项目是SqlServer的,另一些是MySql的,DBA推荐了一个线上库和线下库的对比工具,用的时候经常会在对比时,半天都没有进度。索性自己这次造个轮子,做了一个纯对比数据库表结构的工具,表之间可以对比字段名、类型、长度,出现这些不同就会显示在差异中。 程序运行的界面如下: 下一步之后: 这个是差异显示界面,用的是树形控件...

20个PHP开源内容管理系统

内容管理系统(CMS)广泛应用于企业网站、个人网站、博客、电子商务网站等内容更新频繁的网站,可以轻松处理大量的数据请求,实现便捷管理。 本文为你整理了一些用 PHP 编写的开源 CMS,你可以用于 PHP 学习,或根据自己的需求进行修改。 (编注:英文原文中介绍了60个开源的PHP CMS,这篇译文摘译了20个。) 1.DynPage DynPage 是...

基于.NET Standard的分布式自增ID算法--Snowflake

概述 本篇文章主要讲述分布式ID生成算法中最出名的Snowflake算法。搞.NET开发的,数据库主键最常见的就是int类型的自增主键和GUID类型的uniqueidentifier。 那么为何还要引入snowflake呢? INT自增主键 自增主键是解决主键生成的最简单方案,它有如下优势: 数据库本身负责主键生成,效率高 数据库本身保证主键顺序递增,方...