多租户数据库的隔离访问方法、服务端以及存储介质转让专利

申请号 : CN201810490726.6

文献号 : CN108920494B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何燕春张越吴再聪胡鹏王国彬

申请人 : 土巴兔集团股份有限公司

摘要 :

本发明公开了一种多租户数据库的隔离访问方法,包括:响应用户发起的数据访问请求,获取所述数据访问请求对应的UID、RootOrgId以及Dataperm中的数据库表名和字段名;通过ESB总线以http请求的方式将关键数据以WebSession的方式传递至数据库后台服务端;在访问数据库之前,拦截并解析所述http请求,在所述当前操作的数据库名与Dataperm中的数据库表名一致时,对数据库的SQL进行编辑,加入判断所述RootOrgId是否与Dataperm中的字段名相匹配的条件;然后执行所述数据库的结构化查询语言,以对所述用户所属租户的根组织身份识别码所对应的数据进行读写。

权利要求 :

1.一种多租户数据库的隔离访问方法,其特征在于,包括:

响应用户发起的数据访问请求,获取所述数据访问请求对应的用户身份识别码、用户所属租户的根组织身份识别码以及数据权限信息,所述数据权限信息包括所述数据访问请求对应的数据库表名和字段名;

将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装在网页会话对象中,通过企业服务总线以http请求的方式传递至数据库后台服务端;

在访问数据库之前,拦截并解析所述http请求,根据所述用户所属租户的根组织身份识别码以及所述数据权限信息判断当前操作的数据库名是否与所述数据权限信息中的数据库表名一致;

在所述当前操作的数据库名与所述数据权限信息中的数据库表名一致时,对数据库的结构化查询语言进行编辑,加入判断所述用户所属租户的根组织身份识别码是否与数据权限信息中的字段名相匹配的条件;

在确定所述用户所属租户的根组织身份识别码与数据权限信息中的字段名相匹配时,执行所述数据库的结构化查询语言,以对所述用户所属租户的根组织身份识别码所对应的数据进行读写;

其中,所述响应用户发起的数据访问请求,获取所述数据访问请求对应的用户身份识别码、用户所属租户的根组织身份识别码以及数据权限信息,所述数据权限信息包括所述数据访问请求对应的数据库表名和字段名的步骤,包括:响应用户发起的数据访问请求,对所述数据访问请求的身份的合法性进行验证,所述数据访问请求包括用户身份识别码、用户所属租户的根组织身份识别码以及用户身份验证码;

在所述数据访问请求的身份合法时,根据所述用户身份识别码以及用户所属租户的根组织身份识别码获取所述数据访问请求对应的数据权限表信息,所述数据权限表信息包括所述数据访问请求对应的数据库表名和字段名。

2.根据权利要求1所述的多租户数据库的隔离访问方法,其特征在于,所述响应用户发起的数据访问请求,对所述数据访问请求的身份的合法性进行验证的步骤,包括:通过网关对所述用户发起的数据访问请求进行拦截;

调用账号服务模块的身份检验接口,对所述数据访问请求中的所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述用户身份验证码进行合法性验证。

3.根据权利要求2所述的多租户数据库的隔离访问方法,其特征在于,所述在所述数据访问请求的身份合法时,根据所述用户身份识别码以及用户所属租户的根组织身份识别码获取所述数据访问请求对应的数据权限表信息的步骤,包括:在所述数据访问请求的身份合法时,通过调用账号服务模块返回所述用户身份识别码以及所述用户所属租户的根组织身份识别码至所述网关;

根据所述用户身份识别码以及用户所属租户的根组织身份识别码,从所述网关的账号管理模块上读取所述数据权限表信息。

4.根据权利要求1所述的多租户数据库的隔离访问方法,其特征在于,所述将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装网页会话对象中,通过企业服务总线http请求的方式传递至数据库后台服务端的步骤之前,包括:根据所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息生成http请求头数据;

通过网关将包含所述http请求头数据以http请求的方式发送给企业服务总线。

