CN109960942B - 基于数据库连接池的数据库数据加解密方法及其系统 - Google Patents
基于数据库连接池的数据库数据加解密方法及其系统 Download PDFInfo
- Publication number
- CN109960942B CN109960942B CN201910236052.1A CN201910236052A CN109960942B CN 109960942 B CN109960942 B CN 109960942B CN 201910236052 A CN201910236052 A CN 201910236052A CN 109960942 B CN109960942 B CN 109960942B
- Authority
- CN
- China
- Prior art keywords
- field
- encrypted
- database
- encryption
- statement
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2107—File encryption
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及基于数据库链接池的数据库数据加解密方法及其系统,通过直接在数据访问层(JDBC)自动进行加解密,利用JDBC层中能得到待执行SQL以及入参的特点,自动分析SQL执行语句,并进行语句拦截加解密转换,执行SQL动作。从而实现无人工大面积修改原有SQL的情况下,往系统中嵌入加解密敏感数据的功能。并且相似SQL执行语句,无需重复测试,只要有一条正确解析,即可认为与其类似的SQL也可正确得到执行,效率高,对原系统改动小,工作量少。
Description
技术领域
本发明涉及基于数据库连接池的数据库数据加解密方法及其系统,属于数据库安全信息领域。
背景技术
Druid是一种高效、功能强大的数据库连接池,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。其核心能力包含监控数据访问性能,数据库库密码加密,SQL执行日志,扩展JDBC等。
由于现有已稳定运行的系统在设计之初并未考虑数据库敏感数据加解密的问题,如果人为修改代码中的SQL执行语句,代码重构范围广,测试难度大。如果使用现有技术的加解密扩展技术,则需要处理的加解密接口数据量大,处理流程慢,且调试耗时周期长。
发明内容
为了解决上述技术问题,本发明提出一种基于数据库连接池的数据库数据加解密方法及其系统,对数据库数据进行数据加解密扩展。
本发明的技术方案一:
基于数据库连接池的数据库加解密方法,包括如下步骤:
S1:对待加密数据库的表及字段进行初始化处理,并输入SQL执行语句,其中,所述初始化处理包括向待加解密数据库中配置需要加密的表及字段。
S2:拦截SQL执行语句对其进行字段分析,当所述SQL执行语句包含待加解密数据库的表及字段时,则进入S3步骤;否则,进入步骤S5。
S3:判断所述SQL执行语句的类型:
当所述SQL执行语句类型为SELECT语句时,则分析查询字段,将待解密字段信息保存到缓存中,用于步骤S6的查询结果集解密,并进入步骤S4。
当所述SQL执行语句类型为UPDATE语句时,则分析更新字段,将参数匹配符“?”的次序和字段名保存到缓存中,用于步骤S5的字段值加密,并进入步骤S4。
当所述SQL执行语句类型为INSERT语句时,则分析插入字段,将参数匹配符“?”的次序和字段名保存到缓存中,用于步骤S5的字段值加密,并进入步骤S5。
S4:分析所述SQL执行语句中WHERE关键词之后的条件字段,当WHERE之后的操作符为=、!=、>、>=、<、<=、<>、like、not like、is、is not之一时,则提取出操作符左右两边的字段并判断,当左右都存在字段时,则无需做处理;当左边或者右边单边存在字段时,判断该字段是否为待加密字段,若是则修改所述SQL执行语句,执行加密操作,进入步骤S5。
S5:拦截所述SQL执行语句的入参的设置值,根据当前处理的字段次序到缓存中提取字段名,将字段名和字段值代入加密方法得出加密后的新的字段名和字段值,替换原入参的设置值,并执行SQL执行语句输出执行结果。
S6:拦截SQL执行结果的结果集设置值,判断当前设置的字段名是否为需要解密字段,若是,则对数据进行解密,并输出解密结果。
S1步骤中,待加密数据库包括,entityClassNamSet,需要加密的实体名,tableNameList,需要加密的数据库表名,tableColumList/Map,需要加密的数据库字段列表/表名映射,createTableSql,建表语句;初始化时,需要向tableColumMap中配置需要加密的实体和需要加密的字段数组,并分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
S4步骤中,所述加密操作包括对所述SQL执行语句进行嵌套外围加密函数。
S5步骤中,加密方法为依次使用Java的AES类库和Base64对待加密字段进行转换得到加密后的字段。
S6步骤中,解密方法为对待解密字符串分别使用Base64和Java的加解密类库SecretKeySpec的对待解密字段进行AES解密得到解密后的字段。
技术方案二
基于数据库连接池的数据库加解密系统,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并执行以下步骤:
对待加密数据库的表及字段进行初始化处理,并输入SQL执行语句,其中,所述初始化处理包括向待加解密数据库中配置需要加密的表及字段。
拦截SQL执行语句对其进行字段分析,当所述SQL执行语句包含待加解密数据库的表及字段时,则进行语句类型判断;否则,进行入参设置值替换操作。
判断所述SQL执行语句的类型:
当所述SQL执行语句类型为SELECT语句时,则分析查询字段,将待解密字段信息保存到缓存中;
当所述SQL执行语句类型为UPDATE语句时,则分析更新字段,将参数匹配符“?”的次序和字段名保存到缓存中;
当所述SQL执行语句类型为INSERT语句时,分析插入字段,将参数匹配符“?”的次序和字段名保存到缓存中;
分析所述SQL执行语句中WHERE关键词之后的条件字段,当WHERE之后的操作符为=、!=、>、>=、<、<=、<>、like、not like、is、is not之一时,则提取出操作符左右两边的字段并判断,当左右都存在字段时,则无需做处理;当左边或者右边单边存在字段时,判断该字段是否为待加密字段,若是则修改所述SQL执行语句,对其执行加密操作;
拦截所述SQL执行语句的入参的设置值,根据当前处理的字段次序到缓存中提取字段名,将字段名和字段值代入加密方法得出加密后的新的字段名和字段值,替换原入参的设置值,并执行SQL执行语句输出执行结果;
拦截SQL执行结果的结果集设置值,判断当前设置的字段名是否为需要解密字段,若是则对数据进行解密,并输出解密结果。
待加密数据库包括,entityClassNamSet,需要加密的实体名,tableNameList,需要加密的数据库表名,tableColumList/Map,需要加密的数据库字段列表/表名映射,createTableSql,建表语句;初始化时,需要向tableColumMap中配置需要加密的实体和需要加密的字段数组,并分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
所述加密操作包括对所述SQL执行语句进行嵌套外围加密函数。
加密方法为依次使用Java的AES类库和Base64对待加密字段进行转换得到加密后的字段。
解密方法为对待解密字符串分别使用Base64和Java的加解密类库SecretKeySpec的对待解密字段进行AES解密得到解密后的字段。
本发明具有如下有益效果:
1、本发明的基于数据库连接池的数据库数据加解密方法及其系统,使用Druid数据库连接池的良好拓展性,使用其暴露出来的api进行敏感字段的加解密扩展,扩展效率高;
2、本发明的基于数据库连接池的数据库数据加解密方法及其系统,直接在数据访问层(JDBC)自动进行加解密,利用JDBC层中能得到待执行SQL以及入参的特点,自动分析并加解密。使得无需再人工大面积修改原有SQL的情况下,实现往系统中嵌入加解密敏感数据的功能。
3、本发明的基于数据库连接池的数据库数据加解密方法及其系统,使用Java的加解密类库(SecretKeySpec)对字节数组进行AES解密,使用Java的AES类库加密字节数组得到加密后的字节数组,加解密效果好,加密等级高,解密方便。
附图说明
图1为本发明的基于数据库连接池的数据库数据加解密方法流程图。
具体实施方式
下面结合附图和具体实施例来对本发明进行详细的说明。
实施例一
基于数据库连接池的数据库加解密方法,包括如下步骤:
S1:对待加密数据库的表及字段进行初始化处理,并输入SQL执行语句,其中,所述初始化处理包括向待加解密数据库中配置需要加密的表及字段。SQL执行语句为数据库的应用语句,包括查询,增加,更新,删除某条数据。
在SQL解析其中进行初始化处理,SQL解析器其中包括SqlAnalysisMeta,为解析SQL后记录的元数据,主要是线程变量保存字段信息,横贯整个sql执行的生命周期。包含columnSet和parameterIndexSet两个字段和一个SqlAnalysisMeta线程变量,其中columnSet为保存待加解密字段,parameterIndexSet为保存字段入参下标。
初始化SqlCryptoConfig(需要加密的表的字段的配置类)。包含如下字段:
1.entityClassNamSet:需要加密的实体class名
2.tableNameList:需要加密的数据库表名
3.tableColumList/Map:需要加密的数据库字段列表/表名映射
4.createTableSql:建表语句,druid的sql语法识别需要用到,让durid语法识别器能够理解表和字段之间的关系。
初始化处理时,需要向tableColumMap中配置需要加密的实体(key)和需要加密的字段数组(value)。并由此分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
S2:拦截SQL执行语句对其进行字段分析,当所述SQL执行语句包含待加解密数据库的表及字段时,则进入S3步骤;否则,进入步骤S5。
S3:判断SQL执行语句的类型:
当所述SQL执行语句类型为SELECT语句时,则分析查询字段,将待解密字段信息保存到缓存中,用于步骤S6的查询结果集解密,并进入步骤S4。
当所述SQL执行语句类型为UPDATE语句时,则分析更新字段,将参数匹配符“?”的次序和字段名保存到缓存中,用于步骤S5的字段值加密,并进入步骤S4。
“?”是sql中的匹配符号。这里“?”是入参。例如,代码中sql写法为:select*fromtb_user where name=#{name},参数name在java中设置为’韩梅梅’。则框架会把sql解析成:select*from tb_user where name=?,并对入参’韩梅梅’做校验(防止sql注入),校验无误后,会拼接成完整的sql:select*from tb_user where name=’韩梅梅’。
当所述SQL执行语句类型为INSERT语句时,分析插入字段,将参数匹配符“?”的次序和字段名保存到缓存中,用于步骤S5的字段值加密,并进入步骤S5。
S4:分析所述SQL执行语句中WHERE关键词之后的条件字段,当WHERE之后的操作符为=、!=、>、>=、<、<=、<>、like、not like、is、is not之一时,则提取出操作符左右两边的字段并判断,当左右都存在字段时,则无需做处理;当左边或者右边单边存在字段时,判断该字段是否为待加密字段,若是则修改所述SQL执行语句,进行加密操作。
拦截sql,根据SQL的不同类型,使用不同的Visitor(可以认为是处理器)来处理。
1.如果是statement是Select语句
a.判断该条SELECT语句的表和字段是否在SqlCryptoConfig中。若存在,则说明该条SELECT语句所查询字段需要解密。将待解密查询字段存入SqlAnalysisMeta线程变量中。
b.使用AnalysisConditionVisitor分析where后面的条件。
2.如果statement是Update语句
a.使用AnalysisUpdateVisitor处理更新语句的参数。
b.使用AnalysisConditionVisitor分析where后面的条件。
3.如果statement是Insert语句
使用AnalysisUpdateVisitor处理插入语句的参数。
AnalysisConditionVisitor:sql条件分析Visitor。获取操作符左右两边的字段:
1.若左右字段均为空,则返回。(如select*from tb_user where 1=1)
2.若左右字段均不为空,且左右字段均在SqlCryptoConfig配置中,则返回。(select*from tb_user where name=name)
3.若左右字段均不为空,或者左右字段其中一个不为空,需要修改sql,给字段加上加密函数。(例如:select*from tb_user where name=?会被修改为select*from tb_user where decrypt_function(name)=?)
AnalysisUpdateVisitor:更新参数分析visitor。
1.从PGUpdateStatement中获取items(包含更新字段和入参信息),判断待更新字段是否存在于SqlCryptoConfig中。如果存在,则SqlAnalysisMeta在中记下入参下标和字段名的信息。
2.从PGInsertStatement中获取待插入字段List和带插入值List,判断待插入字段是否存在于SqlCryptoConfig中。如果存在,则SqlAnalysisMeta在中记下入参下标和字段名的信息。
S5:拦截所述SQL执行语句的入参的设置值,根据当前处理的字段次序到缓存中提取字段名,将字段名和字段值代入加密方法得出加密后的新的字段名和字段值,替换原入参的设置值,并执行SQL执行语句输出执行结果。
拦截操作在SQL加密过滤器中进行,预编译setString过滤器,拦截设置“?”入参的过程,并对参数进行加密。例如,第二步中已经经过加密处理后语句为select*from tb_user where decrypt_function(name)=?;name字段上已经套上了decrypt_function()加密函数,为了语句能正确执行,也需要对入参进行加密。又因为需要加解密的字段都是字符串类型,所以在这个拦截器中,拦截setString方法,然后到元数据类SqlAnalysisMeta的线程变量中判断是否存在该变量,若存在则对入参进行加密。
S6:拦截SQL执行结果的结果集设置值,判断当前设置的字段名是否为需要解密字段,若是则对数据进行解密,并输出解密结果。
拦截操作在SQL结果集过滤器中执行,在对结果集设置值时进行拦截时,本实施例中只拦截get_string。同样是到元数据的线程变量里找是否存在当前字段,如果存在,则对结果值进行解密。例如,select name from tb_name。name字段因为是加密字段所以这里取出来的值可能是@#!$@&*$,代入解密工具类解密之后就变成“韩梅梅”。
S1步骤中,待加密数据库包括,entityClassNamSet,需要加密的实体名,tableNameList,需要加密的数据库表名,tableColumList/Map,需要加密的数据库字段列表/表名映射,createTableSql,建表语句;初始化时,需要向tableColumMap中配置需要加密的实体和需要加密的字段数组,并分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
S4步骤中,所述加密操作包括对所述SQL执行语句进行嵌套外围加密函数。
S5步骤中,加密方法为依次使用Java的AES类库和Base64对待加密字段进行转换得到加密后的字段。
S6步骤中,解密方法为对待解密字符串分别使用Base64和Java的加解密类库SecretKeySpec的对待解密字段进行AES解密得到解密后的字段。
AESUtils:AES加解密工具类:
1.解密:
a.待解密字符串先用Base64解密成字节数组,(String→byte[])。
b.使用Java的加解密类库(SecretKeySpec)对字节数组进行AES解密,(byte[]→String)。
2.加密:
将待加密字符串转化成UTF8的字节数组,(String→byte[])。
a.使用Java的AES类库加密字节数组得到加密后的字节数组,(byte[]→byte[])。
b.使用Base64加密字节数组,得到加密后的字符串,(byte[]→String)。
本发明的基于数据库连接池的数据库数据加解密方法及其系统,使用Druid数据库连接池的良好拓展性,使用其暴露出来的api进行敏感字段的加解密扩展,扩展效率高。直接在数据访问层(JDBC)自动进行加解密,利用JDBC层中能得到待执行SQL以及入参的特点,自动分析并加解密。使得无需再人工大面积修改原有SQL的情况下,实现往系统中嵌入加解密敏感数据的功能。使用Java的加解密类库(SecretKeySpec)对字节数组进行AES解密,使用Java的AES类库加密字节数组得到加密后的字节数组,加解密效果好,加密等级高,解密方便。
实施例二
基于数据库连接池的数据库加解密系统,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并执行以下步骤:
对待加密数据库的表及字段进行初始化处理,并输入SQL执行语句,其中,所述初始化处理包括向待加解密数据库中配置需要加密的表及字段。
拦截SQL执行语句对其进行字段分析,当所述SQL执行语句包含待加解密数据库的表及字段时,则进行语句类型判断;否则,进行入参设置值替换操作。
判断所述SQL执行语句的类型:
当所述SQL执行语句类型为SELECT语句时,则分析查询字段,将待解密字段信息保存到缓存中;
当所述SQL执行语句类型为UPDATE语句时,则分析更新字段,将参数匹配符“?”的次序和字段名保存到缓存中;
当所述SQL执行语句类型为INSERT语句时,分析插入字段,将参数匹配符“?”的次序和字段名保存到缓存中;
分析所述SQL执行语句中WHERE关键词之后的条件字段,当WHERE之后的操作符为=、!=、>、>=、<、<=、<>、like、not like、is、is not之一时,则提取出操作符左右两边的字段并判断,当左右都存在字段时,则无需做处理;当左边或者右边单边存在字段时,判断该字段是否为待加密字段,若是则修改所述SQL执行语句,对其执行加密操作;
拦截所述SQL执行语句的入参的设置值,根据当前处理的字段次序到缓存中提取字段名,将字段名和字段值代入加密方法得出加密后的新的字段名和字段值,替换原入参的设置值,并执行SQL执行语句输出执行结果;
拦截SQL执行结果的结果集设置值,判断当前设置的字段名是否为需要解密字段,若是则对数据进行解密,并输出解密结果。
待加密数据库包括,entityClassNamSet,需要加密的实体名,tableNameList,需要加密的数据库表名,tableColumList/Map,需要加密的数据库字段列表/表名映射,createTableSql,建表语句;初始化时,需要向tableColumMap中配置需要加密的实体和需要加密的字段数组,并分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
所述加密操作包括对所述SQL执行语句进行嵌套外围加密函数。
加密方法为依次使用Java的AES类库和Base64对待加密字段进行转换得到加密后的字段。
解密方法为对待解密字符串分别使用Base64和Java的加解密类库SecretKeySpec的对待解密字段进行AES解密得到解密后的字段。
本发明的基于数据库连接池的数据库数据加解密方法及其系统,使用Druid数据库连接池的良好拓展性,使用其暴露出来的api进行敏感字段的加解密扩展,扩展效率高。直接在数据访问层(JDBC)自动进行加解密,利用JDBC层中能得到待执行SQL以及入参的特点,自动分析并加解密。使得无需再人工大面积修改原有SQL的情况下,实现往系统中嵌入加解密敏感数据的功能。使用Java的加解密类库(SecretKeySpec)对字节数组进行AES解密,使用Java的AES类库加密字节数组得到加密后的字节数组,加解密效果好,加密等级高,解密方便。
实施例三
数据库初始化需要加密的表的字段的配置类,即SqlCryptoConfig。
初始化时,向tableColumMap中配置需要加密的实体(key)和需要加密的字段数组(value)。在本实施例中,数据库为人员名单,及其对应的年龄,性别等数据。
进入过滤器SqlAnalysisFilter:拦截SQL语句,本实施例中,操作人员输入的命令“select name from tb_user where name=韩梅梅”,即SQL执行的是查询姓名为韩梅梅的条目信息。
首先,通过statement字段判断得出当前SQL是Select语句,判断该条Select语句的表和字段是否在SqlCryptoConfig中。结果为存在,则该条Select语句所查询字段,即韩梅梅对应的条目信息需要解密。将待解密查询字段存入SqlAnalysisMeta线程变量中。
使用AnalysisConditionVisitor分析where后面的条件。
左右字段均不为空,需要修改sql,给字段加上加密函数。select name from tb_user where name=韩梅梅被修改为select name from tb_user where decrypt_function(name)=韩梅梅。
本实施例中,加密函数decrypt_function首先使用Java的AES类库加密字节数组进行字组转化加密,再对上一步结果使用Base64加密字节数组进行二次转化,得到加密后的UTF8字符串。
加密过程:进入EncryptParameterFilter,预编译setString过滤器,拦截设置入参的过程,并对参数进行加密。在本实施例中,已经经过加密处理后语句为select namefrom tb_user where decrypt_function(name)=韩梅梅。name字段上已经套上了decrypt_function()加密函数,为了语句能正确执行,也需要对入参进行加密。又因为需要加解密的字段都是字符串类型,所以在这个拦截器中,拦截setString方法,然后到元数据类SqlAnalysisMeta的线程变量对“韩梅梅”进行加密操作,转化成UTF8的字节数组:@#!$@&*$。
执行SQL,即查找加密数据库中name值为@#!$@&*$的数据结果,其中条目中的其他信息也为UTF8的加密字节数组。
进入DecryptResultSetFilter。在对结果集设置值时进行拦截。到元数据的线程变量里找,对结果值进行解密。代入解密工具类解密:
待解密字符串先用Base64解密成字节数组,再使用Java的加解密类库(SecretKeySpec)对字节数组进行AES解密。首先之后@#!$@&*$变成“韩梅梅”,对应的年龄性别经过解密转化为源数据参数。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包含在本发明的专利保护范围内。
Claims (8)
1.基于数据库连接池的数据库加解密方法,其特征在于,包括如下步骤:
S1:对待加密数据库的表及字段进行初始化处理,并输入SQL执行语句,其中,所述初始化处理包括向待加解密数据库中配置需要加密的表及字段;
S2:通过数据访问层拦截SQL执行语句对其进行字段分析,当所述SQL执行语句包含待加解密数据库的表及字段时,则进入S3步骤;否则,进入步骤S5;
S3:判断所述SQL执行语句的类型:
当所述SQL执行语句类型为SELECT语句时,则分析查询字段,将待解密字段信息保存到缓存中,用于步骤S6的查询结果集解密,并进入步骤S4;
当所述SQL执行语句类型为UPDATE语句时,则分析更新字段,将参数匹配符“?”的次序和字段名保存到缓存中,用于步骤S5的字段值加密,并进入步骤S4;
当所述SQL执行语句类型为INSERT语句时,则分析插入字段,将参数匹配符“?”的次序和字段名保存到缓存中,用于步骤S5的字段值加密,并进入步骤S5;
S4:分析所述SQL执行语句中WHERE关键词之后的条件字段,当WHERE之后的操作符为=、!=、>、>=、<、<=、<>、like、not like、is、is not之一时,则提取出操作符左右两边的字段并判断,当左右都存在字段时,则无需做处理;当左边或者右边单边存在字段时,判断该字段是否为待加密字段,若是则修改所述SQL执行语句,执行加密操作,进入步骤S5;
S5:在数据访问层拦截所述SQL执行语句的入参的设置值,根据当前处理的字段次序到缓存中提取字段名,将字段名和字段值代入加密方法得出加密后的新的字段名和字段值,替换原入参的设置值,并执行SQL执行语句输出执行结果;
S6:在数据访问层拦截SQL执行结果的结果集设置值,判断当前设置的字段名是否为需要解密字段,若是,则对数据进行解密,并输出解密结果;
S5步骤中,加密方法为依次使用Java的AES类库和Base64对待加密字段进行转换得到加密后的字段。
2.根据权利要求1所述的基于数据库连接池的数据库加解密方法,其特征在于:S1步骤中,待加密数据库包括,entityClassNamSet,需要加密的实体名,tableNameList,需要加密的数据库表名,tableColumList/Map,需要加密的数据库字段列表/表名映射,createTableSql,建表语句;初始化时,需要向tableColumMap中配置需要加密的实体和需要加密的字段数组,并分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
3.根据权利要求2所述的基于数据库连接池的数据库加解密方法,其特征在于:S4步骤中,所述加密操作包括对所述SQL执行语句进行嵌套外围加密函数。
4.根据权利要求3所述的基于数据库连接池的数据库加解密方法,其特征在于:S6步骤中,解密方法为对待解密字符串分别使用Base64和Java的加解密类库SecretKeySpec的对待解密字段进行AES解密得到解密后的字段。
5.基于数据库连接池的数据库加解密系统,其特征在于,包括存储器和处理器,所述存储器存储有指令,所述指令适于由处理器加载并执行以下步骤:
对待加密数据库的表及字段进行初始化处理,并输入SQL执行语句,其中,所述初始化处理包括向待加解密数据库中配置需要加密的表及字段;
通过数据访问层拦截SQL执行语句对其进行字段分析,当所述SQL执行语句包含待加解密数据库的表及字段时,则进行语句类型判断;否则,进行入参设置值替换操作;
判断所述SQL执行语句的类型:
当所述SQL执行语句类型为SELECT语句时,则分析查询字段,将待解密字段信息保存到缓存中;
当所述SQL执行语句类型为UPDATE语句时,则分析更新字段,将参数匹配符“?”的次序和字段名保存到缓存中;
当所述SQL执行语句类型为INSERT语句时,分析插入字段,将参数匹配符“?”的次序和字段名保存到缓存中;
分析所述SQL执行语句中WHERE关键词之后的条件字段,当WHERE之后的操作符为=、!=、>、>=、<、<=、<>、like、not like、is、is not之一时,则提取出操作符左右两边的字段并判断,当左右都存在字段时,则无需做处理;当左边或者右边单边存在字段时,判断该字段是否为待加密字段,若是则修改所述SQL执行语句,对其执行加密操作;
在数据访问层拦截所述SQL执行语句的入参的设置值,根据当前处理的字段次序到缓存中提取字段名,将字段名和字段值代入加密方法得出加密后的新的字段名和字段值,替换原入参的设置值,并执行SQL执行语句输出执行结果;
在数据访问层拦截SQL执行结果的结果集设置值,判断当前设置的字段名是否为需要解密字段,若是则对数据进行解密,并输出解密结果;
加密方法为依次使用Java的AES类库和Base64对待加密字段进行转换得到加密后的字段。
6.根据权利要求5所述的基于数据库连接池的数据库加解密系统,其特征在于:待加密数据库包括,entityClassNamSet,需要加密的实体名,tableNameList,需要加密的数据库表名,tableColumList/Map,需要加密的数据库字段列表/表名映射,createTableSql,建表语句;初始化时,需要向tableColumMap中配置需要加密的实体和需要加密的字段数组,并分别初始化entityClassNameSet、tableNameList、tableColumList、createTableSql。
7.根据权利要求6所述的基于数据库连接池的数据库加解密系统,其特征在于:所述加密操作包括对所述SQL执行语句进行嵌套外围加密函数。
8.根据权利要求7所述的基于数据库连接池的数据库加解密系统,其特征在于:解密方法为对待解密字符串分别使用Base64和Java的加解密类库SecretKeySpec的对待解密字段进行AES解密得到解密后的字段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910236052.1A CN109960942B (zh) | 2019-03-27 | 2019-03-27 | 基于数据库连接池的数据库数据加解密方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910236052.1A CN109960942B (zh) | 2019-03-27 | 2019-03-27 | 基于数据库连接池的数据库数据加解密方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109960942A CN109960942A (zh) | 2019-07-02 |
CN109960942B true CN109960942B (zh) | 2021-04-27 |
Family
ID=67025078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910236052.1A Active CN109960942B (zh) | 2019-03-27 | 2019-03-27 | 基于数据库连接池的数据库数据加解密方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109960942B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111310221B (zh) * | 2020-03-26 | 2023-01-03 | 北京百度网讯科技有限公司 | 持久层数据的加解密方法、装置、设备及存储介质 |
CN111552698B (zh) * | 2020-04-21 | 2023-06-06 | 重庆富民银行股份有限公司 | 一种解决环境差异的sql版本控制系统及方法 |
CN111563266B (zh) * | 2020-05-06 | 2023-06-02 | 许继集团有限公司 | 电力系统数据操作程序加密方法及装置、解密方法及装置 |
CN112148748A (zh) * | 2020-09-16 | 2020-12-29 | 上海中通吉网络技术有限公司 | Sql字段别名的自动提示方法、装置和设备 |
CN113139017A (zh) * | 2021-04-23 | 2021-07-20 | 武汉优品楚鼎科技有限公司 | 一种数据同步方法、装置、电子设备及存储介质 |
CN115374464B (zh) * | 2022-10-24 | 2023-01-31 | 闪捷信息科技有限公司 | 基于双列处理的列加解密方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855448A (zh) * | 2012-08-10 | 2013-01-02 | 深圳市黎明网络系统有限公司 | 一种字段级数据库加密装置 |
CN103392178A (zh) * | 2011-11-11 | 2013-11-13 | 日本电气株式会社 | 数据库加密系统、方法和程序 |
CN106934298A (zh) * | 2017-03-06 | 2017-07-07 | 戴林 | 一种通用数据库透明加密系统 |
-
2019
- 2019-03-27 CN CN201910236052.1A patent/CN109960942B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103392178A (zh) * | 2011-11-11 | 2013-11-13 | 日本电气株式会社 | 数据库加密系统、方法和程序 |
CN102855448A (zh) * | 2012-08-10 | 2013-01-02 | 深圳市黎明网络系统有限公司 | 一种字段级数据库加密装置 |
CN106934298A (zh) * | 2017-03-06 | 2017-07-07 | 戴林 | 一种通用数据库透明加密系统 |
Non-Patent Citations (1)
Title |
---|
基于表字段的数据库加密服务器的设计与实现;孙萍萍;《计算机与现代化》;20091231(第11期);正文第6-15页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109960942A (zh) | 2019-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109960942B (zh) | 基于数据库连接池的数据库数据加解密方法及其系统 | |
US7617254B2 (en) | Method and mechanism for relational access of recovery logs in a database system | |
CN107861728B (zh) | 用于传统程序语言向现代程序语言转换的方法及其系统 | |
CN106062751B (zh) | 对与数据类型有关的数据剖析操作的管理 | |
Yao et al. | FD/spl I. bar/Mine: discovering functional dependencies in a database using equivalences | |
US7809694B2 (en) | Analysis of performance data from a relational database system for applications using stored procedures or SQL | |
US10191943B2 (en) | Decorrelation of user-defined function invocations in queries | |
US6877000B2 (en) | Tool for converting SQL queries into portable ODBC | |
US7831614B2 (en) | System and method for generating SQL using templates | |
CN112860727B (zh) | 基于大数据查询引擎的数据查询方法、装置、设备及介质 | |
US20200117745A1 (en) | Dynamic data movement using application relationships with encryption keys in different environments | |
CN109710220B (zh) | 关系型数据库查询方法、装置、设备及存储介质 | |
US20180365291A1 (en) | Optimizations for a behavior analysis engine | |
KR102099069B1 (ko) | 하이브리드 erd 관리 시스템 및 그 방법 | |
US11354313B2 (en) | Transforming a user-defined table function to a derived table in a database management system | |
Willmor et al. | Program slicing in the presence of database state | |
EP3293645B1 (en) | Iterative evaluation of data through simd processor registers | |
CN112579604A (zh) | 测试系统的造数方法、装置、设备及存储介质 | |
Khurana et al. | Opaque Query Extraction | |
US20210349910A1 (en) | Systems and methods for spark lineage data capture | |
Samreen et al. | VOLCANO: Detecting Vulnerabilities of Ethereum Smart Contracts Using Code Clone Analysis | |
ALI et al. | FAST WAY TO RETRIEVE DATA FROM SQL DATABASE USING DAPPER COMPARE TO LINQ ENTITY FRAMEWORK | |
CN115333821A (zh) | 基于数据库的数据处理方法、装置、设备及存储介质 | |
Chen et al. | Research on Static Reverse Analysis Technology for Security Detection of Power Industrial Control Software | |
CN114116764A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |