You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2021/08/27 15:06:29 UTC

[shardingsphere] branch master updated: Refactor SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT statement with shardingsphere-integration-test (#12021)

This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 27628b0  Refactor SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT statement with shardingsphere-integration-test (#12021)
27628b0 is described below

commit 27628b0e16c4392fbafa785de60a324f55af83a2
Author: liguoping <xd...@163.com>
AuthorDate: Fri Aug 27 23:06:00 2021 +0800

    Refactor SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT statement with shardingsphere-integration-test (#12021)
    
    * Refactor SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT statement with shardingsphere-integration-test
    
    * docker
    
    * remove SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT
    
    * use aes_encryptor instead of type test
    
    * remove TestEncryptAlgorithm
    
    * docker aes_encryptor instead of type test
---
 .../statement/FederatePrepareStatementTest.java    | 31 ------------------
 .../jdbc/core/statement/FederateStatementTest.java | 37 ----------------------
 ...oss_single_and_sharding_tables_with_encrypt.xml | 28 ++++++++++++++++
 ...le_and_sharding_tables_with_encrypt_user_id.xml | 26 +++++++++++++++
 .../cases/dql/dql-integration-test-cases.xml       | 12 +++++++
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 17 ++++++++++
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 17 ++++++++++
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 17 ++++++++++
 .../dataset.xml                                    | 30 ++++++++++++++++++
 .../init-sql/h2/init-encrypt_read_ds_1.sql         |  6 ++++
 .../init-sql/h2/init-encrypt_write_ds_1.sql        |  6 ++++
 .../init-sql/mysql/init.sql                        |  6 ++++
 .../init-sql/oracle/init.sql                       |  6 ++++
 .../init-sql/postgresql/init.sql                   | 13 ++++++++
 .../init-sql/sqlserver/init.sql                    |  6 ++++
 .../rules.yaml                                     | 17 ++++++++++
 16 files changed, 207 insertions(+), 68 deletions(-)

diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
index 4a1a74a..48c9070 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederatePrepareStatementTest.java
@@ -46,10 +46,6 @@ public final class FederatePrepareStatementTest extends AbstractShardingSphereDa
             "select t_user_encrypt_federate.user_id, t_user_encrypt_federate.pwd, t_user_info.information from t_user_encrypt_federate, t_user_info "
                     + "where t_user_encrypt_federate.user_id = t_user_info.user_id and t_user_encrypt_federate.user_id > ? ";
 
-    private static final String SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT =
-            "select t_user_encrypt_federate_sharding.user_id, t_user_encrypt_federate_sharding.pwd, t_user_info.information from t_user_encrypt_federate_sharding, t_user_info "
-            + "where t_user_encrypt_federate_sharding.user_id = t_user_info.user_id and t_user_encrypt_federate_sharding.user_id > ? ";
-
     @Test
     public void assertQueryWithFederateInSingleAndShardingTableWithAliasByExecuteQuery() throws SQLException {
         assertQueryWithFederateInSingleAndShardingTableWithAlias(true);
@@ -136,32 +132,5 @@ public final class FederatePrepareStatementTest extends AbstractShardingSphereDa
         assertThat(resultSet.getString(3), is("description3"));
         assertFalse(resultSet.next());
     }
-    
-    @Test
-    public void assertQueryWithFederateInSingleAndShardingTablesWithEncryptRuleByExecuteQuery() throws SQLException {
-        assertQueryWithFederateInSingleAndShardingTablesWithEncryptRule(true);   
-    }
-    
-    @Test
-    public void assertQueryWithFederateInSingleAndShardingTablesWithEncryptRuleByExecute() throws SQLException {
-        assertQueryWithFederateInSingleAndShardingTablesWithEncryptRule(false);
-    }
-    
-    private void assertQueryWithFederateInSingleAndShardingTablesWithEncryptRule(final boolean executeQuery) throws SQLException {
-        ShardingSpherePreparedStatement preparedStatement = (ShardingSpherePreparedStatement) getShardingSphereDataSource()
-                .getConnection().prepareStatement(SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT);
-        preparedStatement.setInt(1, 1);
-        ResultSet resultSet = getResultSet(preparedStatement, executeQuery);
-        assertNotNull(resultSet);
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(2));
-        assertThat(resultSet.getString(2), is("decryptValue"));
-        assertThat(resultSet.getString(3), is("description2"));
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(3));
-        assertThat(resultSet.getString(2), is("decryptValue"));
-        assertThat(resultSet.getString(3), is("description3"));
-        assertFalse(resultSet.next());
-    }
 
 }
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
index 905f98a..f6e8573 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/FederateStatementTest.java
@@ -49,10 +49,6 @@ public final class FederateStatementTest extends AbstractShardingSphereDataSourc
             "select t_user_encrypt_federate.user_id, t_user_encrypt_federate.pwd, t_user_info.information from t_user_encrypt_federate, t_user_info "
             + "where t_user_encrypt_federate.user_id = t_user_info.user_id ";
 
-    private static final String SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT =
-            "select t_user_encrypt_federate_sharding.user_id, t_user_encrypt_federate_sharding.pwd, t_user_info.information from t_user_encrypt_federate_sharding, t_user_info "
-                    + "where t_user_encrypt_federate_sharding.user_id = t_user_info.user_id ";
-
     @Test
     public void assertQueryWithFederateInSingleAndShardingTableWithAliasByExecuteQuery() throws SQLException {
         assertQueryWithFederateInSingleAndShardingTableWithAlias(true);
@@ -168,38 +164,5 @@ public final class FederateStatementTest extends AbstractShardingSphereDataSourc
         assertThat(resultSet.getString(3), is("description3"));
         assertFalse(resultSet.next());
     }
-    
-    @Test
-    public void assertQueryWithFederateInSingleAndShardingTablesWithEncryptRuleByExecuteQuery() throws SQLException {
-        assertQueryWithFederateInSingleAndShardingTablesWithEncryptRule(true);
-    }
-    
-    @Test
-    public void assertQueryWithFederateInSingleAndShardingTablesWithEncryptRuleByExecute() throws SQLException {
-        assertQueryWithFederateInSingleAndShardingTablesWithEncryptRule(false);
-    }
-    
-    private void assertQueryWithFederateInSingleAndShardingTablesWithEncryptRule(final boolean executeQuery) throws SQLException {
-        ShardingSphereStatement statement = (ShardingSphereStatement) getShardingSphereDataSource().getConnection().createStatement();
-        ResultSet resultSet = getResultSet(statement, SELECT_SQL_BY_ID_ACROSS_SINGLE_AND_SHARDING_TABLES_WITH_ENCRYPT, executeQuery);
-        assertNotNull(resultSet);
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(0));
-        assertThat(resultSet.getString(2), is("decryptValue"));
-        assertThat(resultSet.getString(3), is("description0"));
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(1));
-        assertThat(resultSet.getString(2), is("decryptValue"));
-        assertThat(resultSet.getString(3), is("description1"));
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(2));
-        assertThat(resultSet.getString(2), is("decryptValue"));
-        assertThat(resultSet.getString(3), is("description2"));
-        assertTrue(resultSet.next());
-        assertThat(resultSet.getInt(1), is(3));
-        assertThat(resultSet.getString(2), is("decryptValue"));
-        assertThat(resultSet.getString(3), is("description3"));
-        assertFalse(resultSet.next());
-    }
 
 }
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_single_and_sharding_tables_with_encrypt.xml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_single_and_sharding_tables_with_encrypt.xml
new file mode 100644
index 0000000..61de370
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_single_and_sharding_tables_with_encrypt.xml
@@ -0,0 +1,28 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<dataset>
+    <metadata>
+        <column name="user_id"/>
+        <column name="pwd" />
+        <column name="information"/>
+    </metadata>
+    <row values="0, decryptValue, description0" />
+    <row values="2, decryptValue, description2" />
+    <row values="1, decryptValue, description1" />
+    <row values="3, decryptValue, description3" />
+</dataset>
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_single_and_sharding_tables_with_encrypt_user_id.xml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_single_and_sharding_tables_with_encryp [...]
new file mode 100644
index 0000000..8d730fb
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dataset/dbtbl_with_readwrite_splitting_and_encrypt/select_sql_by_id_across_single_and_sharding_tables_with_encrypt_user_id.xml
@@ -0,0 +1,26 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<dataset>
+    <metadata>
+        <column name="user_id"/>
+        <column name="pwd" />
+        <column name="information"/>
+    </metadata>
+    <row values="2, decryptValue, description2" />
+    <row values="3, decryptValue, description3" />
+</dataset>
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
index 23f1445..c845847 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
@@ -579,5 +579,17 @@
     <test-case sql="select o.order_id_sharding, i.order_id from t_order_federate_sharding o, t_order_item_federate_sharding i where o.order_id_sharding = i.item_id and i.order_id > ?" scenario-types="db,tbl,dbtbl_with_readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt">
         <assertion parameters="10000:int" expected-data-file="select_sql_by_id_across_two_sharding_tables.xml" />
     </test-case>
+
+    <test-case sql="select o.order_id_sharding, i.order_id from t_order_federate_sharding o, t_order_item_federate_sharding i where o.order_id_sharding = i.item_id and i.order_id > ?" scenario-types="db,tbl,dbtbl_with_readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt">
+        <assertion parameters="10000:int" expected-data-file="select_sql_by_id_across_two_sharding_tables.xml" />
+    </test-case>
+
+    <test-case sql="select t_user_encrypt_federate_sharding.user_id, t_user_encrypt_federate_sharding.pwd, t_user_info.information from t_user_encrypt_federate_sharding, t_user_info where t_user_encrypt_federate_sharding.user_id = t_user_info.user_id " scenario-types="dbtbl_with_readwrite_splitting_and_encrypt">
+        <assertion expected-data-file="select_sql_by_id_across_single_and_sharding_tables_with_encrypt.xml" />
+    </test-case>
+
+    <test-case sql="select t_user_encrypt_federate_sharding.user_id, t_user_encrypt_federate_sharding.pwd, t_user_info.information from t_user_encrypt_federate_sharding, t_user_info where t_user_encrypt_federate_sharding.user_id = t_user_info.user_id and t_user_encrypt_federate_sharding.user_id > ? " scenario-types="dbtbl_with_readwrite_splitting_and_encrypt">
+        <assertion parameters="1:int" expected-data-file="select_sql_by_id_across_single_and_sharding_tables_with_encrypt_user_id.xml" />
+    </test-case>
     
 </integration-test-cases>
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 284a4a5..56e7fd7 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/h2/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -250,6 +250,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_user_encrypt_federate_sharding:
+      actualDataNodes: pr_ds_1.t_user_encrypt_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: user_id
+          shardingAlgorithmName: table_inline_user_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -264,6 +270,11 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_federate_sharding_${order_id_sharding % 2}
+    table_inline_user_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_user_encrypt_federate_sharding_${user_id % 2}
+        allow-range-query-with-inline-sharding: true
 
   keyGenerators:
     constant:
@@ -344,3 +355,9 @@ rules:
           plainColumn: number_plain
           cipherColumn: number_cipher
           encryptorName: aes_encryptor
+    t_user_encrypt_federate_sharding:
+      columns:
+        pwd:
+          plainColumn: plain_pwd
+          cipherColumn: cipher_pwd
+          encryptorName: aes_encryptor
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 284a4a5..56e7fd7 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/mysql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -250,6 +250,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_user_encrypt_federate_sharding:
+      actualDataNodes: pr_ds_1.t_user_encrypt_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: user_id
+          shardingAlgorithmName: table_inline_user_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -264,6 +270,11 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_federate_sharding_${order_id_sharding % 2}
+    table_inline_user_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_user_encrypt_federate_sharding_${user_id % 2}
+        allow-range-query-with-inline-sharding: true
 
   keyGenerators:
     constant:
@@ -344,3 +355,9 @@ rules:
           plainColumn: number_plain
           cipherColumn: number_cipher
           encryptorName: aes_encryptor
+    t_user_encrypt_federate_sharding:
+      columns:
+        pwd:
+          plainColumn: plain_pwd
+          cipherColumn: cipher_pwd
+          encryptorName: aes_encryptor
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 81adb51..1d72ec2 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/docker/dbtbl_with_readwrite_splitting_and_encrypt/postgresql/proxy/conf/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -250,6 +250,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_user_encrypt_federate_sharding:
+      actualDataNodes: pr_ds_1.t_user_encrypt_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: user_id
+          shardingAlgorithmName: table_inline_user_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -264,6 +270,11 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_federate_sharding_${order_id_sharding % 2}
+    table_inline_user_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_user_encrypt_federate_sharding_${user_id % 2}
+        allow-range-query-with-inline-sharding: true
 
   keyGenerators:
     constant:
@@ -344,3 +355,9 @@ rules:
           plainColumn: number_plain
           cipherColumn: number_cipher
           encryptorName: aes_encryptor
+    t_user_encrypt_federate_sharding:
+      columns:
+        pwd:
+          plainColumn: plain_pwd
+          cipherColumn: cipher_pwd
+          encryptorName: aes_encryptor
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
index 7826495..d19a48d 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/dataset.xml
@@ -57,6 +57,16 @@
         <column name="user_id" type="numeric" />
         <column name="status" type="varchar" />
     </metadata>
+    <metadata data-nodes="encrypt_write_ds_1.t_user_encrypt_federate_sharding_${0..1},encrypt_read_ds_1.t_user_encrypt_federate_sharding_${0..1}">
+        <column name="user_id" type="numeric" />
+        <column name="plain_pwd" type="varchar" />
+        <column name="cipher_pwd" type="varchar" />
+        <column name="user_name" type="varchar" />
+    </metadata>
+    <metadata data-nodes="encrypt_write_ds_1.t_user_info,encrypt_read_ds_1.t_user_info">
+        <column name="user_id" type="numeric" />
+        <column name="information" type="varchar" />
+    </metadata>
     <row data-node="encrypt_write_ds_0.t_single_table" values="1, 0, init" />
     <row data-node="encrypt_write_ds_0.t_single_table" values="2, 11, init" />
     <row data-node="encrypt_write_ds_0.t_single_table" values="3, 22, init" />
@@ -275,6 +285,16 @@
     <row data-node="encrypt_write_ds_1.t_order_federate_sharding_0" values="1100, 10, init" />
     <row data-node="encrypt_write_ds_1.t_order_federate_sharding_1" values="1011, 11, init" />
     <row data-node="encrypt_write_ds_1.t_order_federate_sharding_1" values="1101, 11, init" />
+    <row data-node="encrypt_write_ds_1.t_user_encrypt_federate_sharding_0" values="0, plain passwordA, uqObdVp9XTGZ4Mnw0LolHg==, Rachel" />
+    <row data-node="encrypt_write_ds_1.t_user_encrypt_federate_sharding_1" values="1, plain passwordB, uqObdVp9XTGZ4Mnw0LolHg==, Monica" />
+    <row data-node="encrypt_write_ds_1.t_user_encrypt_federate_sharding_0" values="2, plain passwordC, uqObdVp9XTGZ4Mnw0LolHg==, Phoebe" />
+    <row data-node="encrypt_write_ds_1.t_user_encrypt_federate_sharding_1" values="3, plain passwordD, uqObdVp9XTGZ4Mnw0LolHg==, Ross" />
+    <row data-node="encrypt_write_ds_1.t_user_encrypt_federate_sharding_0" values="4, plain passwordE, uqObdVp9XTGZ4Mnw0LolHg==, Chandler" />
+    <row data-node="encrypt_write_ds_1.t_user_encrypt_federate_sharding_1" values="5, plain passwordF, uqObdVp9XTGZ4Mnw0LolHg==, Joey" />
+    <row data-node="encrypt_write_ds_1.t_user_info" values="0, description0" />
+    <row data-node="encrypt_write_ds_1.t_user_info" values="1, description1" />
+    <row data-node="encrypt_write_ds_1.t_user_info" values="2, description2" />
+    <row data-node="encrypt_write_ds_1.t_user_info" values="3, description3" />
     <row data-node="encrypt_read_ds_0.t_single_table" values="1, 0, init_read" />
     <row data-node="encrypt_read_ds_0.t_single_table" values="2, 11, init_read" />
     <row data-node="encrypt_read_ds_0.t_single_table" values="3, 22, init_read" />
@@ -493,4 +513,14 @@
     <row data-node="encrypt_read_ds_1.t_order_federate_sharding_0" values="1100, 10, init" />
     <row data-node="encrypt_read_ds_1.t_order_federate_sharding_1" values="1011, 11, init" />
     <row data-node="encrypt_read_ds_1.t_order_federate_sharding_1" values="1101, 11, init" />
+    <row data-node="encrypt_read_ds_1.t_user_encrypt_federate_sharding_0" values="0, plain passwordA, uqObdVp9XTGZ4Mnw0LolHg==, Rachel" />
+    <row data-node="encrypt_read_ds_1.t_user_encrypt_federate_sharding_1" values="1, plain passwordB, uqObdVp9XTGZ4Mnw0LolHg==, Monica" />
+    <row data-node="encrypt_read_ds_1.t_user_encrypt_federate_sharding_0" values="2, plain passwordC, uqObdVp9XTGZ4Mnw0LolHg==, Phoebe" />
+    <row data-node="encrypt_read_ds_1.t_user_encrypt_federate_sharding_1" values="3, plain passwordD, uqObdVp9XTGZ4Mnw0LolHg==, Ross" />
+    <row data-node="encrypt_read_ds_1.t_user_encrypt_federate_sharding_0" values="4, plain passwordE, uqObdVp9XTGZ4Mnw0LolHg==, Chandler" />
+    <row data-node="encrypt_read_ds_1.t_user_encrypt_federate_sharding_1" values="5, plain passwordF, uqObdVp9XTGZ4Mnw0LolHg==, Joey" />
+    <row data-node="encrypt_read_ds_1.t_user_info" values="0, description0" />
+    <row data-node="encrypt_read_ds_1.t_user_info" values="1, description1" />
+    <row data-node="encrypt_read_ds_1.t_user_info" values="2, description2" />
+    <row data-node="encrypt_read_ds_1.t_user_info" values="3, description3" />
 </dataset>
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
index f4ee788..3f27fe8 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_read_ds_1.sql
@@ -20,9 +20,15 @@ DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
 DROP TABLE IF EXISTS t_order_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_0;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_info;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
index f4ee788..3f27fe8 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/h2/init-encrypt_write_ds_1.sql
@@ -20,9 +20,15 @@ DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
 DROP TABLE IF EXISTS t_order_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_0;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_info;
 
 CREATE TABLE t_order_item_federate (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
index fe3bb61..d99fe94 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/mysql/init.sql
@@ -121,6 +121,9 @@ CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_0 (item_id INT NO
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE encrypt_write_ds_1.t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_write_ds_1.t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_write_ds_1.t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON encrypt_write_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_write_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_write_ds_1.t_user_2 (user_id);
@@ -438,6 +441,9 @@ CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE encrypt_read_ds_1.t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_read_ds_1.t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_read_ds_1.t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON encrypt_read_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_read_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_read_ds_1.t_user_2 (user_id);
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
index c933b96..8b84c93 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/oracle/init.sql
@@ -118,6 +118,9 @@ CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_0 (item_id INT NO
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE encrypt_write_ds_1.t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_write_ds_1.t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_write_ds_1.t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON encrypt_write_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_write_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_write_ds_1.t_user_2 (user_id);
@@ -435,6 +438,9 @@ CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE encrypt_read_ds_1.t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_read_ds_1.t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_read_ds_1.t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON encrypt_read_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_read_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_read_ds_1.t_user_2 (user_id);
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
index 422e380..a89a8e6 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/postgresql/init.sql
@@ -142,6 +142,9 @@ DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
 DROP TABLE IF EXISTS t_order_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_0;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_info;
 
 CREATE TABLE t_user_0 (user_id INT NOT NULL, address_id INT NOT NULL, pwd_plain VARCHAR(45) NULL, pwd_cipher VARCHAR(45) NULL, status VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE TABLE t_user_item_0 (item_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY (item_id));
@@ -168,6 +171,9 @@ CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id IN
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON t_user_2 (user_id);
@@ -696,6 +702,10 @@ DROP TABLE IF EXISTS t_order_item_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_item_federate_sharding_1;
 DROP TABLE IF EXISTS t_order_federate_sharding_0;
 DROP TABLE IF EXISTS t_order_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_0;
+DROP TABLE IF EXISTS t_user_encrypt_federate_sharding_1;
+DROP TABLE IF EXISTS t_user_info;
+
 
 CREATE TABLE t_user_0 (user_id INT NOT NULL, address_id INT NOT NULL, pwd_plain VARCHAR(45) NULL, pwd_cipher VARCHAR(45) NULL, status VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE TABLE t_user_item_0 (item_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, creation_date DATE, PRIMARY KEY (item_id));
@@ -722,6 +732,9 @@ CREATE TABLE t_order_item_federate_sharding_0 (item_id INT NOT NULL, order_id IN
 CREATE TABLE t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON t_user_2 (user_id);
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
index 838dee9..d9eecc8 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/init-sql/sqlserver/init.sql
@@ -118,6 +118,9 @@ CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_0 (item_id INT NO
 CREATE TABLE encrypt_write_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE encrypt_write_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE encrypt_write_ds_1.t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_write_ds_1.t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_write_ds_1.t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON encrypt_write_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_write_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_write_ds_1.t_user_2 (user_id);
@@ -435,6 +438,9 @@ CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_0 (item_id INT NOT
 CREATE TABLE encrypt_read_ds_1.t_order_item_federate_sharding_1 (item_id INT NOT NULL, order_id INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, remarks VARCHAR(45) NULL, PRIMARY KEY (item_id));
 CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_0 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
 CREATE TABLE encrypt_read_ds_1.t_order_federate_sharding_1 (order_id_sharding INT NOT NULL, user_id INT NOT NULL, status VARCHAR(45) NULL, PRIMARY KEY (order_id_sharding));
+CREATE TABLE encrypt_read_ds_1.t_user_encrypt_federate_sharding_0 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_read_ds_1.t_user_encrypt_federate_sharding_1 (user_id INT NOT NULL, plain_pwd VARCHAR(45) NULL, cipher_pwd VARCHAR(45) NULL, user_name VARCHAR(45) NULL, PRIMARY KEY (user_id));
+CREATE TABLE encrypt_read_ds_1.t_user_info (user_id INT NOT NULL,  information VARCHAR(45) NULL, PRIMARY KEY (user_id));
 CREATE INDEX user_index_t_user_0 ON encrypt_read_ds_1.t_user_0 (user_id);
 CREATE INDEX user_index_t_user_1 ON encrypt_read_ds_1.t_user_1 (user_id);
 CREATE INDEX user_index_t_user_2 ON encrypt_read_ds_1.t_user_2 (user_id);
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
index e137b0c..6f8e350 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
@@ -66,6 +66,12 @@ rules:
         standard:
           shardingColumn: order_id_sharding
           shardingAlgorithmName: table_inline_order_id
+    t_user_encrypt_federate_sharding:
+      actualDataNodes: pr_ds_1.t_user_encrypt_federate_sharding_${0..1}
+      tableStrategy:
+        standard:
+          shardingColumn: user_id
+          shardingAlgorithmName: table_inline_user_id
   bindingTables:
     - t_user,t_user_item,t_user_details
 
@@ -80,6 +86,11 @@ rules:
       type: INLINE
       props:
         algorithm-expression: t_order_federate_sharding_${order_id_sharding % 2}
+    table_inline_user_id:
+      type: INLINE
+      props:
+        algorithm-expression: t_user_encrypt_federate_sharding_${user_id % 2}
+        allow-range-query-with-inline-sharding: true
 
   keyGenerators:
     constant:
@@ -160,3 +171,9 @@ rules:
           plainColumn: number_plain
           cipherColumn: number_cipher
           encryptorName: aes_encryptor
+    t_user_encrypt_federate_sharding:
+      columns:
+        pwd:
+          plainColumn: plain_pwd
+          cipherColumn: cipher_pwd
+          encryptorName: aes_encryptor