This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 076269fd4be support assistEncryptor for EncryptDistSQLStatement
(#18179)
076269fd4be is described below
commit 076269fd4be2ab52f7d04b21dce3a1de9ab47131
Author: cheese8 <[email protected]>
AuthorDate: Thu Jun 9 16:12:29 2022 +0800
support assistEncryptor for EncryptDistSQLStatement (#18179)
support assistEncryptor for EncryptDistSQLStatement
---
.../converter/EncryptRuleStatementConverter.java | 20 +++++++++++++++-----
.../converter/EncryptRuleStatementConverterTest.java | 3 ++-
.../update/AlterEncryptRuleStatementUpdaterTest.java | 6 ++++--
.../CreateEncryptRuleStatementUpdaterTest.java | 6 ++++--
.../segment/distsql/rdl/EncryptColumnAssert.java | 1 +
.../impl/distsql/rdl/ExpectedEncryptColumn.java | 5 ++++-
.../src/main/resources/case/rdl/alter.xml | 1 +
.../src/main/resources/case/rdl/create.xml | 1 +
.../src/main/resources/sql/supported/rdl/alter.xml | 2 +-
.../src/main/resources/sql/supported/rdl/create.xml | 2 +-
10 files changed, 34 insertions(+), 13 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
index 18402b74bf0..00ad5f7fd72 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
@@ -28,7 +28,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
-import java.util.stream.Collectors;
/**
* Encrypt rule statement converter.
@@ -59,22 +58,33 @@ public final class EncryptRuleStatementConverter {
return new EncryptTableRuleConfiguration(ruleSegment.getTableName(),
columns, ruleSegment.getQueryWithCipherColumn());
}
- // FIXME: support assistedEncryptorName on EncryptColumnSegment later
private static EncryptColumnRuleConfiguration
createEncryptColumnRuleConfiguration(final String tableName, final
EncryptColumnSegment columnSegment) {
return new EncryptColumnRuleConfiguration(columnSegment.getName(),
columnSegment.getCipherColumn(), columnSegment.getAssistedQueryColumn(),
- columnSegment.getPlainColumn(), getEncryptorName(tableName,
columnSegment.getName()), "", null);
+ columnSegment.getPlainColumn(), getEncryptorName(tableName,
columnSegment.getName()), getAssistedQueryEncryptorName(tableName,
columnSegment.getName()), null);
}
private static Map<String, ShardingSphereAlgorithmConfiguration>
createEncryptorConfigurations(final EncryptRuleSegment ruleSegment) {
- return ruleSegment.getColumns().stream().collect(Collectors
- .toMap(each -> getEncryptorName(ruleSegment.getTableName(),
each.getName()), EncryptRuleStatementConverter::createEncryptorConfiguration));
+ Map<String, ShardingSphereAlgorithmConfiguration> result = new
HashMap<>();
+ for (EncryptColumnSegment each : ruleSegment.getColumns()) {
+ result.put(getEncryptorName(ruleSegment.getTableName(),
each.getName()), createEncryptorConfiguration(each));
+
result.put(getAssistedQueryEncryptorName(ruleSegment.getTableName(),
each.getName()), createAssistedQueryEncryptorConfiguration(each));
+ }
+ return result;
}
private static ShardingSphereAlgorithmConfiguration
createEncryptorConfiguration(final EncryptColumnSegment columnSegment) {
return new
ShardingSphereAlgorithmConfiguration(columnSegment.getEncryptor().getName(),
columnSegment.getEncryptor().getProps());
}
+ private static ShardingSphereAlgorithmConfiguration
createAssistedQueryEncryptorConfiguration(final EncryptColumnSegment
columnSegment) {
+ return new
ShardingSphereAlgorithmConfiguration(columnSegment.getAssistedQueryEncryptor().getName(),
columnSegment.getAssistedQueryEncryptor().getProps());
+ }
+
private static String getEncryptorName(final String tableName, final
String columnName) {
return String.format("%s_%s", tableName, columnName);
}
+
+ private static String getAssistedQueryEncryptorName(final String
tableName, final String columnName) {
+ return String.format("assist_%s_%s", tableName, columnName);
+ }
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
index d840edb6577..792b735dd62 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
@@ -44,7 +44,8 @@ public final class EncryptRuleStatementConverterTest {
}
private Collection<EncryptColumnSegment> createColumns() {
- return Collections.singleton(new EncryptColumnSegment("user_id",
"user_cipher", "user_plain", "assisted_column", new AlgorithmSegment("MD5",
createProperties())));
+ return Collections.singleton(new EncryptColumnSegment("user_id",
"user_cipher", "user_plain", "assisted_column",
+ new AlgorithmSegment("MD5", createProperties()), new
AlgorithmSegment("MD5", createProperties())));
}
private Properties createProperties() {
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
index 387c3054132..d341964d2cc 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
@@ -64,14 +64,16 @@ public final class AlterEncryptRuleStatementUpdaterTest {
@Test(expected = InvalidRuleConfigurationException.class)
public void assertCheckSQLStatementWithIncompleteDataType() throws
DistSQLException {
EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
- "int varchar(10)", null, null, null, new
AlgorithmSegment("test", new Properties()));
+ "int varchar(10)", null, null, null, new
AlgorithmSegment("test", new Properties()),
+ new AlgorithmSegment("test", new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
AlterEncryptRuleStatement statement = new
AlterEncryptRuleStatement(Collections.singleton(ruleSegment));
updater.checkSQLStatement(database, statement,
createCurrentRuleConfiguration());
}
private AlterEncryptRuleStatement createSQLStatement(final String
encryptorName) {
- EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
new AlgorithmSegment(encryptorName, new Properties()));
+ EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
+ new AlgorithmSegment(encryptorName, new Properties()), new
AlgorithmSegment("test", new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
return new
AlterEncryptRuleStatement(Collections.singleton(ruleSegment));
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
index b732a1d108c..ed352db2300 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
@@ -58,14 +58,16 @@ public final class CreateEncryptRuleStatementUpdaterTest {
@Test(expected = InvalidRuleConfigurationException.class)
public void assertCheckSQLStatementWithIncompleteDataType() throws
DistSQLException {
EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
- "int varchar(10)", null, null, null, new
AlgorithmSegment("test", new Properties()));
+ "int varchar(10)", null, null, null, new
AlgorithmSegment("test", new Properties()),
+ new AlgorithmSegment("test", new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
CreateEncryptRuleStatement statement = new
CreateEncryptRuleStatement(Collections.singleton(ruleSegment));
updater.checkSQLStatement(database, statement, null);
}
private CreateEncryptRuleStatement createSQLStatement(final String
encryptorName) {
- EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
new AlgorithmSegment(encryptorName, new Properties()));
+ EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
+ new AlgorithmSegment(encryptorName, new Properties()), new
AlgorithmSegment(encryptorName, new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
return new
CreateEncryptRuleStatement(Collections.singleton(ruleSegment));
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/rdl/EncryptColumnAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/rdl/EncryptColumnAssert.java
index dc6ea026f21..7c36247b522 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/rdl/EncryptColumnAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/rdl/EncryptColumnAssert.java
@@ -52,6 +52,7 @@ public final class EncryptColumnAssert {
assertThat(assertContext.getText(String.format("`%s`'s assertion
error", actual.getClass().getSimpleName())), actual.getCipherColumn(),
is(expected.getCipherColumn()));
assertThat(assertContext.getText(String.format("`%s`'s assertion
error", actual.getClass().getSimpleName())), actual.getAssistedQueryColumn(),
is(expected.getAssistedQueryColumn()));
AlgorithmAssert.assertIs(assertContext, actual.getEncryptor(),
expected.getEncryptor());
+ AlgorithmAssert.assertIs(assertContext,
actual.getAssistedQueryEncryptor(), expected.getAssistedQueryEncryptor());
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
index 7197172adf1..f15bcfb4257 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
@@ -41,6 +41,9 @@ public final class ExpectedEncryptColumn extends
AbstractExpectedIdentifierSQLSe
@XmlAttribute(name = "assisted-query-column")
private String assistedQueryColumn;
- @XmlElement
+ @XmlElement(name = "encryptor")
private ExpectedAlgorithm encryptor;
+
+ @XmlElement(name = "assisted-query-encryptor")
+ private ExpectedAlgorithm assistedQueryEncryptor;
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
index d1a9c9d34ef..e8b9e3a3195 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/alter.xml
@@ -206,6 +206,7 @@
<property key="aes-key-value" value="123456abc" />
</properties>
</encryptor>
+ <assisted-query-encryptor algorithm-name="MD5" />
</column>
<column name="order_id" cipher-column="order_cipher">
<encryptor algorithm-name="MD5" />
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
index 7d8fd88bacf..7a8eab7b2ba 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
@@ -325,6 +325,7 @@
<property key="aes-key-value" value="123456abc"/>
</properties>
</encryptor>
+ <assisted-query-encryptor algorithm-name="MD5" />
</column>
<column name="order_id" cipher-column="order_cipher">
<encryptor algorithm-name="MD5"/>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
index b7e846f73fe..b0fdec5b63d 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
@@ -36,7 +36,7 @@
<distsql-case id="alter-database-discovery-heartbeat" value="ALTER
DB_DISCOVERY HEARTBEAT mgr_heartbeat(PROPERTIES('keepAliveCron'='0/5 * * * *
?'))" />
<distsql-case id="alter-database-discovery-type" value="ALTER DB_DISCOVERY
TYPE
primary_replica_ds_mgr(TYPE(NAME=mgr,PROPERTIES('groupName'='92504d5b-6dec'))),primary_replica_ds_mgr_2(TYPE(NAME=mgr))"
/>
<distsql-case id="alter-encrypt-rule" value="ALTER ENCRYPT RULE t_encrypt
(RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
- <distsql-case id="alter-encrypt-rule-with-assisted-query-column"
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id,
CIPHER =order_cipher,TYPE(NAME=MD5))))" />
+ <distsql-case id="alter-encrypt-rule-with-assisted-query-column"
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME=MD5)),
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
<distsql-case id="alter-encrypt-rule-with-query-with-cipher-column"
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER
=order_cipher,TYPE(NAME=MD5))), QUERY_WITH_CIPHER_COLUMN=false)" />
<distsql-case id="alter-shadow-algorithm" value="ALTER SHADOW ALGORITHM
(simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES('shadow'='true',
'foo'='bar')))" />
<distsql-case id="alter-shadow-rule" value="ALTER SHADOW RULE
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME=REGEX_MATCH,PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME=SIMPLE_HINT,PROPERTIES('shadow'='true',foo='bar')))))"
/>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
index 31667cf78b8..bd978169477 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
@@ -37,7 +37,7 @@
<distsql-case id="create-database-discovery-type" value="CREATE
DB_DISCOVERY TYPE
primary_replica_ds_mgr(TYPE(NAME=mgr,PROPERTIES('groupName'='92504d5b-6dec'))),primary_replica_ds_mgr_2(TYPE(NAME=mgr))"
/>
<distsql-case id="create-database-discovery-heartbeat" value="CREATE
DB_DISCOVERY HEARTBEAT mgr_heartbeat(PROPERTIES('keepAliveCron'='0/5 * * * *
?'))" />
<distsql-case id="create-encrypt-rule" value="CREATE ENCRYPT RULE
t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
- <distsql-case id="create-encrypt-rule-with-assisted-query-column"
value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id,
CIPHER =order_cipher,TYPE(NAME=MD5))))" />
+ <distsql-case id="create-encrypt-rule-with-assisted-query-column"
value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1,
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME=MD5)),
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
<distsql-case id="create-shadow-rule" value="CREATE SHADOW RULE
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME=REGEX_MATCH,PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME=SIMPLE_HINT,PROPERTIES('shadow'='true',foo='bar')))))"
/>
<distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT
SHADOW ALGORITHM NAME = simple_hint_algorithm ;" />
<distsql-case id="create-sharding-algorithm" value="CREATE SHARDING
ALGORITHM algorithm_name(TYPE(NAME=hash_mod,PROPERTIES('algorithm-expression' =
't_order_${order_id % 2}')))" />