一种表字段级加密及安全访问控制方法及系统与流程

文档序号:29967706发布日期:2022-05-11 10:42阅读:124来源:国知局
1.本发明涉及数据加密
技术领域
:,特别是涉及一种表字段级加密及安全访问控制方法及系统。
背景技术
::2.本部分的陈述仅仅是提供了与本发明相关的
背景技术
:信息,不必然构成在先技术。3.关系型数据库(sqlserver)支持表字段级的加密操作(alwaysencrypted),可以保护数据免受流氓管理员、备份窃贼和中间人攻击。支持的加密方法包括确定性加密(deterministic)以及非确定性加密(randomized)。其中列主密钥(masterkey)以x.509证书的形式提供给客户端,用以解密列加密密钥(encryptionkey),进而加密查询参数以及解密查询结果。4.由于需要将列主密钥提供给客户端,从而造成列主密钥广为传播,存在泄露风险。虽然sqlserver支持azure云密钥仓库服务,可以集中存储列主密钥,但是并不是所有的系统都支持azure云服务,存在一些医疗、金融等机构基于安全审查等因素,无法使用azure云服务存在列主密钥泄露风险。5.再者,sqlserver不支持完善的多因子身份验证(mfa),使用账户密码认证方式,需要提供给客户端数据库账户密码,从而造成数据库账户密码的传播,存在泄露风险。另外,sqlserver无法灵活的设定访问规则,从而无法有效的抵御高风险sql操作。技术实现要素:6.为了解决上述问题,本发明提出了一种表字段级加密及安全访问控制方法及系统,在第一服务器和第二服务器之间进行消息的转发时,由透明网关统一管理列主密钥,实现对消息的加密和解密,且通过列主密钥的集中存储、轮换、状态更新等,避免列主密钥的传播,解决泄露风险。7.为了实现上述目的,本发明采用如下技术方案:8.第一方面,本发明提供一种表字段级加密及安全访问控制方法,包括:9.通过虚拟登录密码连接第一服务器,并接收第一服务器的访问请求消息;10.解析访问请求消息,得到待加密的查询参数及其值,并根据加密字段确定的加密类型、列加密密钥的密文和列主密钥,根据列主密钥解密列加密密钥的密文,根据加密类型和解密后的列加密密钥对查询参数的值进行加密,将加密后的查询参数封装至访问请求消息中,并转发至第二服务器;11.接收第二服务器的响应消息,解析并解密响应消息,将解密后的响应消息发送至第一服务器。12.作为可选择的实施方式,连接第一服务器后建立与第一服务器的加密信道,以接收访问请求消息,与第一服务器的连接方式包括虚拟登录密码、ip地址验证、登录时间验证、登录机器名验证或登录程序验证。13.作为可选择的实施方式,所述列主密钥被统一管理,包括列主密钥的集中存储、轮换和状态更新,根据对访问请求消息的解析确定列主密钥指纹,以获取对应的列主密钥,并解密列加密密钥的密文。14.作为可选择的实施方式,解析并解密响应消息的过程中,获取列的加密元数据,包括加密字段、加密类型、列加密密钥的密文以及列主密钥指纹,根据列主密钥指纹调取对应的列主密钥,以解密列加密密钥的密文,根据加密类型和解密后的列加密密钥解密响应消息。15.作为可选择的实施方式,将加密后的查询参数封装至访问请求消息中,同时修改查询参数元数据类型,以将加密后的查询参数封装至访问请求消息中的sql语句中,完成消息体的修改;16.将解密后的响应消息的明文封装至响应消息中时,将加密元数据删除,并还原字段类型。17.作为可选择的实施方式,所述控制方法还包括对存储过程的out参数解密,对存储过程的响应消息进行解析得到加密类型,并采用预先缓存的列加密密钥对out参数进行解密。18.作为可选择的实施方式,所述控制方法还包括危险行为拦截,所述危险行为拦截包括ddl语句拦截、dml语句拦截、查询结果行数控制、登录失败次数控制。19.第二方面,本发明提供一种表字段级加密及安全访问控制系统,包括:20.通信模块,被配置为通过虚拟登录密码连接第一服务器,并接收第一服务器的访问请求消息;21.加密模块,被配置为解析访问请求消息,得到待加密的查询参数及其值,并根据加密字段确定的加密类型、列加密密钥的密文和列主密钥,根据列主密钥解密列加密密钥的密文,根据加密类型和解密后的列加密密钥对查询参数的值进行加密,将加密后的查询参数封装至访问请求消息中,并转发至第二服务器;22.解密模块,被配置为接收第二服务器的响应消息,解析并解密响应消息,将解密后的响应消息发送至第一服务器。23.第三方面,本发明提供一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成第一方面所述的方法。24.第四方面,本发明提供一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。25.与现有技术相比,本发明的有益效果为:26.本发明提供一种表字段级加密及安全访问控制方法及系统,在第一服务器和第二服务器进行数据访问时,通过在二者之间构建透明网关,在消息的转发过程中,由透明网关统一管理列主密钥,实现列主密钥的集中存储、轮换、状态更新等,避免列主密钥的传播,解决泄露风险。27.本发明提供一种表字段级加密及安全访问控制方法及系统,通过提供虚拟用户名密码连接网关,不泄露真实的数据库用户名密码,减少真实用户名密码的传播风险;且提出基于多因子的身份验证方法,设定灵活的访问规则,保证身份的可靠性,有效抵御高风险sql操作。28.本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明29.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。30.图1为本发明实施例1提供的表字段级加密及安全访问控制方法示意图;31.图2为本发明实施例1提供的日志审计处理网络拓扑图。具体实施方式32.下面结合附图与实施例对本发明做进一步说明。33.应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属
技术领域
:的普通技术人员通常理解的相同含义。34.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。35.在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。36.实施例137.如图1所示,本实施例提供一种表字段级加密及安全访问控制方法,应用在网关侧,包括:38.通过虚拟登录密码连接第一服务器,并接收第一服务器的访问请求消息;39.解析访问请求消息,得到待加密的查询参数及其值,并根据加密字段确定的加密类型、列加密密钥的密文和列主密钥,根据列主密钥解密列加密密钥的密文,根据加密类型和解密后的列加密密钥对查询参数的值进行加密,将加密后的查询参数封装至访问请求消息中,并转发至第二服务器;40.接收第二服务器的响应消息,解析并解密响应消息,将解密后的响应消息发送至第一服务器。41.在本实施例中,以客户端和sql数据库服务器的数据访问为例,在客户端和sql数据库服务器之间通过构建透明网关,实现应用服务器和数据库服务器之间的数据访问请求及响应。网关可以监听客户端上多个网卡及端口的tcp流量,也可以针对单个网卡进行监听,并将流量转发到不同的sqlserver服务器上。42.作为可选择的一种实施方式,网关可以与sqlserver共用同一台服务器,因此网关默认监听2433端口,管理员可以手动配置监听的网卡以及端口信息。43.在本实施例中,通过虚拟登录密码连接客户端,建立与客户端的加密信道,并接收客户端的访问请求消息;通过提供虚拟登录密码,而不暴露真实的数据库用户名密码,减少真实用户名密码传播的风险。44.作为可选择的一种实施方式,通过虚拟登录密码与真实的数据库用户名密码的映射实现密码的验证。45.作为可选择的一种实施方式,虚拟用户名密码由网关统一管理,并可以随时修改映射关系。46.在本实施例中,除虚拟用户名密码验证外,还采用ip地址验证、登录时间验证、登录机器名验证和登录程序验证的基于多因子的身份验证方法,以建立于客户端的连接;47.具体地:ip地址验证:根据访问请求消息中tcp协议的源ip地址设定访问规则(黑白名单);如针对单独的ip地址、ip地址范围或者cidr块设置规则。48.登录时间验证:根据客户端登录时间设定访问规则,如只允许工作时间访问。49.登录机器名验证:解析tds协议的login7消息,获得登录机器名,并根据预先配置的机器名验证规则,决定是否拒绝访问。50.登录程序验证:解析tds协议的login7消息,获得登录程序名,并根据预先配置的程序名验证规则,决定是否拒绝访问。51.在本实施例中,由于客户端向网关传送明文存在安全风险,因此在客户端与网关之间启用加密信道;利用.netframework的system.net.security.sslstream类型在客户端与网关之间建立tls加密信道。52.作为可选择的一种实施方式,如果优先考虑性能因素,可以启动非安全连接选项,客户端与网关之间将不再使用tls信道传递消息;但是,需要注意地是,即使启动了非安全连接选项,考虑到安全问题,客户端登录过程的tdslogin7消息也将使用tls信道传递用户名密码等。53.在本实施例中,接收客户端的访问请求消息后,针对其上层的tds协议进行解析,根据预配置的访问策略和加密查询参数,将处理过的tds消息转发至指定的sqlserver服务器;54.查询参数的加密过程包括:由于能够执行sql语句的tds消息包括rpc消息和sqlbatch消息,因此网关程序需要能够解析rpc消息和sqlbatch消息,确定两种消息的报文格式;其中,rpc消息可以执行sql语句,也可以执行存储过程;sqlbatch只能执行不带查询参数的sql语句。55.利用microsoft.sqlserver.transactsql.scriptdom库,解析sql语句的语法树,从而获得查询参数的字段名以及值,然后利用sqlserver的sp_describe_parameter_encryption系统存储过程,确定查询参数地字段是否属于加密字段,以及加密字段的加密类型(deterministic、randomized)、列加密密钥的密文和列主密钥的指纹信息等元数据信息。56.若查询参数属于加密字段,则需要对其值进行加密处理;具体为根据列主密钥的指纹,从本地的mysql数据库或证明书仓库中取得列主密钥,根据列主密钥解密列加密密钥的密文,再根据加密字段的加密类型(deterministic、randomized),选择是随机向量或确定向量,最后采用aes(256位)加密算法以及解密后的列加密密钥加密查询参数的值。57.将加密后的查询参数的密文封装至访问请求消息中,将修改后的tds消息,序列化到system.io.memorystream流中,完成tds消息体的修改。58.需要注意的是,不能直接将查询参数值的密文写到sql语句中,还需要修改查询参数元数据信息,例如,将参数类型从原来的varchar,number等,修改为varbinary类型,并且查询参数值需要修改为plp编码格式(只需要一个plpchunk即可)。59.在本实施例中,由于sql数据库中存储的是密文,因此加密字段的常量查询(例如:fielda=123andfiledb=”value”)是不能够正确执行的,需要将常量查询转换为带加密元数据的参数查询;并且如果是sqlbatch消息,也需要将消息类型转换为rpc消息。60.具体地,解析sql文,获取查询字段,表,模式等信息后,向sqlserver发行查询字段元数据的sql文,获得字段的type,maxlength,precision,scale,encryptiontype等元数据,构造查询参数,从而利用上述步骤加密查询参数。61.在本实施例中,将加密后的查询参数封装至访问请求消息中,并转发至sql数据库服务器,以使sql数据库服务器对访问请求消息进行响应,且接收sql数据库服务器的响应消息,根据预配置策略和解密查询结果,将响应消息传回给客户端。62.查询结果的解密过程包括:解析tds响应消息的tabularresult消息,得到列的加密元数据,包括字段是否是加密字段、字段的加密类型(deterministic、randomized)、列加密密钥的密文以及列主密钥的指纹信息等;63.根据列主密钥的指纹信息,从本地的mysql数据库或证明书仓库中取得列主密钥,根据列主密钥解密列加密密钥的密文,再根据加密字段的加密类型(deterministic、randomized),选择是随机向量或确定向量,最后采用aes(256位)加密算法和解密得到的列加密密钥解密查询结果,得到sql语句的执行结果。64.得到查询结果的明文后,将明文写到tds消息体中,将修改后的tds消息,序列化到system.io.memorystream流中,完成tds消息体的修改。65.由于已经解密了查询结果,删除tabularresult消息的colmetadata中相应的加密元数据,并且查询结果类型由varbinary类型,还原为字段的实际类型(如varchar,number等)。66.由于在tds协议中,存储过程的返回消息returnvalue中虽然包含了out参数的加密类型(deterministic、randomized),但是没有包含列加密密钥的密文以及列主密钥的指纹信息,所以,如果使用ado.net客户端直接访问sqlserver的话,无法解密存储过程的out参数。67.那么,在本实施例中,通过透明网关实现存储过程out参数解密的过程为,调用存储过程之前,预先缓存sp_describe_parameter_encryption的查询结果,当获得响应结果returnvalue消息时,直接使用之前缓存的列加密密钥,从而实现了out参数的解密处理。68.在本实施例中,通过透明网关实现对列主密钥的统一管理,具体包括:列主密钥集中存储、列主密钥轮换和列主密钥状态更新;69.其中,列主密钥集中存储;列主密钥集中存储到透明网关侧,支持mysql关系型数据库存储,同时如果网关程序运行在windowsserver服务器上的话,还支持windows的证明书仓库(certificatestore)存储。70.数据库安全管理员需要将列主密钥从sqlserver以tripledes-sha1加密格式导出,然后导入到透明网关中。71.网关程序解析tds协议获得列加密元数据后,根据取得的元数据的证书指纹(thumprint)定位到证书的具体位置。72.列主密钥轮换;在列主密钥的失效日期前一段时间,由每日执行一次的批处理程序进行列主密钥的轮换任务。73.主密钥轮换使用powershell的sqlserver模块,new-sqlcolumnmasterkey,invoke-sqlcolumnmasterkeyrotation,complete-sqlcolumnmasterkeyrotation,remove-sqlcolumnmasterkey等命令可以完成列主密钥的轮换任务。74.如果密钥轮换失败,下次批处理程序启动时会再次尝试轮换,如果在失效日期前依然无法完成轮换,会记录系统日志,提醒管理员手动轮换列主密钥。75.旧列主密钥状态更新;列主密钥失效日期到期后,由每日执行一次的批处理程序更新证书状态为无效;且无效后的列主密钥将无法使用。76.在本实施例中,该方法还包括危险行为拦截,包括:ddl语句拦截、dml语句拦截、查询结果行数控制、用户登录失败次数控制等;77.其中,ddl语句拦截;利用微软的microsoft.sqlserver.transactsql.scriptdom库,解析sql文,获取sql文的语句类型(ddl语句)、ddl操作对象database、table、view、trigger、schema等,ddl操作类型alter、create、drop等,根据登录用户的预先设定规则,决定是否拒绝访问以及报警。78.dml语句拦截;利用微软的microsoft.sqlserver.transactsql.scriptdom库,解析sql文,获取sql文的语句类型(dml语句)、操作对象表名、操作类型crud,根据登录用户的预先设定规则,决定是否拒绝访问以及报警。79.查询结果行数控制;解析tds的tabularresult消息,获得donetoken中查询结果的数量,根据预先设定规则,决定是否截取查询结果的数量及报警。80.用户登录失败次数控制;设置用户最大登录失败次数,如果登陆失败次数超过设定的阈值,将在一定期间内禁止该客户端再次连接。81.其他拦截规则;如拦截没有查询条件的update语句和delete语句等。82.在本实施例中,记录所有访问透明网关的行为,并在图形化的界面查看访问记录(如sql文、绑定参数、查询结果等);如图2所示的日志审计处理网络拓扑图,为了不影响网关的性能,将tds消息发送到kafka集群中,由批处理程序记录sql文、还原绑定参数等,便于查看。日志审计的内容包括:执行时间、全局会话id、客户端ip地址、服务名、客户端机器名、调用存储过程名、id、事务、sql执行结果、sql返回记录数、sql特征hash、sql执行时间、sql语句类型、sql语句(包含绑定参数)、数据流量大小等。83.实施例284.本实施例提供一种表字段级加密及安全访问控制系统,包括:85.通信模块,被配置为通过虚拟登录密码连接第一服务器,并接收第一服务器的访问请求消息;86.加密模块,被配置为解析访问请求消息,得到待加密的查询参数及其值,并根据加密字段确定的加密类型、列加密密钥的密文和列主密钥,根据列主密钥解密列加密密钥的密文,根据加密类型和解密后的列加密密钥对查询参数的值进行加密,将加密后的查询参数封装至访问请求消息中,并转发至第二服务器;87.解密模块,被配置为接收第二服务器的响应消息,解析并解密响应消息,将解密后的响应消息发送至第一服务器。88.此处需要说明的是,上述模块对应于实施例1中所述的步骤,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。89.在更多实施例中,还提供:90.一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成实施例1中所述的方法。为了简洁,在此不再赘述。91.应理解,本实施例中,处理器可以是中央处理单元cpu,处理器还可以是其他通用处理器、数字信号处理器dsp、专用集成电路asic,现成可编程门阵列fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。92.存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。93.一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例1中所述的方法。94.实施例1中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。95.本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。96.上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1