首页> 中国专利> 一种基于进程的数据库审计处理方法和装置

一种基于进程的数据库审计处理方法和装置

摘要

本申请公开了一种基于进程的数据库审计处理方法和装置,该方法包括:接收待审计的数据包;获取所述数据包所属的会话的会话标识;根据所述会话标识查找与所述会话标识对应的内存池,其中,所述内存池中保存有所述会话的会话信息;从多个进程中选择预定进程,并将所述会话标识对应的内存池和所述数据包提供给所述预定进程,其中,所述多个进程中的每一个进程均用于进行数据库审计,所述每个进程用于对多个会话进行审计并维护多个内存池。通过本申请解决了现有技术中数据库审计系统使用一个进程对一个数据库会话进行审计所导致的审计系统最大并发数受到限制的问题,从而提高了审计系统所支持的最大并发数,在一定程度上提高了审计效率。

著录项

  • 公开/公告号CN114880662A

    专利类型发明专利

  • 公开/公告日2022-08-09

    原文格式PDF

  • 申请/专利权人 北京安华金和科技有限公司;

    申请/专利号CN202210811623.1

  • 发明设计人 刘晓韬;李彦君;

    申请日2022-07-12

  • 分类号G06F21/55(2013.01);G06F9/50(2006.01);

  • 代理机构北京盛询知识产权代理有限公司 11901;

  • 代理人郭成文

  • 地址 100089 北京市海淀区中关村南大街甲18号院1-4号楼12层D座12A01

  • 入库时间 2023-06-19 16:20:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-23

    授权

    发明专利权授予

  • 2022-08-26

    实质审查的生效 IPC(主分类):G06F21/55 专利申请号:2022108116231 申请日:20220712

    实质审查的生效

  • 2022-08-09

    公开

    发明专利申请公布

说明书

技术领域

本申请涉及到数据库审计领域,具体而言,涉及一种基于进程的数据库审计处理方法和装置。

背景技术

数据库审计以安全事件为中心,以全面审计和精确审计为基础,实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行实时告警。它通过对用户访问数据库行为的记录、分析和汇报,来帮助用户事后生成合规报告、事故追根溯源,同时通过大数据搜索技术提供高效查询审计报告,定位事件原因,以便日后查询、分析、过滤,实现加强内外部数据库网络行为的监控与审计,提高数据资产安全。

数据库审计一般通过审计系统来进行。数据库审计系统用于对数据库进行审计,因此,数据库审计系统的运行方式与数据库客户端访问数据库的方式密切相关。一般情况下,数据库的访问行为是多会话访问,这是因为每个数据库客户端在访问数据库的时候均会创建一个连接,创建的该连接视为一个会话,而数据库需要同时响应多个会话的请求。对于数据库来说,数据库客户端与数据库的会话的上下文存在重要的作用。

考虑到在数据库审计过程中会话上下文的重要性,因此会话信息的维护就变得十分重要。在现有技术中,会使用一个进程来维护一个会话信息,使用一个进程对应处理一个数据库会话的所有流量,以此来保证会话信息的完整性和可持续性。

由于操作系统存在进程数上限的限制,且在多进程并发的场景下,处理性能会下降。因此,会造成数据库审计系统可处理的最大并发连接数存在限制,且在大并发的场景下,处理性能下降。

发明内容

本申请实施例提供了一种基于进程的数据库审计处理方法和装置,以至少解决现有技术中数据库审计系统使用一个进程对一个数据库会话进行审计所导致的审计系统最大并发数受到限制的问题。

根据本申请的一个方面,提供了一种基于进程的数据库审计处理方法,包括:接收待审计的数据包,其中,所述数据包是通过数据库客户端向数据库发送的数据包,所述数据包用于对所述数据库进行操作;获取所述数据包所属的会话的会话标识;根据所述会话标识查找与所述会话标识对应的内存池,其中,所述内存池中保存有所述会话的会话信息;从多个进程中选择预定进程,并将所述会话标识对应的内存池和所述数据包提供给所述预定进程,其中,所述预定进程从所述内存池中获取会话信息以及根据所述会话信息对所述数据包进行审计,所述多个进程中的每一个进程均用于进行数据库审计,所述每个进程用于对多个会话进行审计并维护多个内存池,其中,每个会话均唯一对应一个保存该会话的会话信息的内存池。

进一步地,在根据所述会话标识未查找与所述会话标识对应的内存池的情况下,从所述多个进程中选择预定进程包括:在根据所述会话标识未查找与所述会话标识对应的内存池的情况下,确定所述数据包所属的会话为新会话;从所述多个进程中选择负荷压力最小的进程作为所述预定进程,并从所述预定进程对应的尚未使用的内存池中为所述会话分配一个内存池;将所述预定进程作为对所述会话的数据包进行审计的进程,并保存所述会话的标识与分配的内存池的对应关系。

进一步地,从所述多个进程选择预定进程包括:获取查找到的所述会话标识对应的内存池;获取维护所述会话标识对应的内存池的进程,并将维护所述会话标识对应的内存池的进程作为所述预定进程。

进一步地,在从所述多个进程中选择所述预定进程之后,所述方法还包括:获取所述预定进程的负荷压力;在所述负荷压力大于阈值的情况下,从所述多个进程中选择出负荷压力最小的进程;将所述预定进程中未审计的数据包以及与未审计的数据包所属会话对应的内存池发送给选择出的负荷压力最小的进程,由选择出的负荷压力最小的进程对未处理的数据包进行审计。

进一步地,获取所述数据包所属的会话的会话标识包括:获取所述数据包来源的数据库客户端的网络地址和端口号;将网络地址和端口号进行哈希运算得到哈希值;将所述哈希值作为所述数据包所属会话的会话标识。

根据本申请的另一个方面,还提供了一种基于进程的数据库审计处理装置,包括:接收模块,用于接收待审计的数据包,其中,所述数据包是通过数据库客户端向数据库发送的数据包,所述数据包用于对所述数据库进行操作;获取模块,用于获取所述数据包所属的会话的会话标识;查找模块,用于根据所述会话标识查找与所述会话标识对应的内存池,其中,所述内存池中保存有所述会话的会话信息;处理模块,用于从多个进程中选择预定进程,并将所述会话标识对应的内存池和所述数据包提供给所述预定进程,其中,所述预定进程从所述内存池中获取会话信息以及根据所述会话信息对所述数据包进行审计,所述多个进程中的每一个进程均用于进行数据库审计,所述每个进程用于对多个会话进行审计并维护多个内存池,其中,每个会话均唯一对应一个保存该会话的会话信息的内存池。

进一步地,所述处理模块用于:在根据所述会话标识未查找与所述会话标识对应的内存池的情况下,确定所述数据包所属的会话为新会话;从所述多个进程中选择负荷压力最小的进程作为所述预定进程,并从所述预定进程对应的尚未使用的内存池中为所述会话分配一个内存池;将所述预定进程作为对所述会话的数据包进行审计的进程,并保存所述会话的标识与分配的内存池的对应关系。

进一步地,所述处理模块用于:获取查找到的所述会话标识对应的内存池;获取维护所述会话标识对应的内存池的进程,并将维护所述会话标识对应的内存池的进程作为所述预定进程。

进一步地,所述处理模块还用于:获取所述预定进程的负荷压力;在所述负荷压力大于阈值的情况下,从所述多个进程中选择出负荷压力最小的进程;将所述预定进程中未审计的数据包以及与未审计的数据包所属会话对应的内存池发送给选择出的负荷压力最小的进程,由选择出的负荷压力最小的进程对未处理的数据包进行审计。

进一步地,所述获取模块用于:获取所述数据包来源的数据库客户端的网络地址和端口号;将网络地址和端口号进行哈希运算得到哈希值;将所述哈希值作为所述数据包所属会话的会话标识。

在本申请实施例中,采用了接收待审计的数据包,其中,所述数据包是通过数据库客户端向数据库发送的数据包,所述数据包用于对所述数据库进行操作;获取所述数据包所属的会话的会话标识;根据所述会话标识查找与所述会话标识对应的内存池,其中,所述内存池中保存有所述会话的会话信息;从多个进程中选择预定进程,并将所述会话标识对应的内存池和所述数据包提供给所述预定进程,其中,所述预定进程从所述内存池中获取会话信息以及根据所述会话信息对所述数据包进行审计,所述多个进程中的每一个进程均用于进行数据库审计,所述每个进程用于对多个会话进行审计并维护多个内存池,其中,每个会话均唯一对应一个保存该会话的会话信息的内存池。通过本申请解决了现有技术中数据库审计系统使用一个进程对一个数据库会话进行审计所导致的审计系统最大并发数受到限制的问题,从而提高了审计系统所支持的最大并发数,在一定程度上提高了审计效率。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的基于进程的数据库审计处理方法的流程图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

在以下实施例中,涉及到数据库以及对数据库进行审计的审计系统,审计系统对数据库的访问行为进行审计时,是以数据库会话为基础进行审计的。这是因为数据库的访问行为,是多会话访问,每个客户端创建连接访问数据库视为一个会话。鉴于审计系统以数据库会话为基础进行审计,考虑到数据库同时会响应多个会话的请求,因此审计系统也会同时对多个会话进行审计。在基于数据库会话进行审计的时候,数据库会话的会话上下文存在重要作用。在数据库会话中,所有SQL语句访问涉及的对象均会受会话信息影响,同一个SQL语句在不同用户的会话访问下执行,实际访问的数据库表可能不一样。例如,数据库存在prepare语句的概念,即一个SQL请求只发送一次,数据库会对prepare访问的SQL语句生成一个唯一标识,称为句柄,后续客户端执行该语句,只需要发送句柄标识而不需要发送完整语句。因此,prepare语句的正确执行依赖于上下文中保存的句柄标识。

因此,在数据库审计系统中,会话信息的维护非常重要,如果会话信息丢失则会导致审计系统解析到的数据混乱,进一步造成数据库审计系统生成错误的审计记录或者丢失审计记录。

考虑到上述问题,在本实施例中提供了一种基于进程的数据库审计处理方法,图1是根据本申请实施例的基于进程的数据库审计处理方法的流程图,如图1所示,下面对图1中涉及到的步骤进行说明。

步骤S102,接收待审计的数据包,其中,所述数据包是通过数据库客户端向数据库发送的数据包,所述数据包用于对所述数据库进行操作;

步骤S104,获取所述数据包所属的会话的会话标识;

获取会话标识的方式有很多种,例如,获取所述数据包来源的数据库客户端的网络地址和端口号;将网络地址和端口号进行哈希运算得到哈希值;将所述哈希值作为所述数据包所属会话的会话标识。

步骤S106,根据所述会话标识查找与所述会话标识对应的内存池,其中,所述内存池中保存有所述会话的会话信息;

步骤S108,从多个进程中选择预定进程,并将所述会话标识对应的内存池和所述数据包提供给所述预定进程,其中,所述预定进程从所述内存池中获取会话信息以及根据所述会话信息对所述数据包进行审计,所述多个进程中的每一个进程均用于进行数据库审计,所述每个进程用于对多个会话进行审计并维护多个内存池,其中,每个会话均唯一对应一个保存该会话的会话信息的内存池。

在该步骤中,作为一个可以增加的实施方式,还可以获取当前时间之前T天内的每天完成审计的数据量,其中,根据如下公式计算当天的数据量:当天的数据量=权值1*前1天的数据量+权值2*前2天的数据量+...+权值T*前T天的数据量;其中,权值1+权值2+...+权值T=1,权值1>权值2>...权值T;T大于等于2;根据当天的数据量确定需要预先配置的进程的数量;根据所述进程的数量预先开启所述多个进程。

在另一个可选的实施方式中,还可以将多个进程进行分组,其中,每个组中包括至少一个进程,每个分组内的进程共享一个组内内存空间,该组内内存空间被该组内的所有的进程所共享,将每个组的组内内存空间分为多个内存池。在组内预定进程进行数据包进行审计时,如果该预定进程的负荷压力比较大的情况下,将该预定进程未处理的数据包分配给该组内的其他进程进行处理。

作为另一个可以增加的实施方式,获取数据包来源的数据库客户端的IP地址和端口号,根据所述IP地址和端口号获取所述IP地址和端口号历史上已经完成审计的数据量,在未对所述数据包所属的会话分配内存池的情况下,根据该IP地址和端口号已经完成审计的数据量确定需要内存的大小,根据所需要的内存的大小确定为所述数据包所属会话分配内存池。

在上述步骤中,每个进程维护多个内存池,每个内存池中均唯一保存一个会话的会话信息,这样同一个进程就可以获取不同会话的会话信息,因此,可以做到使用一个进程同时对多个会话进行审计。通过上述步骤解决了现有技术中数据库审计系统使用一个进程对一个数据库会话进行审计所导致的审计系统最大并发数受到限制的问题,从而提高了审计系统所支持的最大并发数,在一定程度上提高了审计效率。

可选的,在选择预定进程的时候可以考虑负载均衡。

例如,在根据所述会话标识未查找与所述会话标识对应的内存池的情况下,从所述多个进程中选择预定进程包括:在根据所述会话标识未查找与所述会话标识对应的内存池的情况下,确定所述数据包所属的会话为新会话;从所述多个进程中选择负荷压力最小的进程作为所述预定进程,并从所述预定进程对应的尚未使用的内存池中为所述会话分配一个内存池;将所述预定进程作为对所述会话的数据包进行审计的进程,并保存所述会话的标识与分配的内存池的对应关系。

对于同一会话的数据包可以分配给同一进程进行处理,例如,从所述多个进程选择预定进程包括:获取查找到的所述会话标识对应的内存池;获取维护所述会话标识对应的内存池的进程,并将维护所述会话标识对应的内存池的进程作为所述预定进程。

在同一进程处理同一会话的数据包的情况下,如果该进程负荷压力比较大,则也可以进行负载均和。此时,在从所述多个进程中选择所述预定进程之后,所述方法还包括:获取所述预定进程的负荷压力;在所述负荷压力大于阈值的情况下,从所述多个进程中选择出负荷压力最小的进程;将所述预定进程中未审计的数据包以及与未审计的数据包所属会话对应的内存池发送给选择出的负荷压力最小的进程,由选择出的负荷压力最小的进程对未处理的数据包进行审计。

作为一个可以增加的实施方式,所有进程维护的内存池均来自于共享内存存储空间,该共享内存存储空间中存储的会话信息被所有的进程共享,每个进程在接收数据包进行审计之后,将该数据包对应的会话信息在共享内存存储空间中对应的内存池中进行实时更新;或者,每个进程维护的多个内存池进在该进程内共享,另外开辟一个共享内存存储空间,该共享内存存储空间被所有进程共享;在一个会话中的数据包从一个进程转移到另一个进程进行审计的情况下,原来审计该会话的数据包的进程将该会话的会话信息从对应的内存池中复制到共享内存存储空间中,复制到共享内存存储空间中的会话信息能够被所述另一个进程使用。

下面结合一个可选实施例进行说明。在本可选实施例中,在保持会话上下文信息不丢失且连续的场景下,预先创建有限的N个进程,让N个进程管理N*M个会话,对于N*M个会话开辟共享内存(开辟共享内存的方式可以根据操作系统的不同来选择不同的开辟方式,例如,在Linux系统中可以利用该操作系统提供的共享内存机制来开辟共享内存),然后利用共享内存进行会话信息共享。

数据库审计系统启动后,预先创建N个进程,并分配N*M个会话槽位,每个会话槽位都会在共享内存中分配一块连续的空间,作为该会话对应的内存池(或称为内存空间,该内初池被称为会话槽位或者槽位),每个会话对应的内存池中均用于缓存该会话所有后续包解析的可能用到的会话信息。

当数据库审计系统收到一个新的会话的数据包时,系统给该会话分配一个内存池(为了表述方便将分配内初池称为分配会话槽位),并记录该会话与会话槽位的对应关系。后续再接收到来自该会话的数据包时,可以根据该会话与会话槽位的对应关系找到用于处理该会话的进程,并找到用于缓存会话信息的内存池。

考虑到每个不同的数据库客户端在访问数据库时均会新建一个会话,因此,可以考虑使用数据库客户端的IP地址和端口号来区分不同的会话。例如,在接收到一个数据包时,获取该数据包来源的数据库客户端的IP地址和端口号,将IP地址和端口号做哈希运算,得到哈希值(该哈希值可以作为该会话的标识),在预先记录的哈希值与槽位的对应关系中查找是否具有与该哈希值对应的槽位,如果有,则说明是老会话的数据包,则将该数据包发送给槽位所在的进程处理,并且该进程从该槽位对应的内存空间中找到会话信息。如果在对应关系中没有查找到与该哈希值对应的操作,则说明这是一个来自新会话的数据包,则分配一个操作,并将该分配的槽位和哈希值对应的关系进行保存。在一个可选实施方式中,可以采用一张哈希(hash)表来保存上述对应关系,在该hash表中,以客户端IP地址和端口号的哈希值为key,以对应的槽位为Value。如果为老会话的数据包,则通过该包的客户端IP+客户端Port计算得到的哈希值作为key,在hash表中找到该槽位。

在一个可选实施方式中,在根据数据包对应的哈希值找到对应的槽位之后,可以判断该槽位所在的进程的处理压力。当然也可以不考虑该进程的处理压力,而就将该数据包交由该进程进行审计。但是,为了做到负载均衡,由于会话信息是在共享内存中进行共享的,因此,能够访问该共享内存的所有进程均可以得到该共享内存的会话信息,在这种情况下,同一个会话的数据包也可以分配给不同的进程进行处理,这样有利于缓解不同进程之间压力不均衡的问题。

在接收到一个数据包之后,查找当前N个进程的压力,选择空闲时间最长的,或者待处理包最少的进程,将该数据包和分配到的会话槽位,通知给该进程。该进程收到数据包后,可以根据该数据包分配的会话槽位,定位到位于共享内存的该会话的会话信息,利用缓存的会话继续进行该数据包的解析,并根据解析结果更新共享内存中的缓存的会话信息中。

在上述可选实施方式中,每个数据包都会根据当前的压力分配给不同的进程。在另一个可选的实施方式中,可以将一个会话的所有数据包暂时先固定分配给一个进程,定期检查各个进程的压力,当发现某个进程的压力过大且存在其他空闲进程时,再则将该进程的待处理包切换分配到其他空闲进程处理。

对于进程共享的内存空间中的会话信息也可以有两种处理方式:第一种处理方式,所有进程共享该内存存储空间,并且所有进程均在新会话创建时就将该会话信息保存至该内存存储空间中。因此,该内存存储空间中保存有所有的会话信息,内存存储空间中的会话信息随着数据包的处理需要实时进行更新,共享存储空间的情况下,每个数据包都可以根据进程繁忙度来进行分配进行。第二种处理方式,在新会话创建时,为该新会话分配进程,在后续数据包处理中,尽量将该会话的数据包均发送给同一个进程处理,如果该进程压力较大,则将该会话的数据包切换至另一个进程,在将会话从一个进程切换到另一个进程时,才需要将该会话的会话信息上传到共享的内存空间中,这种处理方式可以降低上传的代价。

在本实施例中,提供一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行以上实施例中的方法。

上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。

这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。

该本实施例中就提供了这样的一种装置或系统。该装置被称为基于进程的数据库审计处理装置,包括:接收模块,用于接收待审计的数据包,其中,所述数据包是通过数据库客户端向数据库发送的数据包,所述数据包用于对所述数据库进行操作;获取模块,用于获取所述数据包所属的会话的会话标识;查找模块,用于根据所述会话标识查找与所述会话标识对应的内存池,其中,所述内存池中保存有所述会话的会话信息;处理模块,用于从多个进程中选择预定进程,并将所述会话标识对应的内存池和所述数据包提供给所述预定进程,其中,所述预定进程从所述内存池中获取会话信息以及根据所述会话信息对所述数据包进行审计,所述多个进程中的每一个进程均用于进行数据库审计,所述每个进程用于对多个会话进行审计并维护多个内存池,其中,每个会话均唯一对应一个保存该会话的会话信息的内存池。

该系统或者装置用于实现上述的实施例中的方法的功能,该系统或者装置中的每个模块与方法中的每个步骤相对应,已经在方法中进行过说明的,在此不再赘述。

例如,所述处理模块用于:在根据所述会话标识未查找与所述会话标识对应的内存池的情况下,确定所述数据包所属的会话为新会话;从所述多个进程中选择负荷压力最小的进程作为所述预定进程,并从所述预定进程对应的尚未使用的内存池中为所述会话分配一个内存池;将所述预定进程作为对所述会话的数据包进行审计的进程,并保存所述会话的标识与分配的内存池的对应关系。

又例如,所述处理模块用于:获取查找到的所述会话标识对应的内存池;获取维护所述会话标识对应的内存池的进程,并将维护所述会话标识对应的内存池的进程作为所述预定进程。

又例如,所述处理模块还用于:获取所述预定进程的负荷压力;在所述负荷压力大于阈值的情况下,从所述多个进程中选择出负荷压力最小的进程;将所述预定进程中未审计的数据包以及与未审计的数据包所属会话对应的内存池发送给选择出的负荷压力最小的进程,由选择出的负荷压力最小的进程对未处理的数据包进行审计。

又例如,所述获取模块用于:获取所述数据包来源的数据库客户端的网络地址和端口号;将网络地址和端口号进行哈希运算得到哈希值;将所述哈希值作为所述数据包所属会话的会话标识。

通过上述实施例解决了现有技术中数据库审计系统使用一个进程对一个数据库会话进行审计所导致的审计系统最大并发数受到限制的问题,从而提高了审计系统所支持的最大并发数,在一定程度上提高了审计效率。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号