5.根据权利要求4所述的多租户数据库的隔离访问方法,其特征在于,所述将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装网页会话对象中,通过企业服务总线http请求的方式传递至数据库后台服务端的步骤,包括:所述企业服务总线接收所述网关发送的请求,远程过程调用框架通过解析所述http请求,获取所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息;

远程过程调用框架将所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息包装进http请求的网页会话对象中;

所述企业服务总线将所述http请求传递至数据库后台服务端。

6.根据权利要求5所述的多租户数据库的隔离访问方法,其特征在于,

所述在访问数据库之前,拦截并解析所述http请求,根据所述用户所属租户的根组织身份识别码以及所述数据权限信息判断当前操作的数据库名是否与所述数据权限信息中的数据库表名一致的步骤,包括:数据库后台服务端接收并解析所述http请求,将解析得到的所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息包装在当前业务服务模块的网页会话对象中;

在访问数据库之前,以调用SQL拦截插件的形式从所述当前业务服务模块的网页会话对象中读取所述用户所属租户的根组织身份识别码以及所述数据权限信息;

判断当前操作的数据库名是否与所述数据权限信息中的数据库表名一致;

所述在所述当前操作的数据库名与所述数据权限信息中的数据库表名一致时,对数据库的结构化查询语言进行编辑,加入判断所述用户所属租户的根组织身份识别码是否与数据权限信息中的字段名相匹配的条件的步骤,包括:在所述当前操作的数据库名与所述数据权限信息中的数据库表名一致时,所述SQL拦截插件对数据库的结构化查询语言进行编辑,加入判断所述用户所属租户的根组织身份识别码是否与数据权限信息中的字段名相匹配的条件。

7.根据权利要求1所述的多租户数据库的隔离访问方法,其特征在于,所述数据权限信息中的字段名被赋值为与所述用户所属租户的根组织身份识别码一致。

8.一种数据库服务端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的多租户数据库的隔离访问方法的步骤。

9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的多租户数据库的隔离访问方法的步骤。

说明书 :

多租户数据库的隔离访问方法、服务端以及存储介质

技术领域

[0001] 本发明涉及数据库技术领域,尤其涉及一种多租户数据库的隔离访问方法、数据库服务端以及计算机可读存储介质。

背景技术

[0002] 数据库层的多租户(Multi Tenancy/Tenant)共享是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务。SaaS是(software‑as‑a‑service,软件即服务),它是一种通过Internet提供软件租用的模式。数据库层的多租户共享业务需要满足并实现Saas系统的多租户之间的“数据级权限隔离”,实现用户登录不同的租户,看到不同的租户数据,从而实现相关业务;而权限隔离,指的是平台管理员只能管理租户的账号和相关信息,不能操作租户的内部业务。各租户拥有自己的角色和权限,相互不能影响。
[0003] SaaS系统最核心的技术难题是租户数据的隔离问题,必须保证租户数据的安全,就是如何对应用数据进行设计,以支持多租户,而这种设计的思路,是要在数据的共享、安全隔离和性能间取得平衡。
[0004] 目前行业内多采用多租户共享数据库模式,通常有三种模式:
[0005] 第一种:独立数据库,即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本也高;
[0006] 第二种:共享数据库、独立Schema(Schema是数据库中的用户对应的数据库对象的集合),即多个或所有租户共享数据库,将每个租户关联到同一个数据库的不同Schema,租户间数据彼此逻辑不可见,上层应用程序的实现和独立数据库一样简单;优点是为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;缺点是备份恢复稍显复杂;
[0007] 第三种:共享数据库、共享Schema、共享数据表,即租户共享同一个Database,数据表中通过租户身份识别码(Tenant ID)区分租户的数据,在逻辑业务层指定Tenant ID,在表中通过Tenant ID区分租户的数据;这种方式共享程度最高、而且可维护性高;但是隔离级别最低的模式。
[0008] 为了解决租户数据的隔离问题,有必要提出一种全新的全系统层面的解决方案,从系统框架层实现隐式数据隔离,对业务层逻辑完全透明,保证绝对安全性。

发明内容

