Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
matrix
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
mall
arch
matrix
Commits
4cf0013f
Commit
4cf0013f
authored
Sep 02, 2021
by
郑冰晶
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
数据库加密组件
parent
b554ed75
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
83 additions
and
61 deletions
+83
-61
MySqlSecurityParameterVisitor.java
matrix-datasource/matrix-datasource-security/matrix-datasource-security-druid/src/main/java/com/secoo/mall/datasource/security/visitor/MySqlSecurityParameterVisitor.java
+83
-61
No files found.
matrix-datasource/matrix-datasource-security/matrix-datasource-security-druid/src/main/java/com/secoo/mall/datasource/security/visitor/MySqlSecurityParameterVisitor.java
View file @
4cf0013f
...
@@ -98,90 +98,112 @@ public class MySqlSecurityParameterVisitor extends MySqlSchemaStatVisitor {
...
@@ -98,90 +98,112 @@ public class MySqlSecurityParameterVisitor extends MySqlSchemaStatVisitor {
return
true
;
return
true
;
}
}
this
.
encryptColumnParameters
.
add
(
new
Parameter
(
column
.
getTableName
(),
column
.
getColumnAlias
(),
column
.
getColumnName
(),
x
.
getIndex
(),
x
.
getName
(),
columnRule
));
this
.
encryptColumnParameters
.
add
(
new
Parameter
(
column
,
x
.
getName
(),
x
.
getIndex
(),
columnRule
,
null
));
return
true
;
return
true
;
}
}
public
boolean
visit
(
SQLInsertStatement
x
)
{
public
boolean
visit
(
MySqlInsertStatement
x
)
{
String
tableName
=
x
.
getTableName
().
getSimpleName
();
if
(
repository
!=
null
&&
x
.
getParent
()
==
null
)
{
repository
.
resolve
(
x
);
}
accept
(
x
.
getColumns
());
accept
(
x
.
getValuesList
());
accept
(
x
.
getQuery
());
accept
(
x
.
getDuplicateKeyUpdate
());
List
<
SQLExpr
>
columns
=
x
.
getColumns
();
Map
<
Integer
,
Column
>
columnMap
=
new
HashMap
<>();
// 插入sql不能省略列名
// 插入sql不能省略列名
if
(!
columns
.
isEmpty
()){
List
<
SQLExpr
>
columns
=
x
.
getColumns
();
for
(
int
i
=
0
;
i
<
columns
.
size
();
i
++){
if
(
columns
.
isEmpty
()){
SQLExpr
columnSQLExpr
=
columns
.
get
(
i
);
return
true
;
String
columnName
=
null
;
}
if
(
columnSQLExpr
instanceof
SQLIdentifierExpr
){
SQLIdentifierExpr
columnSQLIdentifierExpr
=
(
SQLIdentifierExpr
)
columnSQLExpr
;
columnName
=
columnSQLIdentifierExpr
.
getName
();
}
else
if
(
columnSQLExpr
instanceof
SQLPropertyExpr
){
SQLPropertyExpr
columnSQLPropertyExpr
=
(
SQLPropertyExpr
)
columnSQLExpr
;
columnName
=
columnSQLPropertyExpr
.
getName
();
}
Column
column
=
new
Column
(
tableName
,
""
,
columnName
);
String
tableName
=
x
.
getTableName
().
getSimpleName
();
columnMap
.
put
(
i
,
column
);
// columns
Map
<
Integer
,
Column
>
columnMap
=
new
HashMap
<>();
for
(
int
i
=
0
;
i
<
columns
.
size
();
i
++){
SQLExpr
columnSQLExpr
=
columns
.
get
(
i
);
String
columnName
=
null
;
if
(
columnSQLExpr
instanceof
SQLIdentifierExpr
){
SQLIdentifierExpr
columnSQLIdentifierExpr
=
(
SQLIdentifierExpr
)
columnSQLExpr
;
columnName
=
columnSQLIdentifierExpr
.
getName
();
}
else
if
(
columnSQLExpr
instanceof
SQLPropertyExpr
){
SQLPropertyExpr
columnSQLPropertyExpr
=
(
SQLPropertyExpr
)
columnSQLExpr
;
columnName
=
columnSQLPropertyExpr
.
getName
();
}
}
List
<
MySqlInsertStatement
.
ValuesClause
>
valuesClauses
=
x
.
getValuesList
();
Column
column
=
new
Column
(
tableName
,
""
,
columnName
,
""
,
null
);
for
(
SQLInsertStatement
.
ValuesClause
valuesClause:
valuesClauses
){
columnMap
.
put
(
i
,
column
);
List
<
SQLExpr
>
values
=
valuesClause
.
getValues
();
}
for
(
int
columnIndex
=
0
;
columnIndex
<
values
.
size
();
columnIndex
++){
SQLExpr
valueSQLExpr
=
values
.
get
(
columnIndex
);
if
(!(
valueSQLExpr
instanceof
SQLVariantRefExpr
))
{
// ?
continue
;
}
SQLVariantRefExpr
variantRefExpr
=
(
SQLVariantRefExpr
)
valueSQLExpr
;
if
(!
Token
.
QUES
.
name
.
equals
(
variantRefExpr
.
getName
())){
continue
;
}
Column
column
=
columnMap
.
get
(
columnIndex
);
// values
if
(
column
==
null
){
List
<
MySqlInsertStatement
.
ValuesClause
>
valuesClauses
=
x
.
getValuesList
();
continue
;
for
(
SQLInsertStatement
.
ValuesClause
valuesClause:
valuesClauses
){
}
List
<
SQLExpr
>
values
=
valuesClause
.
getValues
();
for
(
int
columnIndex
=
0
;
columnIndex
<
values
.
size
();
columnIndex
++){
SQLExpr
valueSQLExpr
=
values
.
get
(
columnIndex
);
if
(!(
valueSQLExpr
instanceof
SQLVariantRefExpr
))
{
// ?
continue
;
}
SQLVariantRefExpr
variantRefExpr
=
(
SQLVariantRefExpr
)
valueSQLExpr
;
if
(!
Token
.
QUES
.
name
.
equals
(
variantRefExpr
.
getName
())){
continue
;
}
ColumnRule
columnRule
=
this
.
getColumnRule
(
column
.
getTableName
(),
column
.
getColumnName
());
Column
column
=
columnMap
.
get
(
columnIndex
);
if
(
columnRule
==
null
){
if
(
column
==
null
){
return
true
;
continue
;
}
}
Parameter
parameter
=
new
Parameter
(
column
.
getTableName
(),
column
.
getColumnAlias
(),
column
.
getColumnName
(),
variantRefExpr
.
getIndex
(),
variantRefExpr
.
getName
(),
columnRule
);
this
.
encryptColumnParameters
.
add
(
parameter
);
ColumnRule
columnRule
=
this
.
getColumnRule
(
column
.
getTableName
(),
column
.
getColumnName
());
if
(
columnRule
==
null
){
return
true
;
}
}
Parameter
parameter
=
new
Parameter
(
column
,
variantRefExpr
.
getName
(),
variantRefExpr
.
getIndex
(),
columnRule
,
null
);
this
.
encryptColumnParameters
.
add
(
parameter
);
}
}
}
}
return
true
;
// duplicateKeyUpdate
}
List
<
SQLExpr
>
duplicateKeyUpdate
=
x
.
getDuplicateKeyUpdate
();
for
(
int
i
=
0
;
i
<
duplicateKeyUpdate
.
size
();
i
++){
SQLExpr
sqlExpr
=
duplicateKeyUpdate
.
get
(
i
);
if
(!(
sqlExpr
instanceof
SQLBinaryOpExpr
)){
sqlExpr
.
accept
(
this
);
continue
;
}
SQLBinaryOpExpr
sqlBinaryOpExpr
=
(
SQLBinaryOpExpr
)
sqlExpr
;
public
void
endVisit
(
SQLInsertStatement
x
)
{
SQLExpr
left
=
sqlBinaryOpExpr
.
getLeft
();
// TODO 根据待增加的明文参数信息,增加明文列
SQLExpr
right
=
sqlBinaryOpExpr
.
getRight
();
if
(!(
right
instanceof
SQLVariantRefExpr
))
{
// ?
continue
;
}
SQLVariantRefExpr
variantRefExpr
=
(
SQLVariantRefExpr
)
right
;
if
(!
Token
.
QUES
.
name
.
equals
(
variantRefExpr
.
getName
())){
continue
;
}
}
Column
column
=
this
.
getMySqlColumn
(
left
);
if
(
column
==
null
){
continue
;
}
public
boolean
visit
(
SQLSelectItem
x
)
{
ColumnRule
columnRule
=
this
.
getColumnRule
(
column
.
getTableName
(),
column
.
getColumnName
());
SQLExpr
sqlExpr
=
x
.
getExpr
();
if
(
columnRule
==
null
){
return
tr
ue
;
contin
ue
;
}
}
this
.
encryptColumnParameters
.
add
(
new
Parameter
(
column
,
variantRefExpr
.
getName
(),
variantRefExpr
.
getIndex
(),
columnRule
,
null
));
}
public
boolean
visit
(
SQLUpdateSetItem
x
)
{
// TODO 如果是逻辑列,替换为加密列,修改加密参数;如果有明文列,同时记录增加的明文参数信息
return
true
;
return
true
;
}
}
/**
/**
* 增加明文列
* @param x
*/
public
void
endVisit
(
SQLUpdateStatement
x
)
{
// TODO 根据待增加的明文参数信息,增加明文列
}
/**
* 加密规则
* 加密规则
* @param tableName
* @param tableName
* @param columnName
* @param columnName
...
@@ -261,7 +283,7 @@ public class MySqlSecurityParameterVisitor extends MySqlSchemaStatVisitor {
...
@@ -261,7 +283,7 @@ public class MySqlSecurityParameterVisitor extends MySqlSchemaStatVisitor {
return
null
;
return
null
;
}
}
return
new
Column
(
tableName
.
toString
(),
""
,
columnName
);
return
new
Column
(
tableName
,
""
,
columnName
,
""
,
null
);
}
}
private
SQLExpr
unwrapExpr
(
SQLExpr
expr
)
{
private
SQLExpr
unwrapExpr
(
SQLExpr
expr
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment