CN115712621A - 向数据库写入数据的方法以及从数据库读取数据的方法 - Google Patents
向数据库写入数据的方法以及从数据库读取数据的方法 Download PDFInfo
- Publication number
- CN115712621A CN115712621A CN202211425932.1A CN202211425932A CN115712621A CN 115712621 A CN115712621 A CN 115712621A CN 202211425932 A CN202211425932 A CN 202211425932A CN 115712621 A CN115712621 A CN 115712621A
- Authority
- CN
- China
- Prior art keywords
- request
- field
- data
- encrypted
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本申请涉及计算机以及数字医疗技术领域,具体涉及一种向数据库写入数据的方法以及从数据库读取数据的方法,其写入方法包括:调用内置于应用服务的***,拦截数据写入请求,其中,数据写入请求包含待写入明文数据;解析数据写入请求,确定待写入明文数据中的待加密字段;确定数据写入请求的请求类型,以及待加密字段的语句类型;根据请求类型和语句类型,对数据写入请求中的待加密字段进行加密处理;将加密处理后的数据写入请求发送至所述数据库,以将加密处理后的待写入明文数据写入数据库。本申请通过插件化的方式,避免了批量化的接入改造方式;且不需要了解原有的业务及场景,降低了介入时熟悉代码的成本。
Description
技术领域
本申请涉及计算机以及数字医疗技术领域,具体涉及一种向数据库写入数据的方法以及从数据库读取数据的方法。
背景技术
数据库用来存储大量的信息,如数字医疗领域采用数据库存储大量的患者用户的信息,其中包含了很多敏感信息,如姓名、身份证号等等,如果这些信息采用明文的形式保存,非常容易泄露。
传统的对数据库的数据加解密方法,是通过逐个修改或增加每个字段的处理逻辑实现的,因此,需要开发人员了解所有数据的历史业务逻辑,并逐个修改,这增加了做数据库加解密产生的风险。
虽然现有技术虽然也有一些加解密工具,但是这些工具普遍涉及大量的二次开发,且需要将数据库相关的全部代码修改为一种统一实现,存在很大的潜在风险,且对于不支持的部分语法需要对业务进行调整,非常的不方便且对存量的历史业务不友好。
发明内容
针对上述情况,本申请实施例提供了一种向数据库写入数据的方法以及从数据库读取数据的方法,通过在应用服务层设置***,对数据写入请求进行拦截,后续根据数据写入请求的不同类型将明文请求转化为密文请求,从而将待写入数据中需要加密的字段以密文的形式写入数据库中,本申请通过插件化方式对现有技术进行改造,降低了开发成本;且只需要配置涉及到的加解密表和字段,并不需要了解原有的业务及场景,极大的降低了介入时熟悉代码的成本,且实现过程不修改任何原有的代码逻辑,且测试并不需要回归原有业务逻辑,只需要回归部分通用逻辑,保证整体的可行性即可,从而降低了开发的人工和时间成本,克服了或者至少部分克服了现有技术的不足。
第一方面,本申请实施例提供了一种向数据库写入数据的方法,所述方法由应用服务执行,所述应用服务通信连接数据库,所述方法包括:
调用内置于所述应用服务的***,拦截数据写入请求,其中,所述数据写入请求包含待写入明文数据;
解析所述数据写入请求,确定所述待写入明文数据中的待加密字段;
确定所述数据写入请求的请求类型,以及所述待加密字段的语句类型;
根据所述请求类型和所述语句类型对所述数据写入请求中的待加密字段进行加密处理;
将加密处理后的数据写入请求发送至所述数据库,以将加密处理后的待写入明文数据写入所述数据库。
第二方面,本申请实施例还提供了一种从数据库读取数据的方法,所述方法由应用服务执行,所述应用服务通信连接数据库,所述数据库存储有采用上述的向数据库写入数据的方法写入的数据;
所述方法包括:
接收数据查询明文请求,其中,所述数据查询明文请求中包含待查询字段名;
若确定所述数据查询明文请求的请求类型为select,且所述待查询字段名的语句类型为where、group by、和join on中的任意一种,则根据预设的加密方法,对所述待查询字段名进行加密处理,并采用加密处理后的待查询字段名替换所述数据查询明文请求中的待查询字段名,以形成数据查询密文请求;
将所述数据查询密文请求发送至所述数据库,并接收所述数据库返回的所述数据查询密文请求指示的反馈数据,所述指示的数据至少包括所述待查询字段名对应的密文数据。
第三方面,本申请实施例还提供了一种数据读写装置,该数据读写装置可实现前述的向数据库写入数据的方法或从数据库读取数据的方法。
第四方面,本申请实施例还提供了一种电子设备,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行上述的向数据库写入数据的方法或从数据库读取数据的方法。
第五方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行上述的向数据库写入数据的方法或从数据库读取数据的方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
本申请提供了一种向数据库写入数据的方法,该方法在应用服务中部署***,在接到数据写入请求后,调用内置于所述应用服务的***,对数据写入请求进行拦截,然后对数据写入请求进行解析,判断其中包含的待写入明文数据是否包含需要加密的字段,若包含,则根据数据写入请求的请求类型以及待加密字段的语句类型,对数据写入请求进行改造,将数写入请求转化为密文形式的请求,并发送至数据库,以将加密后的待写入明文数据写入所述数据库。本申请一方面通过插件化的方式对现有技术的应用进行改造,避免了批量化的接入改造方式,降低了开发成本;且只需要配置涉及到的加解密表和字段,并不需要了解原有的业务及场景,极大的降低了介入时熟悉代码的成本,且实现过程不修改任何原有的代码逻辑,且测试并不需要回归原有业务逻辑,只需要回归部分通用逻辑,保证整体的可行性即可,从而降低了开发的人工和时间成本;由于无需全量回归原有业务,也避免了无人了解原有业务,无法实现全面回归的窘境。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请提供的一个实施例的数据读写***的结构示意图;
图2示出了根据本申请的一个实施例的从数据库读取数据的方法的流程示意图;
图3示出了根据本申请的一个实施例的从数据库读取数据的方法的流程示意图;
图4示出了根据本申请的一个实施例的数据读写装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
传统的数据库加解密方案,需要逐个修改增加每个字段的处理逻辑。进而需要修改人员了解所有的历史业务逻辑,并逐个修改,这增加了做数据库加解密产生的风险。虽然现有技术中也有一些数据库加解密工具,但这些工具涉及的二次开发量很大,通常需要将数据库相关的全部代码改为一种统一实现,则代码风险更大,且本身不支持部分语法需要对业务进行调整,非常的不方便且对存量的历史业务不友好。
对此本申请提供了一种向数据库写入数据方法以及一种从数据库读取数据的方法,图1示出了根据本申请的一个实施例的数据读写***的结构示意图,从图1可以看出,图1示出的数据读写***100包括应用服务110和数据库120,本申请提供的方法可适用于图1示出的应用服务110,应用服务110与数据库120通信连接,可对外提供服务,本申请的从数据库读取数据的方法以及从数据库读取数据的方法均由应用服务110执行。
图2示出了根据本申请的一个实施例的从数据库读取数据的方法的流程示意图,从图2可以看出,本申请至少包括步骤S210~步骤S250:
步骤S210:调用内置于所述应用服务的***,拦截数据写入请求,其中,所述数据写入请求包含待写入明文数据。
在应用服务中设置***,***的作用是对到达应用服务的数据写入请求进行拦截,以使得数据写入请求绕过原来的处理逻辑,进入本申请提供的处理流程。
其中,在本申请的一些实施例中,***可以为Mybatis框架或者是Mybatis-Plus框架下的Interceptor插件,其中,Mybatis框架是一款优秀的基于Java程序的持久层框架,它的内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件当中,实现SQL的灵活配置,这样做的好处是将SQL与程序代码分离,可以在不修改代码的情况下,直接在配置文件当中修改SQL。
Mybatis-Plus框架是一款在Mybatis框架的基础上进行扩展的开源工具包,只做增强不做改变,引入Mybatis-Plus框架不会对现有的Mybatis框架产生任何影响,而且Mybatis-Plus框架支持所有的Mybatis框架原生的特性。
可以通过Mybatis框架或者Mybatis-Plus框架的Interceptor***来数据写入请求,数据写入请求通常为SOL(Structured Query Language,结构化查询语言)请求进行拦截。Interceptor***是用来改变或者扩展Mybatis框架或者Mybatis-Plus框架原有功能的插件。
数据写入请求一般由外部业务***生成,业务***在运行过程中会产生大量数据,并根据大量数据中需要保存的数据生成数据写入请求,发送至应用服务110,由应用服务110发送至数据库120中。
数据写入请求中携带有要存储于数据库中的数据,这部分数据是明文的,这里记为待写入明文数据,如一条数据写入请求为:Update tableA Set column_mobile=19112341234Where column_adress=city a11;在这条请求中,Update表示更新,A为数据表的表名,mobile和adress为该数据表中包含的两个字段的字段名,city a11为该adress字段下的一个值,一个字段名下通常可以包含多个值,这些值通常是并列的。这条请求的含义是:将数据表A中的adress字段名更新为mobile,将其值city a11更新为19112341234。
又如一条数据写入请求为:INSERT INTO tableA(`mobile`)VALUES("19112341234"),在这条请求中,INSERT表示***,A为数据表的表名,mobile为该数据表中包含的一个字段的字段名,19112341234为该字段名下的一个值,一个字段名下通常可以包含多个值,这些值通常是并列的。这条请求的含义是:将数据19112341234,***表A中的mobile字段中。
由于像电话号码这种信息通常为敏感信息,如果直接以明文的形式存储于数据库中,难保不会发生泄露。
在本申请中,当有数据写入请求达到应用服务110中,调用内置于应用服务110的***Interceptor,拦截数据写入请求,使其绕过原有的流程,进入后续的流程。
步骤S220:解析所述数据写入请求,确定所述待写入明文数据中的待加密字段。
然后确定数据写入请求中,是否包含待加密字段,一些敏感信息,如姓名、电话号码等通常是需要加密存储的。
在确定所述待写入明文数据中的待加密字段,可以通过判断待写入明文数据中是否包含待加密字段实现,若不包含,则可以直接跳过后续步骤,直接将数据写入请求发送至数据库,以执行数据的写入。若是包含,可进一步确定待写入明文数据中的待加密字段,并进入后续流程。
对于一个字段是否需要加密,本申请提供了加密配置信息,加密配置信息可以以加密配置表的形式展现,加密配置表是事先配置好的,并且支持实时动态配置,在加密配置表中存储有需要加密的数据表的表名和字段名,如需要加密的表名有:A、B、C等等,以A为例,数据表A中需要加密的字段有姓名(name)和电话号码(mobile),二者的字段名分别为name和mobile。
在本申请的一些实施例中,所述确定所述待写入明文数据中的待加密字段,包括:读取加密配置表;抽取所述SQL请求中的数据表的表名和所述数据表中的字段名;判断所述表名是否存在于所述加密配置表,若存在,则判断所述字段名是否存在于所述加密配置表;若存在,则确定所述待写入明文数据中包含待加密字段,并将所述字段名作为所述待加密字段。
解析所述数据写入请求,抽取其中的数据表的表名和所述数据表中的字段名,仍然以Update tableA Set column_mobile=19112341234Where column_adress=city a11为例,抽取后可得到表名“A”以及字段名“mobile”。
然后依次确定表名“A”和字段名“mobile”是否存在于加密配置表中,具体的,先判断表名“A”是否存在于加密配置表中,若不存在,则直接确定待写入明文数据中不包含待加密字段实现;若存在,则继续确定字段名“mobile”是否存在于加密配置表中,更加具体的判单加密配置表的表名“A”的数据表的加密字段中是否有字段名“mobile”,若是,则将字段名为“mobile”的字段作为待加密字段。
之所以设置了先判断表名,再判断字段名的逻辑,是因为采用这种串行的方式既节约了判断流程,又节省了算力。
步骤S230:确定所述数据写入请求的请求类型,以及所述待加密字段的语句类型。
SqL处理请求主要分三个类型:select,update,insert,其中,update(更新),insert(***)为数据写入请求,select(查询)为数据读取请求。在各个请求下,还存在不同的条件语句,如where、update等。本申请在向数据库写入数据的过程中,针对不同的请求类型,对数据写入请求做出了不同的处理改造。
在这个过程中,首先识别数据写入请求的请求类型,具体的,在本申请的一些实施例中,遍历所述SQL请求,读取所述数据写入请求的头部语句,确定所述数据写入请求的请求类型为update、和insert中的任意一种;读取各所述待加密字段的逻辑语句,确定所述待加密字段的语句类型;若所述SQL请求的请求类型为Update,则根据读取的所述待加密字段的逻辑语句,确定所述待加密字段的语句类型为where或update;若所述SQL请求的请求类型为insert,则根据读取的所述待加密字段的逻辑语句,确定所述待加密字段的语句类型为where或insert。
也就是说,先识别数据写入请求的请求类型,请求类型为update和insert中的任意一种,然后再识别待加密字段的语句类型,若数据写入请求为update,则待加密字段的语句类型为where、和update中的任意一种;若数据写入请求为insert,则待加密字段的语句类型为where、和insert中的任意一种。
步骤S240:根据所述请求类型和所述语句类型,对所述数据写入请求中的待加密字段进行加密处理。
在确定了数据写入请求中的待加密字段、数据写入请求的请求类型、以及待加密字段的语句类型后,根据请求类型和语句类型,对数据写入请求中的待加密字段进行加密处理,以将数据写入请求进行改造,将加密处理后的得到请求可记为数据写入密文请求。
仍然以上述的Update tableA Set column_mobile=19112341234Where column_address=city a11为例,其中,其请求类型为Update,待加密字段的语句类型为where,则对待加密字段的字段名(mobile)和字段值(19112341234)进行加密改造,具体的,可对数据写入请求中的待加密字段的字段名和字段值进行加密,改造为密文,改造后的密文分别为:mobile_cipher和cipherResult。
然后采用得到的密文替换掉数据写入请求中原有的明文,即将Update tableASet column_mobile=19112341234Where column_mobile=15269874123改造后,得到数据写入密文请求为:Update tableA Set column_mobile_cipher=cipherResult Wherecolumn_adress=a11。
步骤S250:将加密处理后的数据写入请求发送至所述数据库,以将加密处理后的待写入明文数据写入所述数据库。
在对数据写入请求加密处理后,将加密处理后的数据写入请求,即数据写入密文请求,发送至所述数据库,在数据库中执行加密处理后的数据写入请求即可写入加密后的数据。
在数据写入请求中携带的是待写入明文数据,以Update tableA Set column_mobile=19112341234Where column_address=city a11为例,如果不进行加密,写入数据库的表A中的数据为:mobile(字段名)+19112341234(字段名下的字段值);经过改造后,写入数据库的表A中的数据为:mobile_cipher(字段名)+cipherResult(字段名下的字段值),其中cipherResult经过预设的解密方法进行反向哈希,即可得到cipherResult对应的原始值19112341234。
由图2所示的方法可以看出:本申请提供了一种向数据库写入数据的方法,该方法在应用服务中部署***,在接到数据写入请求后,调用内置于所述应用服务的***,对数据写入请求进行拦截,然后对数据写入请求进行解析,判断其中包含的待写入明文数据是否包含需要加密的字段,若包含,则根据数据写入请求的请求类型以及待加密字段的语句类型,对数据写入请求进行改造,将数写入请求转化为密文形式的请求,并发送至数据库,以将加密后的待写入明文数据写入所述数据库。本申请一方面通过插件化的方式对现有技术的应用进行改造,避免了批量化的接入改造方式,降低了开发成本;且只需要配置涉及到的加解密表和字段,并不需要了解原有的业务及场景,极大的降低了介入时熟悉代码的成本,且实现过程不修改任何原有的代码逻辑,且测试并不需要回归原有业务逻辑,只需要回归部分通用逻辑,保证整体的可行性即可,从而降低了开发的人工和时间成本;由于无需全量回归原有业务,也避免了无人了解原有业务,无法实现全面回归的窘境。
在本申请的一些实施例中,对于数据写入请求的改造根据其请求类型以及待加密字段的语句类型的不同而不同,具体的,若所述SQL请求的请求类型为Update,且所述待加密字段的语句类型为where、或update,则根据预设的加密方法将所述待加密字段的字段名和对应的字段值分别转化为加密字段名和加密字段值;采用所述加密字段名和所述加密字段值替换掉所述SQL请求中的待加密字段中的字段名和对应的字段值。
即若确定SQL请求为Update,并且待加密字段在where条件中,或者在update字段中,则采用预设的加密方法对分别待加密字段的字段名和对应的字段值进行加密处理,得到加密字段名和加密字段值,然后采用加密字段名和加密字段值替换掉SQL请求中原有的待加密字段中的字段名和对应的字段值。
以Update tableA Set column_mobile=19112341234Where column_address=city a11为例,经过改造后,得到加密处理后的数据写入请求(数据写入密文请求)为:Update tableA Set column_mobile_cipher=cipherResult Where column_adress=a11。
加密方法可为现有技术中的任意一种,如哈希值算法,是最常见的加解密方法,对此本申请不作限定。
在本申请的另一些实施例中,若所述SQL请求的请求类型为insert,且所述待加密字段的语句类型为where,则根据预设的加密方法将所述待加密字段的字段名和对应的字段值分别转化为加密字段名和加密字段值;采用所述加密字段名和所述加密字段值替换掉所述SQL请求中的待加密字段中的字段名和对应的字段值。
即若确定SQL请求的请求类型为insert,且所述待加密字段的语句类型为where,则与SQL请求的请求类型为Update,且所述待加密字段的语句类型为where、或update的处理方式一样,即则根据预设的加密方法将所述待加密字段的字段名和对应的字段值分别转化为加密字段名和加密字段值;采用所述加密字段名和所述加密字段值替换掉所述SQL请求中的待加密字段中的字段名和对应的字段值,这里不再赘述。
在本申请的另一些实施例中,若所述SQL请求的请求类型为insert,且所述待加密字段的语句类型为insert,则根据预设的加密方法,将所述待加密字段的字段名转化为加密字段名和字段名哈希值的组合,以及将对应的字段值转化为加密字段值和字段值哈希值的组合;采用所述加密字段名和字段名哈希值的组合按照预设格式替换掉所述SQL请求中的待加密字段中的字段名;采用所述加密字段值和字段值哈希值的组合按照指定格式替换掉所述SQL请求中的待加密字段中的字段值。
仍然以上述的INSERT INTO tableA(`mobile`)VALUES("19112341234")为例,其中,其请求类型为INSERT,待加密字段的语句类型为insert,则对待加密字段的字段名(mobile)和字段值(19112341234)进行加密改造,具体的,可对数据写入请求中的待加密字段的字段名和字段值进行加密,得到加密字段名、加密字段值、以及加密字段值对应的字段值哈希值,具体的改造后的密文为:mobile_cipher(加密字段名),mobile_hash(字段名哈希值)和cipherResult(加密字段值),hashResult(字段值哈希值),其中,mobile_hash是mobile_cipher的哈希值;hashResult为cipherResult的哈希值,以后者为例,根据字段值哈希值,以及预设的解密方法对cipherResult进行反向哈希,即可得到cipherResult对应的原始值19112341234。
然后采用得到的密文替换掉数据写入请求中原有的明文,即将INSERT INTOtableA(`mobile`)VALUES("19112341234")改造后,得到数据写入密文请求为:INSERTINTO tableA(`mobile_cipher`,`mobile_hash`)VALUES("cipherResult","hashResult"),根据预设格式,将字段名哈希值可以放置在加密字段名的后面,将字段值哈希值可放置在字段值列表的后面。
在本申请的一些实施例中,为了更近一步的保障数据的安全,针对不同对象可以采用不同的加密方式,如可专门对外设计一套加密方法,对公司内部专门设计一套加密方法,这种情况下会生成两套对应的加密字段值和字段值哈希值的组合,在字段列表最后增加对应的两种加密字段名,且在values中最后增加对应的两种方式加密后的字段值哈希值,改造后得到数据写入密文请求为:INSERT INTO tableA(`mobile_cipher`,`mobile_hash`)VALUES("cipherResult1","hashResult1"),("cipherResult2","hashResult2")。
图3示出了根据本申请的一个实施例的从数据库读取数据的方法的流程示意图,该方法可由图1示出的应用服务110执行,所述应用服务通信连接数据库120,在数据库120中存储有采用上述的向数据库写入数据的方法写入的数据,从图3可以看出,本实施例至少包括步骤S310~步骤330:
步骤S310:调用内置于所述应用服务的***,拦截数据查询请求,其中,所述数据查询请求中包含待查询明文字段名。
在应用服务110接收到数据查询请求后,仍然采用***进行拦截,***可以为前述的Mybatis框架或者是Mybatis-Plus框架下的Interceptor插件,在此不再详述。
在数据查询请求中,伴随有待查询明文表名和待查询明文字段名,如tableA和mobile,这两项在数据库中存储的为tableA和mobile_cipher。
如果直接将包含明文的数据查询请求发送至数据库,由于字段名不匹配的原因,则会出现取不到值的情况,为此,可以将数据查询请求进行改造。
步骤S320:若确定所述数据查询请求的请求类型为select,且所述待查询明文字段名的语句类型为where、group by、和join on中的任意一种,则根据预设的加密方法,对所述待查询明文字段名进行加密处理,得到待查询密文字段名,根据所述待查询密文字段名按照预设格式将所述数据查询请求转化为数据查询密文请求。
数据查询请求通常为SQL请求,在SQL语句中,select为查询语句,在拦截到数据查询请求后,首先确定其请求类型,若为select请求,则进一步确定待查询明文字段名的语句类型是否为where条件、group by字段、和join on条件中的任意一种,若是,则对数据查询请求进行解析,抽取其中的待查询明文表名下的待查询明文字段名,其中数据表的表名在数据库中也是以明文形式存在的,因此,对于待查询明文表名无需进行改造,其作用为在查询数据时,用来查找目标数据表的。
而对于待查询明文字段名,其在数据库中存储的为密文字段,为了与数据库中的字段名进行匹配,可采用与存储时相同的加密方法,对待查询明文字段名进行加密处理,得到待查询密文字段名,并采用待查询密文字段名替换掉所述数据查询请求中的待查询明文字段名。
如一个数据查询请求为:select mobile from tableA;替换造后的数据查询请求为:select mobile_cipher from tableA。
步骤330:将所述数据查询密文请求发送至所述数据库,并接收所述数据库返回的所述数据查询请求指示的反馈数据,并根据预设的解密方法对所述反馈数据进行解密。
然后将替换后的数据查询请求发送至数据库120中并执行,接收所述数据库返回的所述数据查询请求指示的数据,该数据通常为密文数据,对该密文数据采用与加密方法对应的解密方法进行解密,即可得到数据查询请求所要查询的数据。
在本申请的一些实施例中,在上述方法中,若确定所述数据查询密文请求指示的数据包括明文数据;所述根据所述待查询密文字段名按照预设格式将所述数据查询请求转化为数据查询密文请求包括:
将所述数据查询请求按照“待查询密文字段名作为(as)待查询明文字段名”的形式转化为数据查询密文请求。
因interceptor插件的过滤器本身依赖分类器mapper的类与字段的映射关系,因java语言反射本身不支持修改字段名/属性名,必须使用原字段名避免匹配失败取不到值,所以可以采用“密文as明文”的形式规避这种问题。
这种情况下,如一个数据查询请求为:select mobile from tableA;替换造后的数据查询请求为:select mobile_cipher asmobile from tableA。
执行查询后,返回的为明文字段名,对返回的待查询明文字段名对应的字段值,进行解密处理,并赋值到返回的明文字段上,即可直接得到明文值。
图4示出了根据本申请的一个实施例的数据读写装置的结构示意图,数据读写装置可部署于应用服务110,从图4可以看出,数据读写装置400包括:
拦截单元410,用于调用内置于所述应用服务的***,拦截数据写入请求,其中,所述数据写入请求包含待写入明文数据;
解析单元420,用于解析所述数据写入请求,确定所述待写入明文数据中的待加密字段;以及用于确定所述数据写入请求的请求类型,以及所述待加密字段的语句类型;
加密单元430,用于根据所述请求类型和所述语句类型,对所述数据写入请求中的待加密字段进行加密处理;
发送单元440,用于将加密处理后的数据写入请求发送至所述数据库,以将加密处理后的待写入明文数据写入所述数据库。
在本申请的一些实施例中,在上述装置中,解析单元420,用于读取加密配置表;抽取所述SQL请求中的数据表的表名和所述数据表中的字段名;判断所述表名是否存在于所述加密配置表,若存在,则判断所述字段名是否存在于所述加密配置表;若存在,则确定所述待写入明文数据中包含待加密字段,并将所述字段名作为所述待加密字段。
在本申请的一些实施例中,在上述装置中,所述数据写入请求为SQL请求,解析单元420,用于遍历所述SQL请求,读取所述数据写入请求的头部语句,确定所述数据写入请求的请求类型为update、和insert中的任意一种;读取各所述待加密字段的逻辑语句,确定所述待加密字段的语句类型;若所述SQL请求的请求类型为Update,则根据读取的所述待加密字段的逻辑语句,确定所述待加密字段的语句类型为where或update;若所述SQL请求的请求类型为insert,则根据读取的所述待加密字段的逻辑语句,确定所述待加密字段的语句类型为where或insert。
在本申请的一些实施例中,在上述装置中,加密单元430,用于若所述SQL请求的请求类型为Update,且所述待加密字段的语句类型为where、或update,或者,若所述SQL请求的请求类型为insert,且所述待加密字段的语句类型为where,则根据预设的加密方法将所述待加密字段的字段名和对应的字段值分别转化为加密字段名和加密字段值;采用所述加密字段名和所述加密字段值替换掉所述SQL请求中的待加密字段中的字段名和对应的字段值。
在本申请的一些实施例中,在上述装置中,加密单元430,还用于若所述SQL请求的请求类型为insert,且所述待加密字段的语句类型为insert,则根据预设的加密方法,将所述待加密字段的字段名转化为加密字段名和字段名哈希值的组合,以及将对应的字段值转化为加密字段值和字段值哈希值的组合;采用所述加密字段名和字段名哈希值的组合按照预设格式替换掉所述SQL请求中的待加密字段中的字段名;采用所述加密字段值和字段值哈希值的组合按照指定格式替换掉所述SQL请求中的待加密字段中的字段值。
在本申请的一些实施例中,在上述装置中,拦截单元410,还用于调用内置于所述应用服务的***,拦截数据查询请求,其中,所述数据查询请求中包含待查询明文字段名;解析单元420,还用于对数据查询请求进行解析,若确定所述数据查询请求的请求类型为select,且所述待查询字段名的语句类型为where、group by、和join on中的任意一种,则加密单元430,用于根据预设的加密方法,对所述待查询明文字段名进行加密处理,得到待查询密文字段名,根据所述待查询密文字段名按照预设格式将所述数据查询请求转化为数据查询密文请求;发送单元440,还用于将所述数据查询密文请求发送至所述数据库,并接收所述数据库返回的所述数据查询请求指示的反馈数据,并根据预设的解密方法对所述反馈数据进行解密。
在本申请的一些实施例中,在上述装置中,若确定所述数据查询密文请求指示的数据包括明文数据;则加密单元430,用于将所述数据查询请求按照:“待查询密文字段名作为待查询明文字段名”的形式转化为数据查询密文请求。
需要说明的是,上述任一的数据读写装置可一一对应实现前述的向数据库写入数据的方法以及从数据库读取数据的方法,这里不再赘述。
图5为本申请实施例提供的一种电子设备的结构示意图。如图5所示,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据读写装置。处理器,执行存储器所存放的程序,并具体用于执行前述方法。
处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备可执行本申请多个实施例提供的向数据库写入数据的方法以及从数据库读取数据的方法,并实现成数据读写装置在图4所示实施例的功能,本申请实施例在此不再赘述。
本申请实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行本申请多个实施例提供的应用文件的打包方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的同一要素。
本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种向数据库写入数据的方法,其特征在于,所述方法由应用服务执行,所述应用服务通信连接数据库,所述方法包括:
调用内置于所述应用服务的***,拦截数据写入请求,其中,所述数据写入请求包含待写入明文数据;
解析所述数据写入请求,确定所述待写入明文数据中的待加密字段;
确定所述数据写入请求的请求类型,以及所述待加密字段的语句类型;
根据所述请求类型和所述语句类型,对所述数据写入请求中的待加密字段进行加密处理;
将加密处理后的数据写入请求发送至所述数据库,以将加密处理后的待写入明文数据写入所述数据库。
2.根据权利要求1所述的方法,其特征在于,所述解析所述数据写入请求,确定所述待写入明文数据中的待加密字段,包括:
读取加密配置表;
抽取所述SQL请求中的数据表的表名和所述数据表中的字段名;
判断所述表名是否存在于所述加密配置表,若存在,则判断所述字段名是否存在于所述加密配置表;
若存在,则确定所述待写入明文数据中包含待加密字段,并将所述字段名作为所述待加密字段。
3.根据权利要求1所述的方法,其特征在于,所述数据写入请求为SQL请求,所述确定所述数据写入请求的请求类型,以及所述待加密字段的语句类型,包括:
遍历所述SQL请求,读取所述数据写入请求的头部语句,确定所述数据写入请求的请求类型为update、和insert中的任意一种;
读取所述待加密字段的逻辑语句,确定所述待加密字段的语句类型;
若所述SQL请求的请求类型为Update,则根据读取的所述待加密字段的逻辑语句,确定所述待加密字段的语句类型为where或update;
若所述SQL请求的请求类型为insert,则根据读取的所述待加密字段的逻辑语句,确定所述待加密字段的语句类型为where或insert。
4.根据权利要求3所述的方法,其特征在于,所述根据所述请求类型和所述语句类型对所述待加密字段进行加密处理,包括:
若所述SQL请求的请求类型为Update,且所述待加密字段的语句类型为where、或update,或者,若所述SQL请求的请求类型为insert,且所述待加密字段的语句类型为where,则根据预设的加密方法将所述待加密字段的字段名和对应的字段值分别转化为加密字段名和加密字段值;
采用所述加密字段名和所述加密字段值替换掉所述SQL请求中的待加密字段中的字段名和对应的字段值。
5.根据权利要求3所述的方法,其特征在于,所述根据所述请求类型和所述语句类型对所述数据写入请求中的待加密字段进行加密处理,还包括:
若所述SQL请求的请求类型为insert,且所述待加密字段的语句类型为insert,则根据预设的加密方法,将所述待加密字段的字段名转化为加密字段名和字段名哈希值的组合,以及将对应的字段值转化为加密字段值和字段值哈希值的组合;
采用所述加密字段名和字段名哈希值的组合按照预设格式替换掉所述SQL请求中的待加密字段中的字段名;
采用所述加密字段值和字段值哈希值的组合按照指定格式替换掉所述SQL请求中的待加密字段中的字段值。
6.一种从数据库读取数据的方法,其特征在于,所述方法由应用服务执行,所述应用服务通信连接数据库,所述数据库存储有采用权利要求1~5中一项所述的向数据库写入数据的方法写入的数据;
所述方法包括:
调用内置于所述应用服务的***,拦截数据查询请求,其中,所述数据查询请求中包含待查询明文字段名;
若确定所述数据查询请求的请求类型为select,且所述待查询明文字段名的语句类型为where、group by、和join on中的任意一种,则根据预设的加密方法,对所述待查询明文字段名进行加密处理,得到待查询密文字段名,根据所述待查询密文字段名按照预设格式将所述数据查询请求转化为数据查询密文请求;
将所述数据查询密文请求发送至所述数据库,并接收所述数据库返回的所述数据查询请求指示的反馈数据,并根据预设的解密方法对所述反馈数据进行解密。
7.根据权利要求6所述的方法,其特征在于,若确定所述数据查询密文请求指示的数据包括明文数据;则所述根据所述待查询密文字段名按照预设格式将所述数据查询请求转化为数据查询密文请求,包括:
将所述数据查询请求按照:“待查询密文字段名作为待查询明文字段名”的形式转化为数据查询密文请求。
8.一种数据读写装置,其特征在于,所述装置可实现权利要求1~5中任一项或者权利要求6~7中任一项所述的方法。
9.一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行所述权利要求1~5中任一项或权利要求6~7中任一项所述方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行所述权利要求1~5中任一项或权利要求6~7中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211425932.1A CN115712621A (zh) | 2022-11-15 | 2022-11-15 | 向数据库写入数据的方法以及从数据库读取数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211425932.1A CN115712621A (zh) | 2022-11-15 | 2022-11-15 | 向数据库写入数据的方法以及从数据库读取数据的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115712621A true CN115712621A (zh) | 2023-02-24 |
Family
ID=85233149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211425932.1A Pending CN115712621A (zh) | 2022-11-15 | 2022-11-15 | 向数据库写入数据的方法以及从数据库读取数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115712621A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116451257A (zh) * | 2023-04-18 | 2023-07-18 | 北京白龙马云行科技有限公司 | 一种数据库数据的加密方法、***、电子设备 |
CN116701493A (zh) * | 2023-08-07 | 2023-09-05 | ***量子科技有限公司 | 支持模糊查询的数据库操作方法及用户端 |
-
2022
- 2022-11-15 CN CN202211425932.1A patent/CN115712621A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116451257A (zh) * | 2023-04-18 | 2023-07-18 | 北京白龙马云行科技有限公司 | 一种数据库数据的加密方法、***、电子设备 |
CN116451257B (zh) * | 2023-04-18 | 2024-01-02 | 北京白龙马云行科技有限公司 | 一种数据库数据的加密方法、***、电子设备 |
CN116701493A (zh) * | 2023-08-07 | 2023-09-05 | ***量子科技有限公司 | 支持模糊查询的数据库操作方法及用户端 |
CN116701493B (zh) * | 2023-08-07 | 2023-10-31 | ***量子科技有限公司 | 支持模糊查询的数据库操作方法及用户端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115712621A (zh) | 向数据库写入数据的方法以及从数据库读取数据的方法 | |
AU2019239311B2 (en) | Facilitating queries of encrypted sensitive data via encrypted variant data objects | |
US10114955B2 (en) | Increasing search ability of private, encrypted data | |
EP3591510A1 (en) | Method and device for writing service data in block chain system | |
WO2017088683A1 (zh) | 一种数据脱敏的方法及*** | |
CN109189367B (zh) | 一种数据处理方法、装置、服务器及存储介质 | |
CN112989412A (zh) | 一种基于sql语句解析的数据脱敏方法及装置 | |
US11288664B2 (en) | Method and apparatus for processing transactions | |
CN115129716A (zh) | 一种针对工业大数据的数据管理方法、设备及存储介质 | |
WO2019095854A1 (zh) | 可溯源的多方数据处理方法、装置及设备 | |
US11849036B2 (en) | Key rotation for sensitive data tokenization | |
CN109284302A (zh) | 数据处理方法及装置 | |
CN113297611A (zh) | 数据处理、加密存储、读取方法、设备及存储介质 | |
US20230153455A1 (en) | Query-based database redaction | |
CN116303622A (zh) | 一种数据库查询方法、装置、设备及存储介质 | |
CN111125216A (zh) | 数据导入Phoenix的方法及装置 | |
CN115687392A (zh) | 一种sql语句的优化执行方法、装置、电子设备及介质 | |
CN108228604B (zh) | 基于内存对象的模型构建方法、信息查询方法及装置 | |
CN115827589A (zh) | 一种权限验证方法、装置、电子设备及存储介质 | |
US20140149419A1 (en) | Complex event processing apparatus for referring to table within external database as external reference object | |
CN112733510A (zh) | 一种财务凭证生成方法、装置、设备及计算机可读存储介质 | |
CN116361331A (zh) | 一种数据查询方法、装置 | |
CN113821819B (zh) | 数据读写方法、装置、电子设备及计算机可读存储介质 | |
WO2024139320A1 (zh) | 一种数据排序方法、装置、设备及可读存储介质 | |
CN114911851B (zh) | 数据查询方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |