掌桥专利:专业的专利平台
掌桥专利
首页

多租户数据库管理方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 19:28:50


多租户数据库管理方法、装置、电子设备及存储介质

技术领域

本申请涉及云计算技术领域,尤其涉及一种多租户数据库管理方法、装置、电子设备及存储介质。

背景技术

随着云计算技术的不断发展,对于云计算相关应用的研究也不断深化。多租户技术(SaaS)是一种软件架构技术,是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。

现有技术中,政务云平台中有提供个别开源如MySQL、MongoDB数据库实例,满足在政务云平台上用户对各种数据库的使用需求,在云平台中提供多数据库类型的服务。

但是,上述方法不适用管理多租户,而且租户使用成本、数据库数据迁移的成本较高。

发明内容

本申请提供一种多租户数据库管理方法、装置、电子设备及存储介质,可以管理多租户,不需要本地安装下载相应数据库,直接在云端使用,降低租户使用成本、数据库数据迁移的成本。

第一方面,本申请提供一种多租户数据库管理方法,应用于云端,所述方法包括:

获取租户发送的服务请求;所述服务请求中包括所述租户对应的访问数据类型,所述访问数据类型与数据库微服务对应;

判断所述访问数据类型是否为Oracle实例类型;

若否,则将所述服务请求转发到对应的数据库微服务,以使所述数据库微服务创建相应的虚拟机,并启动所述虚拟机供租户使用相应数据库;

若是,则检查是否已存在与所述访问数据类型对应的容器数据库CDB,并基于所述CDB运行至少一个便携式数据库PDB供租户使用。

可选的,检查是否存在与所述访问数据类型对应的容器数据库CDB,并基于所述CDB运行至少一个便携式数据库PDB供租户使用,包括:

检查是否存在与所述访问数据类型对应的容器数据库CDB;

若是,则基于已存在的CDB创建至少一个PDB,并运行所述至少一个PDB供租户使用;

若否,则调用Oracle实例应用程序编程接口API创建与所述访问数据类型对应的CDB,并基于所述CDB创建至少一个PDB,并运行所述至少一个PDB供租户使用。

可选的,所述方法还包括:

将多种类型的数据库微服务进行封装;其中,每种类型的数据库微服务的数量至少为一个,且每种类型的数据库微服务有对应的标识ID;

将封装完成的多种类型的数据库微服务注册到所述云端的门户中心;

相应的,将所述服务请求转发到对应的数据库微服务,包括:

通过所述访问数据类型获取对应的数据库微服务的标识ID;

利用所述标识ID将所述服务请求转发到所述门户中心中对应的数据库微服务。

可选的,所述方法还包括:

获取租户输入的访问数据;

调用https加密协议对所述访问数据进行第一层数据加密;

设置预设待加密数据库表的加密密钥对所述访问数据进行第二层数据加密,生成加密数据ID和加密数据的键-值对;其中,所述待加密数据库表对应多个管理员,每个管理员对应一个密钥;

将所述加密数据ID和所述加密数据的键-值对存入远程字典服务Redis集群,并将所述加密数据的键-值对存入MongoDB数据库中。

可选的,所述方法还包括:

获取租户输入的待读取的访问数据的ID;

根据所述待读取的访问数据的ID从所述Redis集群中查询加密后的待访问数据的加密数据ID,若查询到所述加密数据ID,则得到加密数据的值,若查询不到,则从所述MongoDB数据库中查询加密后的访问数据对应的加密数据的键,得到加密数据的值;

利用预设待加密数据库表的加密密钥对所述加密数据的值进行第二层数据解密,并调用https加密协议进行第一层数据解密,得到解密后的待读取的访问数据。

可选的,所述方法还包括:

获取租户输入的用于对数据库进行操作的SQL语句,并对所述SQL语句进行解析;所述SQL语句为MySQL数据库中使用的编程语句;

对解析后的SQL语句中的关键字与目标数据库中的目标语句的关键字进行比对,得到比对结果,并根据所述比对结果对解析后的SQL语句进行优化;

利用优化后的SQL语句执行相关的数据库操作;

其中,所述目标数据库为所述访问数据类型对应的数据库。

可选的,对解析后的SQL语句中的关键字与目标数据库中的目标语句的关键字进行比对,得到比对结果,并根据所述比对结果对解析后的SQL语句进行优化,包括:

判断解析后的SQL语句中的关键字与目标数据库中目标语句的关键字是否相同;

若全部或部分关键字不同,则将解析后的SQL语句中的全部或部分关键字替换成目标数据库中目标语句的关键字,并将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法;

若相同,则将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法。

第二方面,本申请提供了一种多租户数据库管理装置,所述装置包括:

获取模块,用于获取租户发送的服务请求;所述服务请求中包括所述租户对应的访问数据类型,所述访问数据类型与数据库微服务对应;

判断模块,用于判断所述访问数据类型是否为Oracle实例类型;

转发模块,用于当所述访问数据类型为非Oracle实例类型时,将所述服务请求转发到对应的数据库微服务,以使所述数据库微服务创建相应的虚拟机,并启动所述虚拟机供租户使用相应数据库;

处理模块,用于当所述访问数据类型为Oracle实例类型时,检查是否已存在与所述访问数据类型对应的容器数据库CDB,并基于所述CDB运行至少一个便携式数据库PDB供租户使用。

第三方面,本申请提供了一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;

所述存储器存储计算机执行指令;

所述处理器执行所述存储器存储的计算机执行指令,以实现如第一方面中任一项所述的方法。

第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面中任一项所述的多租户数据库管理方法。

综上所述,本申请提供一种多租户数据库管理方法、装置、电子设备及存储介质,应用于云端,该方法可以通过获取租户发送的服务请求;服务请求中包括租户对应的访问数据类型,访问数据类型与数据库微服务对应;进一步的,可以判断服务请求中访问数据类型是否为Oracle实例类型;若否,则可以将服务请求转发到对应的数据库微服务,以使数据库微服务创建相应的虚拟机,并启动虚拟机供租户使用相应数据库;若是,则检查是否已存在与访问数据类型对应的容器数据库CDB,并基于CDB运行至少一个便携式数据库PDB供租户使用。这样,既可以满足在云端上用户对各种数据库的使用需求,还可以通过为多租户提供Oracle实例,管理多租户,不需要本地安装下载相应数据库,直接在云端使用,降低租户使用成本、数据库数据迁移的成本。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1为本申请实施例提供的一种应用场景示意图;

图2为本申请实施例提供的一种多租户数据库管理方法的流程示意图;

图3为本申请实施例提供的一种封装和调用数据库微服务的框图;

图4为本申请实施例提供的一种具体的多租户数据库管理方法的流程示意图;

图5为本申请实施例提供的一种多租户数据库管理方法的流程图;

图6为本申请实施例提供的一种多租户数据库管理装置的结构示意图;

图7为本申请实施例提供的一种电子设备的结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一设备和第二设备仅仅是为了区分不同的设备,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。

需要说明的是,本申请中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。

本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。

下面结合附图对本申请实施例进行介绍。图1为本申请实施例提供的一种应用场景示意图,本申请提供的一种多租户数据库管理方法可以应用于如图1所示的应用场景中。该应用场景包括:第一租户101,第一终端设备102、第二租户103、第二终端设备104和云端105。当第一租户101需要调用MySQL数据库中的数据进行业务处理时,可以通过第一终端设备102向云端105发送服务请求,请求调用MySQL数据库以供使用,相应的,云端105可以接收该服务请求,进行一系列相关操作调用出相应的MySQL数据库以供第一租户101使用,去处理相应的业务,类似的,若第二租户102需要调用Oracle数据库中的数据进行业务处理时,可以通过第二终端设备104向云端105发送服务请求进行相关操作,该操作过程与上述类似,在此不再赘述,其中,云端105已经提前将多种数据库服务封装起来,供用户调用时使用。

上述终端设备可以是无线终端也可以是有线终端。无线终端可以是指向用户提供语音和/或其他业务数据连通性的设备,具有无线连接功能的手持式设备、或连接到无线调制解调器的其他处理设备。无线终端可以经无线接入网(Radio Access Network,简称RAN)与一个或多个核心网设备进行通信,无线终端可以是移动终端,如移动电话(或称为“蜂窝”电话)和具有移动终端的计算机,例如,可以是便携式、袖珍式、手持式、计算机内置的或者车载的移动装置,它们与无线接入网交换语言和/或数据。再例如,无线终端还可以是个人通信业务(Personal Communication Service,简称PCS)电话、无绳电话、会话发起协议(Session Initiation Protocol,简称SIP)话机、无线本地环路(Wireless Local Loop,简称WLL)站、个人数字助理(Personal Digital Assistant,简称PDA)等设备。无线终端也可以称为系统、订户单元(Subscriber Unit)、订户站(Subscriber Station),移动站(MobileStation)、移动台(Mobile)、远程站(Remote Station)、远程终端(Remote Terminal)、接入终端(Access Terminal)、用户终端(User Terminal)、用户代理(User Agent)、用户设备(User Device or User Equipment),在此不作限定。可选的,上述终端设备还可以是智能手表、平板电脑等设备。

现有技术中,政务云平台中有提供多种个别开源数据库供用户使用,例如MySQL、MongoDB数据库实例,满足在政务云平台上用户对各种数据库的使用需求,在云平台中提供多数据库类型的服务。

但是,上述方法不适用管理多租户,而且租户使用成本、数据库数据迁移的成本较高。

因此,本申请提供一种多租户数据库管理方法,应用于云端,可以通过获取租户发送的服务请求;进一步的,可以判断服务请求中访问数据类型是否为Oracle实例类型;若否,则可以将服务请求转发到对应的数据库微服务,以使数据库微服务创建相应的虚拟机,并启动虚拟机供租户使用相应数据库;若是,则检查是否已存在与访问数据类型对应的容器数据库CDB,并基于CDB运行至少一个便携式数据库PDB供租户使用。这样,既可以满足在云端上用户对各种数据库的使用需求,还可以通过为多租户提供Oracle实例,管理多租户,不需要本地安装下载相应数据库,直接在云端使用,降低租户使用成本、数据库数据迁移的成本。

示例性的,图2为本申请实施例提供的一种多租户数据库管理方法的流程示意图,如图2所示,本申请实施例的方法包括:

S201、获取租户发送的服务请求;所述服务请求中包括所述租户对应的访问数据类型,所述访问数据类型与数据库微服务对应。

本申请实施例中,数据库微服务可以指的是通过服务调用自己数据库中的数据,每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库,其中,数据库微服务可以包括有MySQL数据库微服务、Oracle(Oracle Database,又名Oracle RDBMS)数据库微服务、MongoDB数据库微服务、Redis(Remote Dictionary Server,远程字典服务)数据库微服务或其他类型的数据库微服务。

其中,MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,增加了速度并提高了灵活性,MySQL所使用的SQL语言是用于访问数据库的标准化语言;Oracle也是一种关系数据库管理系统;MongoDB是一个基于分布式文件存储的数据库,它是介于关系数据库和非关系数据库之间的产品,可以存储比较复杂的数据类型。

示例性的,在图1的应用场景下,若第一租户101需要调用MySQL数据库中的数据进行业务处理时,可以通过第一终端设备102向云端105发送服务请求,进一步的,云端105可以获取第一租户101发送的服务请求;该服务请求中包括第一租户101对应的访问数据类型为MySQL数据库微服务。

S202、判断所述访问数据类型是否为Oracle实例类型。

本申请实施例中,Oracle实例可以指的是一组用于管理Oracle数据库文件的内存结构,当一个Oracle实例启动时,Oracle数据库分配一个称为系统全局区(SGA)的内存区域,并启动一个或多个后台进程供用户使用,每个正在运行的Oracle数据库至少与一个Oracle实例相关联,因此,Oracle数据库具有多租户特性,例如Oracle 12c数据库具有多租户特性。

示例性的,在图1的应用场景下,云端105在接收第一租户101发送的服务请求后,通过判断该服务请求中访问数据类型为MySQL数据库微服务,可以确定不是Oracle实例类型,相应的,若云端105在接收第二租户103发送的服务请求后,可以通过判断该服务请求中访问数据类型为Oracle数据库微服务,可以确定是Oracle实例类型。

S203、若否,则将所述服务请求转发到对应的数据库微服务,以使所述数据库微服务创建相应的虚拟机,并启动所述虚拟机供租户使用相应数据库。

本申请实施例中,虚拟机可以指的是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。每个虚拟机都有独立的CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)、硬盘和操作系统。创建虚拟机可以通过生成现有操作系统的全新虚拟镜像来实现,它具有真实windows系统完全一样的功能,在启动虚拟机后,所有操作都是在这个全新的独立的虚拟机里面进行,可以独立安装运行软件,保存数据等,而且可以在现有系统与虚拟镜像之间灵活切换。

示例性的,在图1的应用场景下,云端105通过判断第一租户101发送的服务请求中访问数据类型为MySQL数据库微服务,不是Oracle实例类型,则可以将第一租户101发送的服务请求转发到对应的MySQL数据库微服务,以使MySQL数据库微服务创建相应的虚拟机,并启动该虚拟机供第一租户101使用相应的MySQL数据库。

需要说明的,若调用一个数据库微服务不可以达到完全解决租户的业务需求,则可以通过调用多个数据库微服务使负载均衡以达到解决租户业务需求的目的,本申请实施例对调用几个数据库微服务的数量不作具体限定,可以视实际情况而定。

S204、若是,则检查是否已存在与所述访问数据类型对应的容器数据库CDB,并基于所述CDB运行至少一个便携式数据库PDB供租户使用。

本申请实施例中,CDB(Oracle Multitenant Container Database,容器数据库),是Oracle 12c数据库引入的特性,可以指的是容纳一个或者多个可插拔数据库的数据库,因此,CDB容器数据库中可以创建并且维护多个数据库,在CDB中创建的数据库被称为PDB(Portable Container Database,便携式数据库),CDB的主要作用就是容纳所有相关的PDB的元数据,每个PDB在CDB中是相互独立存在的,在单独使用PDB时,与使用普通数据库无任何区别。

示例性的,在图1的应用场景下,云端105通过判断第二租户103发送的服务请求中访问数据类型为Oracle数据库微服务,是Oracle实例类型,则可以进一步检查云端105中是否已存在与Oracle数据库微服务对应的容器数据库CDB,并基于该CDB运行至少一个便携式数据库PDB供第二租户103使用。

需要说明的是,一个容器数据库CDB可供多个租户使用PDB,且租户与租户在使用CDB时相互隔离,互不影响。

因此,本申请提供的多租户数据库管理方法,应用于云端,不仅可以为租户提供多种数据库服务,还可以为多租户提供Oracle实例,同时管理多租户,不需要本地安装下载相应数据库,直接在云端使用,降低租户使用成本、数据库数据迁移的成本。

可选的,检查是否存在与所述访问数据类型对应的容器数据库CDB,并基于所述CDB运行至少一个便携式数据库PDB供租户使用,包括:

检查是否存在与所述访问数据类型对应的容器数据库CDB;

若是,则基于已存在的CDB创建至少一个PDB,并运行所述至少一个PDB供租户使用;

若否,则调用Oracle实例应用程序编程接口API创建与所述访问数据类型对应的CDB,基于所述CDB创建至少一个PDB,并运行所述至少一个PDB供租户使用。

本申请实施例中,API(Application Programming Interface,应用程序接口)可以指的是一些预先定义的接口,例如函数、HTTP(Hyper Text Transfer Protocol,超文本传输协议)接口,该API用于系统和应用程序通过这个接口,在执行中访问系统中的资源和取得OS(Operating System,操作系统)的服务,它也是程序能取得操作系统服务的唯一途径,不同的API对应不同的数据库微服务。

示例性的,在图1的应用场景下,云端105中可以检查云端中是否已存在与Oracle数据库微服务对应的容器数据库CDB;若是,则可以基于已存在的CDB创建至少一个PDB,并运行该至少一个PDB供第二租户103使用;若云端中不存在与Oracle数据库微服务对应的CDB,则云端105可以调用Oracle实例API创建与Oracle数据库微服务对应的CDB,基于该CDB创建至少一个PDB,并运行至少一个PDB供第二租户103使用,用于处理第二租户103相关的业务。

因此,可以通过CDB管理至少一个PDB,实现多个租户共用一套Oracle实例,在云端上易于横向扩展,减少租户使用成本,而且便于管理,提高使用速率。

可选的,所述方法还包括:

将多种类型的数据库微服务进行封装;其中,每种类型的数据库微服务的数量至少为一个,且每种类型的数据库微服务有对应的标识ID;

将封装完成的多种类型的数据库微服务注册到所述云端的门户中心;

相应的,将所述服务请求转发到对应的数据库微服务,包括:

通过所述访问数据类型获取对应的数据库微服务的标识ID;

利用所述标识ID将所述服务请求转发到所述门户中心中对应的数据库微服务。

本申请实施例中,门户中心是由云端统一规划和建设,目的是用于规范多种类型的数据库微服务的管理流程。通过门户集成,可以实现数据库微服务的调用。

示例性的,云端可以将多种类型的数据库微服务进行封装;进一步的,将封装完成的多种类型的数据库微服务注册到云端的门户中心供用户调用时使用;例如,将相应的服务请求转发到对应的数据库微服务中即为调用相应数据库,云端在接收租户发送的服务请求之后,可以通过服务请求中的访问数据类型获取对应的数据库微服务的标识ID,进一步的,可以利用标识ID将服务请求转发到门户中心中封装中对应的数据库微服务中。

需要说明的是,云端的门户中心中封装的每种类型的数据库微服务的数量可能不止一个,具体视情况而定,本申请实施例对门户中心中每种类型的数据库微服务的数量不作具体限定。

因此,门户中心封装的每种类型的数据库微服务有对应的标识ID,通过标识ID去调用相应数据库,可以提高准确性和处理速率。

示例性的,图3为本申请实施例提供的一种封装和调用数据库微服务的框图,如图3所示,可以将不同型号,不同数据库微服务进行封装,注册到云端的门户中心中,例如,可以将两个MySQL5.6数据库微服务、Redis数据库微服务、Oracle数据库微服务、MongoDB数据库微服务进行封装,注册到云端的门户中心中,进一步的,云端的门户中心可以根据租户选择的数据库调用相应的数据库微服务,为了满足租户的负载均衡需求,可以同时调用两个MySQL5.6数据库微服务。

可选的,所述方法还包括:

获取租户输入的访问数据;

调用https加密协议对所述访问数据进行第一层数据加密;

设置预设待加密数据库表的加密密钥对所述访问数据进行第二层数据加密,生成加密数据ID和加密数据的键-值对;其中,所述待加密数据库表对应多个管理员,每个管理员对应一个密钥;

将所述加密数据ID和所述加密数据的键-值对存入远程字典服务Redis集群,并将所述加密数据的键-值对存入MongoDB数据库中。

本申请实施例中,https加密协议可以指的是安全超文本传输协议,是一个安全通信通道,它基于http开发用于在客户计算机和云端之间交换信息。它使用安全套接字层(Secure Sockets Layer,简称SSL)进行信息交换,是使用TLS(Transport LayerSecurity,传输层安全性协议)/SSL加密的HTTP协议,也就是在http上又加了一层处理加密信息的模块。

加密密钥可以指的是发送和接收数据的双方,使用相同的或对称的密钥对明文进行加密解密运算的加密字符串,例如,加密密钥可以为21位密码。

键-值对可以指的是编程语言对数学概念中映射的实现,其中,键(key)用作元素的索引,值(value)则表示所存储和读取的数据。

示例性的,若租户需要存储某个敏感数据或需要加密的数据时,则向云端上传服务请求,用于指示存储某个敏感数据或需要加密的数据时,云端可以对其进行加密,具体的,云端会获取租户输入的访问数据,并调用https加密协议对某个敏感数据或需要加密的数据进行第一层数据加密;进一步的,云端还会设置预设待加密数据库表的加密密钥对某个敏感数据或需要加密的数据进行第二层数据加密,例如,设置63位初始密码,由3个管理员分别设置21位密码对上述数据进行第二层数据加密。

进一步的,可以生成相应的加密数据ID和加密数据的键-值对;并将生成的加密数据ID和加密数据的键-值对先存入Redis集群中,进一步的,可以将该加密数据的键-值对存入MongoDB数据库中。

需要说明的是,Redis集群的容量有限,起到一个缓存数据的作用,该Redis集群中的数据时实时更新的,但是MongoDB数据库中的数据是云端产生的所用的加密数据的键-值对。

可以理解的是,所述服务请求可以包括租户输入的访问数据,云端可以在终端设备发起服务请求时,接收该服务请求后分配相应数据库后和上述加密操作一起进行处理,也可以在接收服务请求分配相应数据库之前先进行上述加密操作处理,再去执行存储等操作,可以随时调用加密操作。

因此,对云端上的敏感数据和需要加密的数据,可以调用加密服务进行两层数据加密,提高安全性和可靠性。

可选的,所述方法还包括:

获取租户输入的待读取的访问数据的ID;

根据所述待读取的访问数据的ID从所述Redis集群中查询加密后的待访问数据的加密数据ID,若查询到所述加密数据ID,则得到加密数据的值,若查询不到,则从所述MongoDB数据库中查询加密后的访问数据对应的加密数据的键,得到加密数据的值;

利用预设待加密数据库表的加密密钥对所述加密数据的值进行第二层数据解密,并调用https加密协议进行第一层数据解密,得到解密后的待读取的访问数据。

示例性的,若租户需要读取的访问数据在云端上是敏感数据或经过加密的数据,则租户向云端发送服务请求后,云端可以获取租户输入的待读取的访问数据的ID,进一步的,云端需要对加密的数据进行解密才可以反馈给租户使用,具体的,云端可以根据待读取的访问数据的ID从Redis集群中查询加密后的待访问数据的加密数据ID,若查询到加密数据ID,就可以得到加密数据的值,然后,利用预设待加密数据库表的加密密钥对加密数据的值进行第二层数据解密,并调用https加密协议进行第一层数据解密,得到解密后的待读取的访问数据,例如,先通过设置的63位加密密钥进行解密后,再通过https加密协议进行解密得到租户所需的待读取的访问数据。若查询不到,则从所述MongoDB数据库中查询加密后的访问数据对应的加密数据的键,得到加密数据的值并进行上述相同的第二层和第一层解密,得到租户所需的待读取的访问数据。

可以理解的是,所述服务请求还可以包括租户输入的待读取的访问数据的ID,云端可以在终端设备发起服务请求时,接收该服务请求后分配相应数据库后和上述解密操作一起进行处理,也可以在接收服务请求分配相应数据库之前先进行上述解密操作处理,再去执行读取等操作,可以随时调用解密操作。

因此,通过查询到加密数据ID或加密数据键的方法找到对应的加密数据并进行解密,可以提高解密数据服务的效率和可用性。

可选的,所述方法还包括:

获取租户输入的用于对数据库进行操作的SQL语句,并对所述SQL语句进行解析;所述SQL语句为MySQL数据库中使用的编程语句;

对解析后的SQL语句中的关键字与目标数据库中的目标语句的关键字进行比对,得到比对结果,并根据所述比对结果对解析后的SQL语句进行优化;

利用优化后的SQL语句执行相关的数据库操作;

其中,所述目标数据库为所述访问数据类型对应的数据库。

本申请实施例中,目标数据库可以指的是租户处理相关业务时所需调用的数据库,而目标语句即为租户处理相关业务时所需使用的编程语句。

示例性的,用户在需要调用某个数据库处理业务时,通过终端设备会向云端发送服务请求,该服务请求可以包括租户输入的用于对数据库进行操作的SQL语句,例如,用户需要调用Oracle数据库处理业务,则云端可以获取租户输入的用于对Oracle数据库进行操作的SQL语句,并对该SQL语句进行解析,并对解析后的SQL语句中的关键字与Oracle数据库中的目标语句的关键字进行比对,得到比对结果,根据所述比对结果对解析后的SQL语句进行优化;利用优化后的SQL语句执行相关的数据库操作,该数据库操作是针对数据库中的数据进行的相应操作,例如,调用Oracle数据库中的函数进行相应计算的操作。

可以理解的是,所述服务请求还可以包括租户输入的用于对数据库进行操作的SQL语句,云端可以在接收该服务请求后对用于数据库进行操作的SQL语句进行优化处理,方便利用所述SQL语句处理相应的数据库操作。

因此,可以通过一套SQL语句,调用用户所需的不同类型的数据库,降低数据库变换的成本,提高处理效率。

可选的,对解析后的SQL语句中的关键字与目标数据库中的目标语句的关键字进行比对,得到比对结果,并根据所述比对结果对解析后的SQL语句进行优化,包括:

判断解析后的SQL语句中的关键字与目标数据库中目标语句的关键字是否相同;

若全部或部分关键字不同,则将解析后的SQL语句中的全部或部分关键字替换成目标数据库中目标语句的关键字,并将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法;

若相同,则将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法。

示例性的,若用户所需的目标数据库为Oracle数据库,则云端会对租户输入的SQL语句中关键字和Oracle数据库中的关键字进行对比,具体的,云端会判断解析后的SQL语句中的关键字与Oracle数据库中目标语句的关键字是否相同;若有一部分关键字不同,则将解析后的SQL语句中的该部分关键字替换成目标数据库中目标语句的关键字,例如,输入SQL语句中的关键字为“茶杯”,Oracle数据库中关键字没有茶杯,但是SQL语句经过解析后有Oracle数据库中类似的关键字“cup”,则可以将SQL语句中的关键字替换成“cup”,并将解析后的SQL语句中的语法替换成Oracle数据库中目标语句的语法。

若全部关键字不同,则将解析后的SQL语句中的全部关键字替换成Oracle数据库中目标语句的关键字,并将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法;若SQL语句中关键字和Oracle数据库中的关键字相同,则只需将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法即可。

因此,本申请可以将租户输入的SQL语句转成目标数据库认同的关键字和语法下发指令,应用范围广,提高使用性和便利性。

结合上述实施例,图4为本申请实施例提供的一种具体的多租户数据库管理方法的流程示意图。如图4所示,本申请实施例的执行方法步骤包括:

步骤A:云端根据租户发送的服务请求在门户中心申请数据库,并进一步判断该服务请求中的访问数据类型是否为Oracle实例类型,如果否,执行步骤B,如果是,执行步骤C。

步骤B:云端指定数据库镜像调用API创建相应的虚机(即虚拟机),并启动虚机,进一步可以启动相应的数据库服务,为租户提供可以使用的数据库实例。

步骤C:判断云端是否存在与访问数据类型对应的CDB,若是,则执行步骤D,若是,则执行步骤E。

步骤D:基于已存在的CDB创建PDB,并启动该PDB供租户使用。

步骤E:调用Oracle实例API创建与访问数据类型对应的CDB,再执行步骤D。

可选的,若租户需要对访问的数据进行加密或解密,则需要调用云端的加密服务或解密服务,示例性的,图5为本申请实施例提供的一种多租户数据库管理方法的流程图,如图5所示,租户可以输入表示控制数据库的MySQL SQL语句(即SQL语句),进一步的,云端对MySQL语句(即SQL语句)进行解析,若目标库中关键字不存在,则进行相应的补充,若SQL语句中关键字与目标库中的关键字不同,则转换成目标库中的关键字用法,进一步,可以实现对SQL语句进行性能优化。

相应的,若租户需要对访问的数据进行加密或解密,加密时,可以通过调用https加密协议对访问数据进行第一层数据加密,然后设置相应的加密密钥对访问数据进行第二层数据加密,并将加密过两次的访问数据存储进Redis集群,同时将加密过两次的访问数据存入MongoDB数据库中,完成访问的数据的加密过程;解密时,从Redis集群中查询访问数据对应的加密数据ID,如果存在,则通过加密密钥进行第一次解密,在通过https加密协议进行第二次解密,得到所需的访问数据,若Redis集群中查询不到访问数据对应的加密数据ID,则从MongoDB库中查询,获取到之后进行上述相同方法的两次解密得到所需的访问数据。

进一步的,云端可以将租户输入的表示控制数据库的SQL语句转换为Oracle、信创数据库(达梦、人大金仓)以及其他数据库的语句,并利用转换后的数据库语句调用目标数据库的驱动进行相关数据库操作。

需要说明的是,本申请实施例提供的多租户数据库管理可以供租户在处理业务时调用相应的数据库,但是,租户如果下线或者不处理业务了,云端就可以将租户调用的这个数据库删掉,节省云端空间。

在前述实施例中,对本申请实施例提供的多租户数据库管理方法进行了介绍,而为了实现上述本申请实施例提供的方法中的各功能,作为执行主体的电子设备可以包括硬件结构和/或软件模块,以硬件结构、软件模块、或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。

例如,图6为本申请实施例提供的一种多租户数据库管理装置的结构示意图,如图6所示,该装置包括:获取模块610,判断模块620,转发模块630和处理模块640,其中,获取模块610,用于获取租户发送的服务请求;所述服务请求中包括所述租户对应的访问数据类型,所述访问数据类型与数据库微服务对应;判断模块620,用于判断所述访问数据类型是否为Oracle实例类型;转发模块630,用于当所述访问数据类型为非Oracle实例类型时,将所述服务请求转发到对应的数据库微服务,以使所述数据库微服务创建相应的虚拟机,并启动所述虚拟机供租户使用相应数据库;处理模块640,用于当所述访问数据类型为Oracle实例类型时,检查是否已存在与所述访问数据类型对应的容器数据库CDB,并基于所述CDB运行至少一个便携式数据库PDB供租户使用。

可选的,处理模块640,具体用于:

检查是否存在与所述访问数据类型对应的容器数据库CDB;

若是,则基于已存在的CDB创建至少一个PDB,并运行所述至少一个PDB供租户使用;

