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

wuweijie 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 c6c8eda  Remove AuthorityContext and refactor SQLCheckEngine (#10032)
c6c8eda is described below

commit c6c8eda9fdca8d6c9af332ee4382189528758a89
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Apr 10 23:01:34 2021 +0800

    Remove AuthorityContext and refactor SQLCheckEngine (#10032)
    
    * Remove AuthorityContext
    
    * Refactor SQLCheckEngine
---
 .../shardingsphere/authority/AuthorityContext.java | 53 ---------------------
 .../authority/checker/AuthorityChecker.java        | 13 +++---
 .../authority/rule/AuthorityRule.java              |  8 ++--
 .../authority/GovernanceAuthorityContext.java      |  4 +-
 .../shardingsphere/infra/check/SQLCheckEngine.java | 54 ++++++++++++++--------
 .../shardingsphere/infra/check/SQLChecker.java     |  6 ++-
 .../statement/ShardingSpherePreparedStatement.java |  4 +-
 .../core/statement/ShardingSphereStatement.java    |  2 +-
 .../text/TextProtocolBackendHandlerFactory.java    |  2 +-
 .../mysql/executor/ShowDatabasesExecutor.java      |  5 +-
 .../admin/mysql/executor/UseDatabaseExecutor.java  |  5 +-
 .../mysql/executor/ShowDatabasesExecutorTest.java  | 10 ----
 .../mysql/auth/MySQLAuthenticationHandler.java     |  4 +-
 .../admin/initdb/MySQLComInitDbExecutor.java       |  5 +-
 .../execute/MySQLComStmtExecuteExecutor.java       |  2 +-
 .../auth/PostgreSQLAuthenticationHandler.java      |  4 +-
 16 files changed, 71 insertions(+), 110 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/AuthorityContext.java
 
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/AuthorityContext.java
deleted file mode 100644
index d295ebb..0000000
--- 
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/AuthorityContext.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.authority;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.authority.spi.AuthorityProvideAlgorithm;
-
-/**
- * Authority context.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@Getter
-public final class AuthorityContext {
-    
-    private static final AuthorityContext INSTANCE = new AuthorityContext();
-    
-    private volatile AuthorityProvideAlgorithm provider;
-    
-    /**
-     * Get instance.
-     * 
-     * @return instance
-     */
-    public static AuthorityContext getInstance() {
-        return INSTANCE;
-    }
-    
-    /**
-     * Initial authority provide algorithm.
-     * 
-     * @param provider authority provide algorithm
-     */
-    public synchronized void init(final AuthorityProvideAlgorithm provider) {
-        this.provider = provider;
-    }
-}
diff --git 
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
 
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
index f940610..a5292fb 100644
--- 
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
+++ 
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
@@ -18,13 +18,12 @@
 package org.apache.shardingsphere.authority.checker;
 
 import org.apache.shardingsphere.authority.constant.AuthorityOrder;
+import org.apache.shardingsphere.authority.model.PrivilegeType;
+import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
 import org.apache.shardingsphere.authority.rule.AuthorityRule;
 import org.apache.shardingsphere.infra.check.SQLCheckResult;
 import org.apache.shardingsphere.infra.check.SQLChecker;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.authority.AuthorityContext;
-import org.apache.shardingsphere.authority.model.PrivilegeType;
-import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowDatabasesStatement;
@@ -39,19 +38,19 @@ import java.util.Optional;
 public final class AuthorityChecker implements SQLChecker<AuthorityRule> {
     
     @Override
-    public boolean check(final String schemaName, final Grantee grantee) {
+    public boolean check(final String schemaName, final Grantee grantee, final 
AuthorityRule authorityRule) {
         if (null == grantee) {
             return true;
         }
-        return 
AuthorityContext.getInstance().getProvider().findPrivileges(grantee).map(optional
 -> optional.hasPrivileges(schemaName)).orElse(false);
+        return 
authorityRule.getAuthorityProvider().findPrivileges(grantee).map(optional -> 
optional.hasPrivileges(schemaName)).orElse(false);
     }
     
     @Override
-    public SQLCheckResult check(final SQLStatement sqlStatement, final 
List<Object> parameters, final ShardingSphereMetaData metaData, final Grantee 
grantee) {
+    public SQLCheckResult check(final SQLStatement sqlStatement, final 
List<Object> parameters, final ShardingSphereMetaData metaData, final Grantee 
grantee, final AuthorityRule authorityRule) {
         if (null == grantee) {
             return new SQLCheckResult(true, "");
         }
-        Optional<ShardingSpherePrivileges> privileges = 
AuthorityContext.getInstance().getProvider().findPrivileges(grantee);
+        Optional<ShardingSpherePrivileges> privileges = 
authorityRule.getAuthorityProvider().findPrivileges(grantee);
         // TODO add error msg
         return privileges.map(optional -> new 
SQLCheckResult(optional.hasPrivileges(Collections.singletonList(getPrivilege(sqlStatement))),
 "")).orElseGet(() -> new SQLCheckResult(false, ""));
     }
diff --git 
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
 
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
index 49ff750..f5a59e6 100644
--- 
a/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
+++ 
b/shardingsphere-features/shardingsphere-authority/shardingsphere-authority-common/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.authority.rule;
 
 import lombok.Getter;
-import org.apache.shardingsphere.authority.AuthorityContext;
 import 
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
 import org.apache.shardingsphere.authority.spi.AuthorityProvideAlgorithm;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmFactory;
@@ -40,11 +39,10 @@ public final class AuthorityRule implements GlobalRule {
         ShardingSphereServiceLoader.register(AuthorityProvideAlgorithm.class);
     }
     
-    private final AuthorityProvideAlgorithm provider;
+    private final AuthorityProvideAlgorithm authorityProvider;
     
     public AuthorityRule(final AuthorityRuleConfiguration config, final 
Map<String, ShardingSphereMetaData> mataDataMap, final 
Collection<ShardingSphereUser> users) {
-        provider = 
ShardingSphereAlgorithmFactory.createAlgorithm(config.getProvider(), 
AuthorityProvideAlgorithm.class);
-        provider.init(mataDataMap, users);
-        AuthorityContext.getInstance().init(provider);
+        authorityProvider = 
ShardingSphereAlgorithmFactory.createAlgorithm(config.getProvider(), 
AuthorityProvideAlgorithm.class);
+        authorityProvider.init(mataDataMap, users);
     }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
index 2f949fd..93c370c 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/authority/GovernanceAuthorityContext.java
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.governance.context.authority;
 import com.google.common.base.Preconditions;
 import com.google.common.eventbus.Subscribe;
 import lombok.Setter;
-import org.apache.shardingsphere.authority.AuthorityContext;
 import org.apache.shardingsphere.authority.rule.AuthorityRule;
 import org.apache.shardingsphere.authority.spi.AuthorityProvideAlgorithm;
 import 
org.apache.shardingsphere.governance.core.event.model.authority.AuthorityChangedEvent;
@@ -52,8 +51,7 @@ public final class GovernanceAuthorityContext implements 
MetaDataAwareEventSubsc
     private void reloadAuthority(final Collection<ShardingSphereUser> users) {
         Optional<AuthorityRule> authorityRule = 
metaDataContexts.getGlobalRuleMetaData().getRules().stream().filter(each -> 
each instanceof AuthorityRule).findAny().map(each -> (AuthorityRule) each);
         Preconditions.checkState(authorityRule.isPresent());
-        AuthorityProvideAlgorithm provider = authorityRule.get().getProvider();
+        AuthorityProvideAlgorithm provider = 
authorityRule.get().getAuthorityProvider();
         provider.refresh(metaDataContexts.getMetaDataMap(), users);
-        AuthorityContext.getInstance().init(provider);
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLCheckEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLCheckEngine.java
index 0ad3d9c..2ed72c0 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLCheckEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLCheckEngine.java
@@ -20,12 +20,17 @@ package org.apache.shardingsphere.infra.check;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.infra.spi.ordered.OrderedSPIRegistry;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
+import java.util.Collection;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.Map.Entry;
 
 /**
  * SQL check engine.
@@ -38,37 +43,48 @@ public final class SQLCheckEngine {
     }
     
     /**
-     * Check SQL.
-     * 
-     * @param sqlStatement SQL statement
-     * @param parameters SQL parameters
+     * Check schema.
+     *
+     * @param schemaName schema name
      * @param metaData meta data
+     * @param globalRuleMetaData global rule meta data
      * @param grantee grantee
+     * @return check result
      */
-    public static void check(final SQLStatement sqlStatement, final 
List<Object> parameters, final ShardingSphereMetaData metaData, final Grantee 
grantee) {
-        for (SQLChecker<?> each : 
OrderedSPIRegistry.getRegisteredServices(metaData.getRuleMetaData().getRules(), 
SQLChecker.class).values()) {
-            SQLCheckResult checkResult = each.check(sqlStatement, parameters, 
metaData, grantee);
-            if (!checkResult.isPassed()) {
-                throw new SQLCheckException(checkResult.getErrorMessage());
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public static boolean check(final String schemaName, final 
ShardingSphereMetaData metaData, final ShardingSphereRuleMetaData 
globalRuleMetaData, final Grantee grantee) {
+        for (Entry<ShardingSphereRule, SQLChecker> entry : 
OrderedSPIRegistry.getRegisteredServices(getRules(metaData, 
globalRuleMetaData), SQLChecker.class).entrySet()) {
+            boolean checkResult = entry.getValue().check(schemaName, grantee, 
entry.getKey());
+            if (!checkResult) {
+                return false;
             }
         }
+        return true;
     }
     
     /**
-     * Check schema.
-     *
-     * @param schemaName schema name
+     * Check SQL.
+     * 
+     * @param sqlStatement SQL statement
+     * @param parameters SQL parameters
      * @param metaData meta data
+     * @param globalRuleMetaData global rule meta data
      * @param grantee grantee
-     * @return check result
      */
-    public static boolean check(final String schemaName, final 
ShardingSphereMetaData metaData, final Grantee grantee) {
-        for (SQLChecker<?> each : 
OrderedSPIRegistry.getRegisteredServices(metaData.getRuleMetaData().getRules(), 
SQLChecker.class).values()) {
-            boolean checkResult = each.check(schemaName, grantee);
-            if (!checkResult) {
-                return false;
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public static void check(final SQLStatement sqlStatement, final 
List<Object> parameters, 
+                             final ShardingSphereMetaData metaData, final 
ShardingSphereRuleMetaData globalRuleMetaData, final Grantee grantee) {
+        for (Entry<ShardingSphereRule, SQLChecker> entry : 
OrderedSPIRegistry.getRegisteredServices(getRules(metaData, 
globalRuleMetaData), SQLChecker.class).entrySet()) {
+            SQLCheckResult checkResult = entry.getValue().check(sqlStatement, 
parameters, metaData, grantee, entry.getKey());
+            if (!checkResult.isPassed()) {
+                throw new SQLCheckException(checkResult.getErrorMessage());
             }
         }
-        return true;
+    }
+    
+    private static Collection<ShardingSphereRule> getRules(final 
ShardingSphereMetaData metaData, final ShardingSphereRuleMetaData 
globalRuleMetaData) {
+        Collection<ShardingSphereRule> result = new 
LinkedList<>(metaData.getRuleMetaData().getRules());
+        result.addAll(globalRuleMetaData.getRules());
+        return result;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLChecker.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLChecker.java
index 31674ea..9f517b1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLChecker.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/check/SQLChecker.java
@@ -36,9 +36,10 @@ public interface SQLChecker<T extends ShardingSphereRule> 
extends OrderedSPI<T>
      *
      * @param schemaName schema name
      * @param grantee grantee
+     * @param rule rule
      * @return check result
      */
-    boolean check(String schemaName, Grantee grantee);
+    boolean check(String schemaName, Grantee grantee, T rule);
     
     /**
      * Check SQL.
@@ -47,7 +48,8 @@ public interface SQLChecker<T extends ShardingSphereRule> 
extends OrderedSPI<T>
      * @param parameters SQL parameters
      * @param metaData meta data
      * @param grantee grantee
+     * @param rule rule
      * @return SQL check result
      */
-    SQLCheckResult check(SQLStatement sqlStatement, List<Object> parameters, 
ShardingSphereMetaData metaData, Grantee grantee);
+    SQLCheckResult check(SQLStatement sqlStatement, List<Object> parameters, 
ShardingSphereMetaData metaData, Grantee grantee, T rule);
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 12e08b0..236d0e1 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -358,7 +358,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private ExecutionContext createExecutionContext() {
         LogicSQL logicSQL = createLogicSQL();
-        
SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), 
logicSQL.getParameters(), metaDataContexts.getDefaultMetaData(), null);
+        
SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), 
logicSQL.getParameters(), metaDataContexts.getDefaultMetaData(), 
metaDataContexts.getGlobalRuleMetaData(), null);
         ExecutionContext result = 
kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getDefaultMetaData(), metaDataContexts.getProps());
         findGeneratedKey(result).ifPresent(generatedKey -> 
generatedValues.addAll(generatedKey.getGeneratedValues()));
         return result;
@@ -420,7 +420,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     }
     
     @Override
-    public void addBatch() throws SQLException {
+    public void addBatch() {
         try {
             executionContext = createExecutionContext();
             
batchPreparedStatementExecutor.addBatchForExecutionUnits(executionContext.getExecutionUnits());
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 13e4a95..123111f 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -408,7 +408,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private ExecutionContext createExecutionContext(final String sql) throws 
SQLException {
         clearStatements();
         LogicSQL logicSQL = createLogicSQL(sql);
-        
SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), 
logicSQL.getParameters(), metaDataContexts.getDefaultMetaData(), null);
+        
SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), 
logicSQL.getParameters(), metaDataContexts.getDefaultMetaData(), 
metaDataContexts.getGlobalRuleMetaData(), null);
         return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getDefaultMetaData(), metaDataContexts.getProps());
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
index 1748237..0f2ce97 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
@@ -91,7 +91,7 @@ public final class TextProtocolBackendHandlerFactory {
         // TODO :Authority, need to refactor after GlobalRule is added
         if (!Strings.isNullOrEmpty(backendConnection.getSchemaName())) {
             MetaDataContexts contexts = 
ProxyContext.getInstance().getMetaDataContexts();
-            SQLCheckEngine.check(sqlStatement, Collections.emptyList(), 
contexts.getMetaData(backendConnection.getSchemaName()), 
backendConnection.getGrantee());
+            SQLCheckEngine.check(sqlStatement, Collections.emptyList(), 
contexts.getMetaData(backendConnection.getSchemaName()), 
contexts.getGlobalRuleMetaData(), backendConnection.getGrantee());
         }
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
index 84689e7..e9c374b 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
@@ -52,13 +52,14 @@ public final class ShowDatabasesExecutor implements 
DatabaseAdminQueryExecutor {
     }
     
     private Collection<Object> getSchemaNames(final BackendConnection 
backendConnection) {
+        ShardingSphereRuleMetaData globalRuleMetaData = 
ProxyContext.getInstance().getMetaDataContexts().getGlobalRuleMetaData();
         try {
-            SQLCheckEngine.check(new MySQLShowDatabasesStatement(), 
Collections.emptyList(), getMetaData(), backendConnection.getGrantee());
+            SQLCheckEngine.check(new MySQLShowDatabasesStatement(), 
Collections.emptyList(), getMetaData(), globalRuleMetaData, 
backendConnection.getGrantee());
             return new 
ArrayList<>(ProxyContext.getInstance().getAllSchemaNames());
         } catch (final SQLCheckException ex) {
             Collection<Object> result = new LinkedList<>();
             for (String each : ProxyContext.getInstance().getAllSchemaNames()) 
{
-                if (SQLCheckEngine.check(each, 
ProxyContext.getInstance().getMetaData(each), backendConnection.getGrantee())) {
+                if (SQLCheckEngine.check(each, 
ProxyContext.getInstance().getMetaData(each), globalRuleMetaData, 
backendConnection.getGrantee())) {
                     result.add(each);
                 }
             }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
index 162dab9..96308913 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutor.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.check.SQLCheckEngine;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.exception.UnknownDatabaseException;
@@ -37,7 +38,9 @@ public final class UseDatabaseExecutor implements 
DatabaseAdminExecutor {
     @Override
     public void execute(final BackendConnection backendConnection) {
         String schema = SQLUtil.getExactlyValue(useStatement.getSchema());
-        if (!ProxyContext.getInstance().schemaExists(schema) && 
SQLCheckEngine.check(schema, 
ProxyContext.getInstance().getMetaDataContexts().getMetaData(schema), 
backendConnection.getGrantee())) {
+        MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getMetaDataContexts();
+        if (!ProxyContext.getInstance().schemaExists(schema)
+                && SQLCheckEngine.check(schema, 
metaDataContexts.getMetaData(schema), metaDataContexts.getGlobalRuleMetaData(), 
backendConnection.getGrantee())) {
             throw new UnknownDatabaseException(schema);
         }
         backendConnection.setCurrentSchema(schema);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
index f1c3efb..50a6a27 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
@@ -17,9 +17,6 @@
 
 package org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
 
-import org.apache.shardingsphere.authority.AuthorityContext;
-import 
org.apache.shardingsphere.authority.provider.natived.NativeAuthorityProviderAlgorithm;
-import org.apache.shardingsphere.authority.spi.AuthorityProvideAlgorithm;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -61,17 +58,10 @@ public final class ShowDatabasesExecutorTest {
         showDatabasesExecutor = new ShowDatabasesExecutor();
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        initAuthorityProvider();
         metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new 
ShardingSphereUsers(Collections.singleton(new ShardingSphereUser("root", 
"root", ""))), new ConfigurationProperties(new Properties())));
     }
     
-    private void initAuthorityProvider() {
-        AuthorityProvideAlgorithm algorithm = new 
NativeAuthorityProviderAlgorithm();
-        algorithm.init(Collections.emptyMap(), Collections.emptyList());
-        AuthorityContext.getInstance().init(algorithm);
-    }
-    
     private Map<String, ShardingSphereMetaData> getMetaDataMap() {
         Map<String, ShardingSphereMetaData> result = new LinkedHashMap<>(10, 
1);
         for (int i = 0; i < 10; i++) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationHandler.java
index 55da736..aa3b650 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/auth/MySQLAuthenticationHandler.java
@@ -23,6 +23,7 @@ import org.apache.commons.codec.digest.DigestUtils;
 import 
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLServerErrorCode;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.handshake.MySQLAuthPluginData;
 import org.apache.shardingsphere.infra.check.SQLCheckEngine;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -54,7 +55,8 @@ public final class MySQLAuthenticationHandler {
         if (!user.isPresent() || !isPasswordRight(user.get().getPassword(), 
authResponse)) {
             return Optional.of(MySQLServerErrorCode.ER_ACCESS_DENIED_ERROR);
         }
-        return null == databaseName || SQLCheckEngine.check(databaseName, 
ProxyContext.getInstance().getMetaDataContexts().getMetaData(databaseName), 
user.get().getGrantee())
+        MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getMetaDataContexts();
+        return null == databaseName || SQLCheckEngine.check(databaseName, 
metaDataContexts.getMetaData(databaseName), 
metaDataContexts.getGlobalRuleMetaData(), user.get().getGrantee())
                 ? Optional.empty() : 
Optional.of(MySQLServerErrorCode.ER_DBACCESS_DENIED_ERROR);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
index e5e5f08..1ba4000 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.admin.initdb.M
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLOKPacket;
 import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
 import org.apache.shardingsphere.infra.check.SQLCheckEngine;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.exception.UnknownDatabaseException;
@@ -44,7 +45,9 @@ public final class MySQLComInitDbExecutor implements 
CommandExecutor {
     @Override
     public Collection<DatabasePacket<?>> execute() {
         String schema = SQLUtil.getExactlyValue(packet.getSchema());
-        if (ProxyContext.getInstance().schemaExists(schema) && 
SQLCheckEngine.check(schema, 
ProxyContext.getInstance().getMetaDataContexts().getMetaData(schema), 
backendConnection.getGrantee())) {
+        MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getMetaDataContexts();
+        if (ProxyContext.getInstance().schemaExists(schema)
+                && SQLCheckEngine.check(schema, 
metaDataContexts.getMetaData(schema), metaDataContexts.getGlobalRuleMetaData(), 
backendConnection.getGrantee())) {
             backendConnection.setCurrentSchema(packet.getSchema());
             return Collections.singletonList(new MySQLOKPacket(1));
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
index c1828f5..c403c31 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
@@ -70,7 +70,7 @@ public final class MySQLComStmtExecuteExecutor implements 
QueryCommandExecutor {
     
     private static void sqlCheck(final BackendConnection backendConnection, 
final SQLStatement sqlStatement) {
         MetaDataContexts contexts = 
ProxyContext.getInstance().getMetaDataContexts();
-        SQLCheckEngine.check(sqlStatement, Collections.emptyList(), 
contexts.getMetaData(backendConnection.getSchemaName()), 
backendConnection.getGrantee());
+        SQLCheckEngine.check(sqlStatement, Collections.emptyList(), 
contexts.getMetaData(backendConnection.getSchemaName()), 
contexts.getGlobalRuleMetaData(), backendConnection.getGrantee());
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationHandler.java
index 6a7563c..a893964 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/auth/PostgreSQLAuthenticationHandler.java
@@ -24,6 +24,7 @@ import org.apache.commons.codec.digest.DigestUtils;
 import 
org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLErrorCode;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLPasswordMessagePacket;
 import org.apache.shardingsphere.infra.check.SQLCheckEngine;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -56,7 +57,8 @@ public final class PostgreSQLAuthenticationHandler {
         if (!expectedMd5Digest.equals(md5Digest)) {
             return new 
PostgreSQLLoginResult(PostgreSQLErrorCode.INVALID_PASSWORD, 
String.format("password authentication failed for user \"%s\"", username));
         }
-        return null == databaseName || SQLCheckEngine.check(databaseName, 
ProxyContext.getInstance().getMetaDataContexts().getMetaData(databaseName), 
user.get().getGrantee())
+        MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getMetaDataContexts();
+        return null == databaseName || SQLCheckEngine.check(databaseName, 
metaDataContexts.getMetaData(databaseName), 
metaDataContexts.getGlobalRuleMetaData(), user.get().getGrantee())
                 ? new 
PostgreSQLLoginResult(PostgreSQLErrorCode.SUCCESSFUL_COMPLETION, null)
                 : new 
PostgreSQLLoginResult(PostgreSQLErrorCode.PRIVILEGE_NOT_GRANTED, 
String.format("Access denied for user '%s' to database '%s'", username, 
databaseName));
     }

Reply via email to