一种防止通过直连访问数据库的系统和方法与流程

文档序号:26589302发布日期:2021-09-10 20:22阅读:65来源:国知局
1.本技术涉及到数据库领域,具体而言,涉及一种防止通过直连访问数据库的系统和方法。
背景技术
::2.在相关技术中,为了保证数据库的安全,一般采用的手段是对发往数据库的命令进行审计。在进行审计的时候,需要在客户端和数据库服务器端(简称为数据库)设置一个中间代理(简称为代理或代理服务),这里将发起数据库数据操作请求的一方均认为是客户端。中间代理处理进行审计之外还可以进行其他的处理,在本段中以审计为例进行说明。客户端将数据操作请求发送到中间代理,中间代理对数据操作请求进行审计后,发送给数据库。3.中间代理不会对数据库和客户端本身进行任何的改动,因此,数据库原来的访问接口仍然会存在,这种情况下,客户端就可以直接通过数据库的访问接口访问数据库,从而避开中间代理的审计,给数据库带来风险。技术实现要素:4.本技术实施例提供了一种防止通过直连访问数据库的系统和方法,以至少解决相关技术中客户端通过数据库的访问接口直接访问数据库而导致可能会对数据库带来风险的问题。5.根据本技术的一个方面,提供了一种防止通过直连访问数据库的系统,包括:代理服务,用于获取客户端发往数据库的数据操作请求,并对所述数据操作请求进行预先配置的处理之后将所述数据操作请求发送给所述数据库,其中,所述客户端为需要对数据库进行数据操作的数据操作方;插件,用于获取发往所述数据库的所有数据库操作请求,并判断获取到的数据操作请求是否来源于所述代理服务,如果来源于所述代理服务则将获取到的数据操作请求发送给所述数据库,如果获取到的数据操作请求不是来源于所述代理服务,则将所述数据操作请求发往所述代理服务。6.进一步地,所述插件,用于获取能够直连所述数据库的网络地址信息,对所述网络地址信息所指示的网络地址和端口号进行监听,获取并拦截所有访问所述网络地址和端口号的数据操作请求,并确定拦截到的数据操作请求不是来源于所述代理服务器。7.进一步地,所述插件通过如下步骤获取能够直连所述数据库的网络地址信息:所述插件获取所有的网络连接的信息,并向每个网络连接的网络地址和端口号发送消息;其中,所述消息为能够被数据库所响应的消息;所述插件将接收到响应消息的网络地址和端口号作为能够直连所述数据库的网络地址信息,其中,所述响应消息为对所述消息的响应。8.进一步地,所述插件还用于在未接收到任何所述响应消息的情况下,显示提示信息,其中,所述提示信息用于指示需要输入所述数据库的网络地址信息。9.进一步地,所述插件安装在所述数据所在的操作系统,所述插件获取到的通过直连访问所述数据库的请求均是通过转发得到的,其中,预先配置转发功能,所述转发功能用于将发往所述网络地址和端口号的请求均发往所述插件;所述插件用于将来源于所述代理服务的数据操作请求通过本地地址和所述端口号发送给所述数据库。10.根据本技术的另一个方面,还提供了一种防止通过直连访问数据库的方法,其特征在于,包括:所述代理服务获取客户端发往数据库的数据操作请求,并对所述数据操作请求预先配置的处理之后将所述数据操作请求发送给所述数据库,其中,所述客户端为需要对数据库进行数据操作的数据操作方;所述插件获取发往所述数据库的所有数据库操作请求,并判断获取到的数据操作请求是否来源于所述代理服务,如果来源于所述代理服务则将获取到的数据操作请求发送给所述数据库,如果获取到的数据操作请求不是来源于所述代理服务,则将所述数据操作请求发往所述代理服务进行审计。11.进一步地,所述插件判断获取到的数据操作请求是否来源于所述代理服务包括:所述插件获取能够直连所述数据库的网络地址信息,对所述网络地址信息所指示的网络地址和端口号进行监听,获取并拦截所有访问所述网络地址和端口号的数据操作请求,并确定拦截到的数据操作请求不是来源于所述代理服务器。12.进一步地,所述插件通过如下步骤获取能够直连所述数据库的网络地址信息:所述插件获取所有的网络连接的信息,并向每个网络连接的网络地址和端口号发送消息;其中,所述消息为能够被数据库所响应的消息;所述插件将接收到响应消息的网络地址和端口号作为能够直连所述数据库的网络地址信息,其中,所述响应消息为对所述消息的响应。13.进一步地,所述方法还包括:所述插件在未接收到任何所述响应消息的情况下,显示提示信息,其中,所述提示信息用于指示需要输入所述数据库的网络地址信息。14.进一步地,所述插件安装在所述数据所在的操作系统,所述插件获取到的通过直连访问所述数据库的请求均是通过转发得到的,其中,预先配置转发功能,所述转发功能用于将发往所述网络地址和端口号的请求均发往所述插件;所述插件将获取到的数据操作请求发送给所述数据库包括:所述插件将来源于所述代理服务的数据操作请求通过本地地址和所述端口号发送给所述数据库。15.在本技术实施例中,采用了代理服务用于获取客户端发往数据库的数据操作请求,并对所述数据操作请求预先配置的处理之后将所述数据操作请求发送给所述数据库,其中,所述客户端为需要对数据库进行数据操作的数据操作方;插件用于获取发往所述数据库的所有数据库操作请求,并判断获取到的数据操作请求是否来源于所述代理服务,如果来源于所述代理服务则将获取到的数据操作请求发送给所述数据库,如果获取到的数据操作请求不是来源于所述代理服务,则将所述数据操作请求发往所述代理服务。通过本技术解决了相关技术中客户端通过数据库的访问接口直接访问数据库而导致可能会对数据库带来风险的问题,避免了客户端绕过中间代理直接访问数据库,在一定程度上提高了数据库的安全性。附图说明16.构成本技术的一部分的附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1是根据本技术实施例的防止通过直连访问数据库的系统的结构框图;图2是根据本技术实施例的防止通过直连访问数据库的方法的流程图。具体实施方式17.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。18.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。19.在以下实施例中,涉及到数据库代理技术。数据库代理是位于数据库服务端和应用服务端之间的网络代理服务,用于代理应用服务端访问数据库时的所有请求,具有高可用、高性能、可运维、简单易用等特点,同时提供自动读写分离、事务拆分、连接池等高级功能。20.数据库代理可以包括独享代理和共享代理。共享代理也叫多租户代理,独享代理也叫单租户代理,使用独立代理计算资源为当前实例提供代理服务。本实施例中的数据库代理属于共享代理的一种,因为本实施例中的代理需要获取到所有发往数据库的数据操作请求。21.本实施例中涉及到的审计也有两种方式。第一种方式:将所有发往数据库的数据操作请求以及发送该数据操作请求的客户端的信息均进行保存,然后对保存下来的信息进行判断,如果存在风险,则进行提示。在这种方式中并不干预客户端对数据库的操作请求,仅仅起到监视的目的,这样对于客户端访问数据库的效率并不会产生影响。第二种方式:数据库会进行干预,通过预先配置的控制策略进行干预是一种可选的方式,所有的控制策略均是在发现风险数据操作请求之后执行的操作。下面结合一个可选的例子进行说明。22.在该例子中,代理侦听网络上的数据库协议包,通过协议解析,进行身份认证以及访问控制策略判定,如果认为存在风险,代理则依据数据库策略动作对数据库协议包重组后发送给数据库,由数据库进行后续处理并给数据库协议代理返回结果信息,再由代理依据客户端策略动作对数据库协议包重组后返回客户端。这里的协议解析是指识别出数据库操作符和操作串,数据库操作符包括:数据库连接操作符和数据库访问操作符。数据库连接操作符的操作串是一个五元组:(数据库名称,ip地址,tcp端口,用户名,密码)。该操作串被用于身份认证以及访问策略控制。数据库访问操作符的操作串是一个二元组:(sql或其扩展语句,绑定参数向量)。该操作串被用于访问策略控制。该例子中访问控制的功能被代理执行,虽然会在某些情况下降低效率,但是,可以挺高数据库访问的安全性。23.在本实施例中,虽然部署了代理,客户端有可能还是能够访问到数据库提供的网络地址(例如,ip地址和端口)。代理的加入就是希望客户端的所有对数据库的访问都通过代理来进行。为了解决客户端和数据库的直连通道仍然存在所导致的客户端可能绕过代理访问数据库的问题。可以在数据库服务器上安装一个插件或者也可以认为插件是代理服务的一部分,该插件可以拦截所有发往数据库的请求,该插件中设置有一个代理的白名单,当接收到来自白名单的代理访问请求时,该插件将该访问正常发送给数据库。如果接收到通过其他网络地址来访问数据库,则将该访问请求转发给代理。即插件进行判断转发的访问请求是否来自直连数据库(即不通过代理而是直接通过数据库提供的网络地址连接访问数据库)的访问请求,将直连的访问请求转发给代理。代理进行相应的处理之后再进行发送数据库,插件判断是代理转发的,可以通过本地地址(localhost)发送到数据库。24.在本实施例中提供了一种防止通过直连访问数据库的系统,图1是根据本技术实施例的防止通过直连访问数据库的系统的结构框图,如图1所示,该系统包括:代理服务和插件。下面对该系统进行介绍。25.代理服务用于获取客户端发往数据库的数据操作请求,并对数据操作请求进行预先配置的处理之后,将数据操作请求发送给数据库,其中,客户端为需要对数据库进行数据操作的数据操作方。其中,所述预先配置的处理包括以下至少之一:审计、拦截、阻断。在本实施例中,以审计为例进行说明。当然,本实例也不限于代理服务还可以进行其他类型的处理。26.插件,用于获取发往数据库的所有数据库操作请求,并判断获取到的数据操作请求是否来源于代理服务,如果来源于代理服务则将获取到的数据操作请求发送给数据库,如果获取到的数据操作请求不是来源于代理服务,则将数据操作请求发往代理服务进行处理。27.通过上述系统可以由插件来截获未经过代理服务处理的数据操作请求,并转发给代理服务进行处理,从而解决了相关技术中客户端通过数据库的访问接口直接访问数据库而导致可能会对数据库带来风险的问题,避免了客户端绕过中间代理直接访问数据库,在一定程度上提高了数据库的安全性。28.该插件可以作为数据库的插件,或者可以由代理服务来进行部署。在代理服务运行之后,可以运行一个脚本,该脚本用于将插件安装在数据库所在的操作系统上。在插件安装结束之后,代理服务构造一个数据包,该数据包的源ip地址和端口号为预先配置的ip地址和端口号,该预先配置的ip地址和端口号与代理服务所在的占用的ip地址和端口号不同,然后将构造的数据包发送给安装好的插件,如果代理服务接收到插件转发的该代理服务构造的数据包则说明插件安装成功并正确运行。或者也可以由数据库管理员手工安装运行该插件并进行配置。29.一个插件可以对应多个代理服务,在这种情况下,插件中可以预先配置多个代理服务中的每个代理服务的ip地址和端口。如果插件接收到的数据操作请求并不是来源于多个代理服务中的任何一个,则插件从多个代理服务中选择一个代理服务,并将该数据操作请求发送给选择出的代理服务。在该可选的实施方式下,插件中保存的多个代理服务的ip地址和端口可以称作为白名单。作为另一个可选的实施方式,在一个插件对应多个代理服务的情况下,每个代理服务在接收到数据操作请求并进行处理(例如,审计)之后,在该数据操作请求中增加该代理服务的标识信息,该标识信息在该多个代理服务中是唯一的,该代理服务将增加标识信息之后的数据操作请求发送给插件,插件根据该标识信息在预先保存的标识信息中进行匹配,匹配成功则将数据操作请求发送给数据库。这样可以增加对代理服务的控制。30.作为另一个可选的实施方式,插件可以获取每个代理服务对应的进程或线程所占用的计算资源,并选择占用计算资源最少的代理服务,将不是来源于多个代理服务中任何一个的数据操作请求发送给占用计算资源最少的代理服务。该可选实施方式可以在存在多个代理服务的情况,做到代理服务的负载均衡。插件还可以预先配置客户端的级别,例如根据客户端的网络地址信息或者根据客户端的标识信息配置该客户端的信任级别,插件还可以配置每个代理服务用来进行处理(例如,审计)的客户端的级别,数据操作请求发送给与该客户端级别匹配的代理服务来进行审计。例如,1级记录数据操作请求并提示风险,2级对于风险的数据操作请求进行干预。如果一个数据操作请求来源于1级的客户端,则将该数据操作请求发送给1级的代理服务进行审计。31.在上述实施例中,插件均需要区分出数据操作请求是否来源于代理服务,这种区分方式有很多种,在本实施例中提供了两种可选的方式。32.方式一:插件用于获取能够直连数据库的网络地址信息,对网络地址信息所指示的网络地址和端口号进行监听,获取并拦截所有访问网络地址和端口号的数据操作请求,并确定拦截到的数据操作请求不是来源于代理服务器。33.直连数据库的网络地址信息可以由管理员提前配置好,或者,为了进一步实现自动化,还可以通过如下步骤自动获取能够直连数据库的网络地址信息:插件获取所有的网络连接的信息,并向每个网络连接的网络地址和端口号发送消息,其中,该消息为能够被数据库所响应的消息;插件将接收到响应消息的网络地址和端口号作为能够直连数据库的网络地址信息,其中,响应消息为对该消息的响应。34.作为另一种可能,如果插件在未接收到任何响应消息的情况下,还可以显示提示信息,其中,提示信息用于指示需要输入数据库的网络地址信息。35.方式二:插件安装在数据所在的操作系统或者直接安装到数据库中,插件获取到的通过直连访问数据库的请求均是通过转发得到的,其中,预先配置转发功能,转发功能用于将发往网络地址和端口号的请求均发往插件。例如,可以通过配置iptables来进行转发。在该可选方式中,为了避免产生数据包的循环发送,插件用于将来源于代理服务的数据操作请求通过本地地址(localhost或者127.0.0.1)和端口号发送给数据库。36.在该可选方式中,插件在被安装后,运行一个脚本,该脚本用于配置上述的转发功能。37.通过上述两种方式可以使插件获取到通过直连访问数据库的请求。上述两种方式还可以结合一起使用,这样更加可靠。38.作为另一个可选的实施方式,可以预先配置值得信任的客户端的ip地址和端口号,或者是值得信任的客户端的标识信息,插件在判断未经过代理服务发送的数据操作请求之后,判断是否来自于值得信任的客户端,如果是,则直接发送给数据库。可以根据ip地址和端口号来进行判断,也可以根据标识信息来进行判断。或者为了更加安全可以判断ip地址和端口号以及标识信息均与值得信任的客户端匹配后再直接发送给数据库。39.在本实施例中还提供了一种防止通过直连访问数据库的方法,图2是根据本技术实施例的防止通过直连访问数据库的方法的流程图,如图2所示,该方法包括如下步骤:步骤s202,代理服务获取客户端发往数据库的数据操作请求,并对数据操作请求进行处理之后,将数据操作请求发送给数据库,其中,客户端为需要对数据库进行数据操作的数据操作方;步骤s204,插件获取发往数据库的所有数据库操作请求,并判断获取到的数据操作请求是否来源于代理服务,如果来源于代理服务则将获取到的数据操作请求发送给数据库,如果获取到的数据操作请求不是来源于代理服务,则将数据操作请求发往代理服务进行处理。40.通过上述系统可以由插件来截获未经过代理服务处理的数据操作请求,并转发给代理服务进行处理,从而解决了相关技术中客户端通过数据库的访问接口直接访问数据库而导致可能会对数据库带来风险的问题,避免了客户端绕过中间代理直接访问数据库,在一定程度上提高了数据库的安全性。41.作为插件和/或代理服务的可选实施方式,在上文中已经进行了说明,在此不再赘述,例如,插件判断获取到的数据操作请求是否来源于代理服务可以包括:插件获取能够直连数据库的网络地址信息,对网络地址信息所指示的网络地址和端口号进行监听,获取并拦截所有访问网络地址和端口号的数据操作请求,并确定拦截到的数据操作请求不是来源于代理服务器。42.又例如,插件通过如下步骤获取能够直连数据库的网络地址信息:插件获取所有的网络连接的信息,并向每个网络连接的网络地址和端口号发送消息;其中,该消息为能够被数据库所响应的消息;插件将接收到响应消息的网络地址和端口号作为能够直连数据库的网络地址信息,其中,响应消息为对该消息的响应。更优地,插件在未接收到任何响应消息的情况下,显示提示信息,其中,提示信息用于指示需要输入数据库的网络地址信息。43.又例如,插件安装在数据所在的操作系统,插件获取到的通过直连访问数据库的请求均是通过转发得到的,其中,预先配置转发功能,转发功能用于将发往网络地址和端口号的请求均发往插件;插件将获取到的数据操作请求发送给数据库包括:插件将来源于代理服务的数据操作请求通过本地地址和端口号发送给数据库。44.在本实施例中,提供一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行以上实施例中的方法。45.这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。46.上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd‑rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。47.在本实施例中还提供了另外一种装置,该装置可以称为防止通过直连访问数据库的装置,该装置包括至少一个第一模块和至少一个第二模块,其中,所述至少一个第一模型用于执行上述代理服务所执行的步骤,所述至少一个第二模块用于执行上述插件所述执行的步骤。48.以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1