若否,则调用Oracle实例应用程序编程接口API创建与所述访问数据类型对应的CDB,基于所述CDB创建至少一个PDB,并运行所述至少一个PDB供租户使用。

可选的,处理模块640还用于:

将多种类型的数据库微服务进行封装;其中,每种类型的数据库微服务的数量至少为一个,且每种类型的数据库微服务有对应的标识ID;

将封装完成的多种类型的数据库微服务注册到所述云端的门户中心;

相应的,转发模块630,具体用于:

通过所述访问数据类型获取对应的数据库微服务的标识ID;

利用所述标识ID将所述服务请求转发到所述门户中心中对应的数据库微服务。

可选的,所述装置还包括加密模块;

获取模块610,还用于获取租户输入的访问数据;

所述加密模块,用于:调用https加密协议对所述访问数据进行第一层数据加密;

设置预设待加密数据库表的加密密钥对所述访问数据进行第二层数据加密,生成加密数据ID和加密数据的键-值对;其中,所述待加密数据库表对应多个管理员,每个管理员对应一个密钥;

将所述加密数据ID和所述加密数据的键-值对存入远程字典服务Redis集群,并将所述加密数据的键-值对存入MongoDB数据库中。

可选的,所述装置还包括解密模块;

获取模块610,还用于获取租户输入的待读取的访问数据的ID;

所述解密模块,用于:根据所述待读取的访问数据的ID从所述Redis集群中查询加密后的待访问数据的加密数据ID,若查询到所述加密数据ID,则得到加密数据的值,若查询不到,则从所述MongoDB数据库中查询加密后的访问数据对应的加密数据的键,得到加密数据的值;

利用预设待加密数据库表的加密密钥对所述加密数据的值进行第二层数据解密,并调用https加密协议进行第一层数据解密,得到解密后的待读取的访问数据。

可选的,所述装置还包括优化模块和执行模块;

获取模块610,还用于获取租户输入的用于对数据库进行操作的SQL语句,并对所述SQL语句进行解析;所述SQL语句为MySQL数据库中使用的编程语句;

优化模块用于,对解析后的SQL语句中的关键字与目标数据库中的目标语句的关键字进行比对,得到比对结果,并根据所述比对结果对解析后的SQL语句进行优化;

执行模块,用于利用优化后的SQL语句执行相关的数据库操作;

其中,所述目标数据库为所述访问数据类型对应的数据库。

可选的,优化模块,具体用于:

判断解析后的SQL语句中的关键字与目标数据库中目标语句的关键字是否相同;

若全部或部分关键字不同,则将解析后的SQL语句中的全部或部分关键字替换成目标数据库中目标语句的关键字,并将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法;

若相同,则将解析后的SQL语句中的语法替换成目标数据库中目标语句的语法。

本申请实施例提供的多租户数据库管理装置的具体实现原理和效果可以参见上述实施例对应的相关描述和效果,此处不做过多赘述。

本申请实施例还提供一种电子设备的结构示意图,图7为本申请实施例提供的一种电子设备的结构示意图,如图7所示,该电子设备可以包括:处理器702以及与所述处理器通信连接的存储器701;该存储器701存储计算机程序;该处理器702执行该存储器701存储的计算机程序,使得该处理器702执行上述任一实施例所述的方法。

其中,存储器701和处理器702可以通过总线703连接。

本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序执行指令,计算机执行指令被处理器执行时用于实现如本申请前述任一实施例中的多租户数据库管理方法。

本申请实施例还提供一种运行指令的芯片,该芯片用于执行如本申请前述任一实施例中由电子设备所执行的多租户数据库管理方法。

本申请实施例还提供一种计算机程序产品,该程序产品包括计算机程序,该计算机程序被处理器执行时可实现如本申请前述任一实施例中由电子设备所执行的多租户数据库管理方法。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的部分步骤。

应理解,上述处理器可以是中央处理单元(central processing unit,CPU),还可以是其它通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器可能包含高速随机存取存储器(random access memory,RAM),也可能还包括非不稳定的存储器(non-volatile memory,NVM),例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。

总线可以是工业标准体系结构(industry standard architecture,ISA)总线、外部设备互连(peripheral component interconnect,PCI)总线或扩展工业标准体系结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。

上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。

一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(application specific integrated circuits,ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。

以上所述,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何在本申请实施例揭露的技术范围内的变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以所述权利要求的保护范围为准。

技术分类

06120115927669