[0009] 本发明的主要目的在于提供一种多租户数据库的隔离访问方法、数据库服务端以及计算机可读存储介质,以在多租户的数据库系统中从系统框架层实现隐式数据隔离,对业务层逻辑完全透明,保证绝对安全性。
[0010] 为实现上述目的,本发明提供了一种多租户数据库的隔离访问方法,其特征在于,包括:
[0011] 响应用户发起的数据访问请求,获取所述数据访问请求对应的用户身份识别码、用户所属租户的根组织身份识别码以及数据权限信息,所述数据权限信息包括所述数据访问请求对应的数据库表名和字段名;
[0012] 将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装在网页会话对象中,通过企业服务总线以http请求的方式传递至数据库后台服务端;
[0013] 在访问数据库之前,拦截并解析所述http请求,根据所述用户所属租户的根组织身份识别码以及所述数据权限信息判断当前操作的数据库名是否与所述数据权限信息中的数据库表名一致;
[0014] 在所述当前操作的数据库名与所述数据权限信息中的数据库表名一致时,对数据库的结构化查询语言进行编辑,加入判断所述用户所属租户的根组织身份识别码是否与数据权限信息中的字段名相匹配的条件;
[0015] 在确定所述用户所属租户的根组织身份识别码与数据权限信息中的字段名相匹配时,执行所述数据库的结构化查询语言,以对所述用户所属租户的根组织身份识别码所对应的数据进行读写。
[0016] 进一步地,所述响应用户发起的数据访问请求,获取所述数据访问请求对应的用户身份识别码、用户所属租户的根组织身份识别码以及数据权限信息,所述数据权限信息包括所述数据访问请求对应的数据库表名和字段名的步骤,包括:
[0017] 响应用户发起的数据访问请求,对所述数据访问请求的身份的合法性进行验证,所述数据访问请求包括用户身份识别码、用户所属租户的根组织身份识别码以及用户身份验证码;
[0018] 在所述数据访问请求的身份合法时,根据所述用户身份识别码以及用户所属租户的根组织身份识别码获取所述数据访问请求对应的数据权限表信息,所述数据权限表信息包括所述数据访问请求对应的数据库表名和字段名。
[0019] 进一步地,所述响应用户发起的数据访问请求,对所述数据访问请求的身份的合法性进行验证的步骤,包括:
[0020] 通过网关对所述用户发起的数据访问请求进行拦截;
[0021] 调用账号服务模块的身份检验接口,对所述数据访问请求中的所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述用户身份验证码进行合法性验证。
[0022] 进一步地,所述在所述数据访问请求的身份合法时,根据所述用户身份识别码以及用户所属租户的根组织身份识别码获取所述数据访问请求对应的数据权限表信息的步骤,包括:
[0023] 在所述数据访问请求的身份合法时,通过调用账号服务模块返回所述用户身份识别码以及所述用户所属租户的根组织身份识别码至所述网关;
[0024] 根据所述用户身份识别码以及用户所属租户的根组织身份识别码,从所述网关的账号管理模块上读取所述数据权限表信息。
[0025] 进一步地,所述将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装网页会话对象中,通过企业服务总线http请求的方式传递至数据库后台服务端的步骤之前,包括:
[0026] 根据所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息生成http请求头数据;
[0027] 通过网关将包含所述http请求头数据以http请求的方式发送给企业服务总线。
[0028] 进一步地,所述将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装网页会话对象中,通过企业服务总线http请求的方式传递至数据库后台服务端的步骤,包括:
[0029] 所述企业服务总线接收所述网关发送的请求,远程过程调用框架通过解析所述http请求,获取所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息;
[0030] 远程过程调用框架将所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息包装进http请求的网页会话对象中;
[0031] 所述企业服务总线将所述http请求传递至数据库后台服务端。
[0032] 进一步地,所述在访问数据库之前,拦截并解析所述http请求,根据所述用户所属租户的根组织身份识别码以及所述数据权限信息判断当前操作的数据库名是否与所述数据权限信息中的数据库表名一致的步骤,包括:
[0033] 数据库后台服务端接收并解析所述http请求,将解析得到的所述用户身份识别码、所述用户所属租户的根组织身份识别码以及所述数据权限表信息包装在当前业务服务模块的网页会话对象中;
[0034] 在访问数据库之前,以调用SQL拦截插件的形式从所述当前业务服务模块的网页会话对象中读取所述用户所属租户的根组织身份识别码以及所述数据权限信息;
[0035] 判断当前操作的数据库名是否与所述数据权限信息中的数据库表名一致;
[0036] 所述在所述当前操作的数据库名与所述数据权限信息中的数据库表名一致时,对数据库的结构化查询语言进行编辑,加入判断所述用户所属租户的根组织身份识别码是否与数据权限信息中的字段名相匹配的条件的步骤,包括:
[0037] 在所述当前操作的数据库名与所述数据权限信息中的数据库表名一致时,所述SQL拦截插件对数据库的结构化查询语言进行编辑,加入判断所述用户所属租户的根组织身份识别码是否与数据权限信息中的字段名相匹配的条件。
[0038] 进一步地,所述数据权限信息中的字段名被赋值为与所述用户所属租户的根组织身份识别码一致。
[0039] 本发明还提供了一种数据库服务端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上任一项所述的多租户数据库的隔离访问方法的步骤。
[0040] 本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如上任一项所述的多租户数据库的隔离访问方法的步骤
[0041] 本发明的上述方案至少包括以下有益效果:
[0042] 在本发明的实施例中,通过在接收到前端传递过来的数据访问请求时,在系统框架层面对所述UID、RootOrgId以及Dataperm等关键的数据,以封装在http请求的WebSession中的形式,进行数据隔离和各个服务层之间的隐性传递,业务服务层无法干预,保证了数据的绝对隔离和安全性;所述数据库后台服务端通过对http请求的拦截,在对数据库进行操作之前,通过对数据库的SQL进行编辑,加入判断所述RootOrgId是否与Dataperm中包含的字段名相匹配的条件,达到只有在所述RootOrgId与所述数据库服务端中Dataperm记录的字段名相匹配时,才会对所述数据库的具体被隔离访问的字段进行进一步的操作,实现了用户只能对其RootOrgId相匹配的数据库表和数据库字段进行读写,从而实现了数据库不同租户之间的数据的隔离访问的效果;同时,所述多租户数据库的隔离访问方法对各个业务服务层逻辑是透明的,减少业务层隔离的逻辑代码,降低系统复杂度。

附图说明

[0043] 图1为本发明一实施例中的数据库服务系统的模块架构示意图;
[0044] 图2为图1中的数据库服务端的硬件架构示意图;
[0045] 图3为本发明第一实施例中的一种多租户数据库的隔离访问方法的流程示意图;
[0046] 图4为图3中步骤S10的子流程图;
[0047] 图5为本发明第二实施例中的一种多租户数据库的隔离访问方法的流程示意图。
[0048] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0049] 下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
[0050] 请一并参考图1和图2,图1为本申请提供一实施例中的数据库服务系统100的模块架构示意图;图2为图1中的数据库服务端102的硬件架构示意图。
[0051] 所述数据库服务系统100包括前端101以及数据库服务端102。所述数据库服务端102包括网关201、企业服务总线(Enterprise Service Bus,ESB总线)202以及数据库后台服务端203。
[0052] 其中,用户可以在前端101通过web访问、应用软件或者其他方式对数据库(Database)发起数据访问请求。其中,所述前端可以是计算机、智能终端等硬件设备,也可以是web网页、软件界面等软件交互界面。
[0053] 数据库服务端102是整个数据库系统的后台,在一实施例中,所述数据库服务端102可以是整体采用微服务架构,各个服务层可以是基于RPC(Remote Promote Call,进程间通信)框架的数据库业务服务层。
[0054] 可以理解是,在其他实施例中,并不以RPC框架的数据库管理后台为限,只需要符合可以起到对用户需要隔离访问的数据库的数据权限信息进行封装后的隐性传递即可,在此并不做具体限制。
[0055] 网关201用于接收用户通过前端101发起的数据访问请求,以及对用户的身份的合法性进行验证,并将用户请求访问的数据库对应的数据库表名和字段名进行封装后,通过ESB总线202发送给数据库后台服务端203。
[0056] 数据库后台服务端203用于提供所述数据库的后台服务。
[0057] 该数据库后台服务端203可以是服务器硬件,用于提供数据库中数据的存储以及对数据的读写管理;例如,可以是一个或者多个服务器,所述服务器可以是本地服务器,远程服务器,或者云端服务器,还可以是本地服务器、远程服务器和云端服务器中一个或多个的集合。
[0058] 可以理解都是,数据库后台服务端203也可以包括用于管理数据库中数据的读写的软件,例如,基于RPC(Remote Promote Call,进程间通信)框架的数据库数据读写业务服务层程序,或者基于数据库的SQL(Structured Query Language,结构化查询语言)的数据读写程序等。
[0059] 请参考图3,为本申请提供第一实施例中的一种多租户数据库的隔离访问方法110的流程示意图,在本实施例中,该多租户数据库的隔离访问方法包括:
[0060] 步骤S10,响应用户发起的数据访问请求,获取所述数据访问请求对应的用户身份识别码(User ID,UID)、用户所属租户的根组织身份识别码(Root organization ID,RootOrgId)以及数据权限信息(Dataperm),所述Dataperm包括所述数据访问请求对应的数据库表名和字段名。
[0061] 当用户通过前端101发起数据访问请求时,数据库服务端102接收该数据访问请求,并对所述数据访问请求进行解析,获取所述数据访问请求对应的UID、RootOrgId以及Dataperm,所述Dataperm包括所述数据访问请求对应的数据库表名和字段名。
[0062] 可以理解是,所述UID可以用于对用户的身份进行确认;所述RootOrgId为数据库中用户所属租户对应的根组织信息;所述数据库表名为用户需要隔离访问的数据表名,所述字段名为需要隔离访问的隔离数据字段。
[0063] 进一步地,在本实施例中,所述字段名可以被赋值为与所述RootOrgId一致。
[0064] 步骤S20,将根据所述UID、RootOrgId以及Dataperm生成http请求头数据包装在网页会话对象(WebSession)中,通过ESB总线202以http请求的方式传递至数据库后台服务端203。
[0065] 具体的,在步骤S20中,ESB总线202接收到解析数据访问请求得到的所述UID、RootOrgId以及Dataperm后,将所述UID、RootOrgId以及Dataperm生成http请求头数据,并包装在http请求的WebSession中,然后ESB总线202将该http请求发送至数据库后台服务端203。
[0066] 由于所述UID、RootOrgId以及Dataperm是被封装在http请求的WebSession中,然后传递到数据库后台服务端203的,因此在RPC框架层面实现了关键的数据(即RootOrgId以及Dataperm)在各个服务层之间的隐性传递。
[0067] 步骤S30,在访问数据库之前,拦截并解析所述http请求,根据所述RootOrgId以及Dataperm判断当前操作的数据库名是否与所述Dataperm中的数据库表名一致。
[0068] 具体的,在数据库后台服务端203接收到所述ESB总线202发送的http请求之后,可以通过SQL拦截插件22拦截并解析所述http请求,根据所述RootOrgId确定欲操作的当前数据库,然后根据Dataperm中包含的数据库表名判断所述当前操作的数据库名是否与所述Dataperm中的包含数据库表名一致;只有在当前操作的数据库名与所述Dataperm中包含的数据库表名一致时,也就是说,用户发起的数据访问请求中的RootOrgId对应的数据库表名与所述数据库服务端102中记录的用户所属租户对应的有权限进行隔离访问的数据库表名一致时,才会进一步对所述数据库表进行进一步操作。
[0069] 步骤S40,在所述当前操作的数据库名与所述Dataperm中的数据库表名一致时,对数据库的结构化查询语言(SQL,Structured Query Language)进行编辑,加入判断所述RootOrgId是否与Dataperm中的字段名相匹配的条件。
[0070] 具体的,在所述当前操作的数据库名与所述Dataperm中的包含数据库表名一致一致时,SQL拦截插件22对数据库的SQL进行编辑,加入判断所述RootOrgId是否与Dataperm中的字段名相匹配的条件;也就是说,加入判断所述用户发起的数据访问请求中的RootOrgId是否与所述数据库服务端102中Dataperm记录的用户所属租户对应的有权限进行隔离访问的数据字段名相匹配;只有在所述RootOrgId与所述数据库服务端102中Dataperm记录的字段名相匹配时,才会对所述数据库的具体被隔离访问的字段进行进一步的操作。
[0071] 其中,在本实施例中,所述字段名被赋值为与所述RootOrgId一致,也就是说,所述判断条件为“where root_org_id=xxx”(xxx为RootOrgId的值);可以理解的是,在其他实施方式中,所述字段名可以被赋值为所述RootOrgId经过加密运算、截取运算或者其他方式运算后的值,只需要满足两者之间的一一对应关系即可。
[0072] 步骤S50,在确定所述RootOrgId与Dataperm中的字段名相匹配时,执行所述数据库的SQL,以对所述RootOrgId所对应的数据进行读写。
[0073] 具体的,在确定所述RootOrgId与Dataperm中包含的字段名相匹配时,执行所述数据库的SQL,以对所述RootOrgId所对应的数据进行读写,即对用户发起的所述数据访问请求对应的数据库中的数据表和数据字段进行读写。
[0074] 采用本实施例中的多租户数据库的隔离访问方法,通过在接收到前端101传递过来的数据访问请求时,在系统框架层面对所述UID、RootOrgId以及Dataperm等关键的数据,以封装在http请求的WebSession中的形式,进行数据隔离和各个服务层之间的隐性传递,业务服务层23无法干预,保证了数据的绝对隔离和安全性;所述数据库后台服务端203通过对http请求的拦截,在对数据库进行操作之前,通过对数据库的SQL进行编辑,加入判断所述RootOrgId是否与Dataperm中包含的字段名相匹配的条件,达到只有在所述RootOrgId与所述数据库服务端102中Dataperm记录的字段名相匹配时,才会对所述数据库的具体被隔离访问的字段进行进一步的操作,实现了用户只能对其RootOrgId相匹配的数据库表和数据库字段进行读写,从而实现了数据库不同租户之间的数据的隔离访问的效果;同时,所述多租户数据库的隔离访问方法对各个业务服务层23逻辑是透明的,减少业务层隔离的逻辑代码,降低系统复杂度。
[0075] 进一步地,请一并结合图4,在一可选的实施例中,所述步骤S10可以具体包括:
[0076] 步骤S101,响应用户发起的数据访问请求,对所述数据访问请求的身份的合法性进行验证,所述数据访问请求包括用户身份识别码、用户所属租户的根组织身份识别码以及用户身份验证码。
[0077] 具体的,在该步骤S101中,当数据库服务端102的网关201接收该数据访问请求,并对所述数据访问请求进行解析,获取所述数据访问请求对应的UID、RootOrgId以及用户身份验证码(Ticket);并根据所述UID以及Ticket对所述数据访问请求的身份的合法性进行验证。其中,所述Ticket可以是固定密码、生物特征识别码、动态口令等用于验证用户身份的密码口令。
[0078] 进一步地,所述步骤S101可以具体包括:
[0079] 通过网关201对所述用户发起的数据访问请求进行拦截;
[0080] 调用账号服务模块的身份检验接口,对所述数据访问请求中的所述UID、RootOrgId以及Ticket进行合法性验证。
[0081] 步骤S102,在所述数据访问请求的身份合法时,根据所述用户身份识别码以及用户所属租户的根组织身份识别码获取所述数据访问请求对应的数据权限表信息,所述数据权限表信息包括所述数据访问请求对应的数据库表名和字段名。
[0082] 具体的,在一具体示例中,所述步骤S102可以具体包括:
[0083] 在所述数据访问请求的身份合法时,通过调用账号服务模块返回所述UID以及RootOrgId至网关201;
[0084] 根据所述UID以及RootOrgId,从所述网关201的账号管理模块上读取所述Dataperm。
[0085] 在本实施例中,通过网关201对数据访问请求的拦截,对用户的身份进行验证,并在所述数据访问请求的身份合法时,根据所述UID以及RootOrgId,从所述网关201的账号管理模块上读取所述Dataperm。
[0086] 进一步地,请一并结合图5,为基于图3中第一实施例的第二实施例中的多租户数据库的隔离访问方法210的流程示意图。在该第二实施例中,步骤S10、S20、S50均与第一实施方式相同,在此不再赘述;其不同在于,所述步骤S20之前,可以包括:
[0087] 步骤S201,根据所述UID、RootOrgId以及Dataperm生成http请求头数据;
[0088] 步骤S202,通过网关201将包含所述http请求头数据以http请求的方式发送给ESB总线202。
[0089] 具体的,在所述数据访问请求的身份合法时,数据库服务端102通过调用账号服务模块返回所述UID以及RootOrgId至网关201,网关201根据所述UID、RootOrgId以及Dataperm生成http请求头数据,将包含所述http请求头数据以http请求的方式发送给ESB总线202;从而在数据库服务端102框架的信号接收端,就实现了关键的数据(即RootOrgId以及Dataperm)的隐性传递,从而达到在整个框架层面实现了关键的数据(即RootOrgId以及Dataperm)在各个服务层之间的隐性传递的目的。
[0090] 进一步地,在该第二实施例中,所述步骤S20可以包括:
[0091] 步骤S203,所述ESB总线202接收所述网关201发送的请求,RPC框架21通过解析所述http请求,获取所述UID、RootOrgId以及Dataperm;
[0092] 步骤S204,RPC框架21将所述RPC包装进http请求的WebSession中;
[0093] 步骤S205,所述ESB总线202将所述http请求传递至数据库后台服务端203。
[0094] 进一步地,在该第二实施例中,所述步骤S30,可以包括:
[0095] 步骤S301,数据库后台服务端203接收并解析所述http请求,将解析得到的所述UID、RootOrgId以及Dataperm包装在当前业务服务模块的WebSession中;
[0096] 步骤S302,在访问数据库之前,以调用SQL拦截插件22的形式从所述当前业务服务模块的WebSession中读取所述RootOrgId以及Dataperm;
[0097] 步骤S303,判断当前操作的数据库名是否与所述Dataperm中的数据库表名一致。
[0098] 在本实施例中,所述步骤40可以具体包括:在所述当前操作的数据库名与所述Dataperm中的包含数据库表名一致一致时,所述SQL拦截插件22对数据库的SQL进行编辑,加入判断所述RootOrgId是否与Dataperm中的字段名相匹配的条件。
[0099] 在本实施例中,在系统框架层面从上到下涉及到账号服务、网关、ESB总线以及各业务服务进行数据隔离和各个服务层之间的隐性传递,在前端101的请求入口处封装所述UID、RootOrgId以及Dataperm中包含的需要隔离的“数据库表名“、“隔离字段名”信息等关键的数据,传递到底层服务的SQL拦截插件22中,改写SQL,从数据库层面实现读写的行级隔离。
[0100] 请再次参考图2,本发明的一具体实施例提供了一种数据库服务端102,包括存储器51、处理器52以及存储在存储器51中并可在处理器52上运行的计算机程序53,该处理器52执行计算机程序53时实现上述的实施例中任一项所述的多租户数据库的隔离访问方法的步骤。
[0101] 具体的,在本发明的具体实施例中,处理器52执行计算机程序53时实现如下步骤:
[0102] 步骤S10,响应用户发起的数据访问请求,获取所述数据访问请求对应的UID、RootOrgId以及Dataperm,所述Dataperm包括所述数据访问请求对应的数据库表名和字段名;
[0103] 步骤S20,将根据所述用户身份识别码、所述用户所属租户的根组织身份识别码、以及所述数据权限信息生成http请求头数据包装在WebSession中,通过ESB总线202以http请求的方式传递至数据库后台服务端203;
[0104] 步骤S30,在访问数据库之前,拦截并解析所述http请求,根据所述RootOrgId以及Dataperm判断当前操作的数据库名是否与所述Dataperm中的数据库表名一致;
[0105] 步骤S40,在所述当前操作的数据库名与所述Dataperm中的数据库表名一致时,对数据库的SQL进行编辑,加入判断所述RootOrgId是否与Dataperm中的字段名相匹配的条件;
[0106] 步骤S50,在确定所述RootOrgId与Dataperm中的字段名相匹配时,执行所述数据库的SQL,以对所述RootOrgId所对应的数据进行读写。
[0107] 可选的,处理器52执行计算机程序53时还可以实现:
[0108] 所述步骤S10具体包括:
[0109] 步骤S101,响应用户发起的数据访问请求,对所述数据访问请求的身份的合法性进行验证,所述数据访问请求包括UID、RootOrgId以及Dataperm。
[0110] 步骤S102,在所述数据访问请求的身份合法时,根据所述UID以及RootOrgId获取所述数据访问请求对应的Dataperm,所述Dataperm包括所述数据访问请求对应的数据库表名和字段名。
[0111] 进一步地,所述步骤S101可以具体包括:
[0112] 通过网关201对所述用户发起的数据访问请求进行拦截;
[0113] 调用账号服务模块的身份检验接口,对所述数据访问请求中的所述UID、RootOrgId以及Ticket进行合法性验证。
[0114] 进一步地,所述步骤S102可以具体包括:
[0115] 在所述数据访问请求的身份合法时,通过调用账号服务模块返回所述UID以及RootOrgId至所述网关201;
[0116] 根据所述UID以及RootOrgId,从所述网关201的账号管理模块上读取所述Dataperm。
[0117] 可选的,处理器52执行计算机程序53时还可以在所述步骤S20之前实现:
[0118] 步骤S201,根据所述UID、RootOrgId以及Dataperm生成http请求头数据;
[0119] 步骤S202,通过网关201将包含所述http请求头数据以http请求的方式发送给ESB总线202。
[0120] 可选的,处理器52执行计算机程序53时,可以实现:
[0121] 所述步骤S20包括:
[0122] 步骤S203,所述ESB总线202接收所述网关201发送的请求,RPC框架21通过解析所述http请求,获取所述UID、RootOrgId以及Dataperm;
[0123] 步骤S204,RPC框架21将所述RPC包装进http请求的WebSession中;
[0124] 步骤S205,所述ESB总线202将所述http请求传递至数据库后台服务端203。
[0125] 可选的,处理器52执行计算机程序53时,可以实现:
[0126] 所述步骤S30包括:
[0127] 步骤S301,数据库后台服务端203接收并解析所述http请求,将解析得到的所述UID、RootOrgId以及Dataperm包装在当前业务服务模块的WebSession中;
[0128] 步骤S302,在访问数据库之前,以调用SQL拦截插件22的形式从所述当前业务服务模块的WebSession中读取所述RootOrgId以及Dataperm;
[0129] 步骤S303,判断当前操作的数据库名是否与所述Dataperm中的数据库表名一致。
[0130] 本发明的一具体实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述的实施例中任一项所述的多租户数据库的隔离访问方法的步骤,所述具体步骤在此不再赘述。
[0131] 示例性的,计算机可读存储介质的计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。
[0132] 需要说明的是,由于计算机可读存储介质的计算机程序被处理器执行时实现上述的多租户数据库的隔离访问方法的步骤,因此上述多租户数据库的隔离访问方法的所有实施例均适用于该计算机可读存储介质,且均能达到相同或相似的有益效果。
[0133] 在本说明书的描述中,参考术语“一实施例”、“另一实施例”、“其他实施例”、或“第一实施例~第X实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料、方法步骤或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0134] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0135] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0136] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0137] 以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。