You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/02/09 07:32:47 UTC
[shardingsphere] branch master updated: Refactor SQLAuditEngine
(#9397)
This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 02dd369 Refactor SQLAuditEngine (#9397)
02dd369 is described below
commit 02dd36919cbba0ce1da9547a549b7b4f8e676ab1
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Tue Feb 9 15:32:17 2021 +0800
Refactor SQLAuditEngine (#9397)
* Adjust packages
* Refactor SQLAuditEngine
* Refactor SQLAuditEngine
* check style
---
.../{SQLAuditEngine.java => SQLCheckEngine.java} | 33 +++++++++++-----------
...{SQLAuditResult.java => SQLCheckException.java} | 16 +++++++----
.../{SQLAuditResult.java => SQLCheckResult.java} | 6 ++--
.../{AuditSQLState.java => SQLCheckType.java} | 15 +++++-----
.../audit/{SQLAuditor.java => SQLChecker.java} | 25 ++++++++++------
.../infra/spi/ordered/OrderedSPIRegistry.java | 9 +++++-
.../infra/context/kernel/KernelProcessor.java | 11 +-------
.../statement/ShardingSpherePreparedStatement.java | 4 ++-
.../core/statement/ShardingSphereStatement.java | 2 ++
.../text/TextProtocolBackendHandlerFactory.java | 9 ++++++
.../execute/MySQLComStmtExecuteExecutor.java | 9 ++++++
11 files changed, 84 insertions(+), 55 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditEngine.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
similarity index 56%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditEngine.java
rename to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
index 3edf790..60ceed2 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
@@ -17,42 +17,41 @@
package org.apache.shardingsphere.infra.audit;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.auth.Authentication;
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.sql.SQLException;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
/**
- * SQL audit engine.
+ * SQL check engine.
*/
-public final class SQLAuditEngine {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLCheckEngine {
static {
- ShardingSphereServiceLoader.register(SQLAuditor.class);
+ ShardingSphereServiceLoader.register(SQLChecker.class);
}
/**
- * Audit SQL.
+ * Check SQL.
*
* @param sqlStatement SQL statement
* @param parameters SQL parameters
- * @param schemaName schema name
- * @param rules ShardingSphere rules
- * @throws SQLException SQL exception
+ * @param metaData meta data
+ * @param auth auth
*/
- @SuppressWarnings({"rawtypes", "unchecked"})
- public void audit(final SQLStatement sqlStatement, final List<Object> parameters, final String schemaName, final Collection<ShardingSphereRule> rules) throws SQLException {
- Map<ShardingSphereRule, SQLAuditor> auditors = OrderedSPIRegistry.getRegisteredServices(rules, SQLAuditor.class);
- for (Entry<ShardingSphereRule, SQLAuditor> entry : auditors.entrySet()) {
- SQLAuditResult auditResult = entry.getValue().audit(sqlStatement, parameters, schemaName, entry.getKey());
+ public static void check(final SQLStatement sqlStatement, final List<Object> parameters, final ShardingSphereMetaData metaData, final Authentication auth) {
+ Collection<SQLChecker> auditors = OrderedSPIRegistry.getRegisteredServices(SQLChecker.class);
+ for (SQLChecker each : auditors) {
+ SQLCheckResult auditResult = each.check(sqlStatement, parameters, metaData, auth);
if (!auditResult.isPassed()) {
- throw new SQLException(auditResult.getFailedReason(), AuditSQLState.COMMON_AUDIT_FAIL);
+ throw new SQLCheckException(each.getSQLCheckType(), auditResult.getErrorMessage());
}
}
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditResult.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckException.java
similarity index 63%
copy from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditResult.java
copy to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckException.java
index 953044d..ab4a663 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditResult.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckException.java
@@ -18,16 +18,20 @@
package org.apache.shardingsphere.infra.audit;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.exception.ShardingSphereException;
/**
- * SQL audit result.
+ * SQL check exception.
*/
-@RequiredArgsConstructor
@Getter
-public final class SQLAuditResult {
+public final class SQLCheckException extends ShardingSphereException {
- private final boolean isPassed;
+ private static final long serialVersionUID = 4183020614721058122L;
- private final String failedReason;
+ private final SQLCheckType sqlCheckType;
+
+ public SQLCheckException(final SQLCheckType state, final String errorMessage) {
+ super(String.format("SQL %s checking failed. Error message: %s.", state.name(), errorMessage));
+ this.sqlCheckType = state;
+ }
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditResult.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckResult.java
similarity index 91%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditResult.java
rename to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckResult.java
index 953044d..d832afb 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditResult.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckResult.java
@@ -21,13 +21,13 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
- * SQL audit result.
+ * SQL check result.
*/
@RequiredArgsConstructor
@Getter
-public final class SQLAuditResult {
+public final class SQLCheckResult {
private final boolean isPassed;
- private final String failedReason;
+ private final String errorMessage;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/AuditSQLState.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckType.java
similarity index 74%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/AuditSQLState.java
rename to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckType.java
index 81adada..2ff3b10 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/AuditSQLState.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckType.java
@@ -17,16 +17,15 @@
package org.apache.shardingsphere.infra.audit;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
/**
- * SQL state for audit fail.
+ * SQL check type.
*/
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class AuditSQLState {
-
- public static final String COMMON_AUDIT_FAIL = "AU001";
+@RequiredArgsConstructor
+public enum SQLCheckType {
+
+ AUTHENTICATION("authentication"), SQL_AUDIT("audit");
- public static final int COMMON_VENDOR_CODE = 50000;
+ private final String name;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditor.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLChecker.java
similarity index 66%
rename from shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditor.java
rename to shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLChecker.java
index fbdedf9..83d025e 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLAuditor.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLChecker.java
@@ -17,27 +17,34 @@
package org.apache.shardingsphere.infra.audit;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.metadata.auth.Authentication;
import org.apache.shardingsphere.infra.spi.ordered.OrderedSPI;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.util.List;
/**
- * SQL auditor.
+ * SQL checker.
*
- * @param <T> type of ShardingSphere rule
*/
-public interface SQLAuditor<T extends ShardingSphereRule> extends OrderedSPI<T> {
+public interface SQLChecker extends OrderedSPI {
/**
- * Audit SQL.
+ * Get SQL check type.
+ *
+ * @return sql check type
+ */
+ SQLCheckType getSQLCheckType();
+
+ /**
+ * Check SQL.
*
* @param sqlStatement SQL statement
* @param parameters SQL parameters
- * @param schemaName schema name
- * @param rule ShardingSphere rule
- * @return SQL audit result
+ * @param metaData meta data
+ * @param auth auth
+ * @return SQL check result
*/
- SQLAuditResult audit(SQLStatement sqlStatement, List<Object> parameters, String schemaName, T rule);
+ SQLCheckResult check(SQLStatement sqlStatement, List<Object> parameters, ShardingSphereMetaData metaData, Authentication auth);
}
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/spi/ordered/OrderedSPIRegistry.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/spi/ordered/OrderedSPIRegistry.java
index 44e4f4d..567cb0d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/spi/ordered/OrderedSPIRegistry.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/spi/ordered/OrderedSPIRegistry.java
@@ -67,7 +67,14 @@ public final class OrderedSPIRegistry {
return result;
}
- private static <T extends OrderedSPI<?>> Collection<T> getRegisteredServices(final Class<T> orderedSPIClass) {
+ /**
+ * Get registered services.
+ *
+ * @param orderedSPIClass class of ordered SPI
+ * @param <T> type of ordered SPI class
+ * @return registered services
+ */
+ public static <T extends OrderedSPI<?>> Collection<T> getRegisteredServices(final Class<T> orderedSPIClass) {
Map<Integer, T> result = new TreeMap<>();
for (T each : ShardingSphereServiceLoader.newServiceInstances(orderedSPIClass)) {
result.put(each.getOrder(), each);
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
index d336713..3a67487 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.infra.context.kernel;
-import org.apache.shardingsphere.infra.audit.SQLAuditEngine;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
@@ -30,8 +29,6 @@ import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
-import java.sql.SQLException;
-
/**
* Kernel processor.
*/
@@ -44,10 +41,8 @@ public final class KernelProcessor {
* @param metaData ShardingSphere meta data
* @param props configuration properties
* @return execution context
- * @throws SQLException SQL exception
*/
- public ExecutionContext generateExecutionContext(final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ConfigurationProperties props) throws SQLException {
- audit(logicSQL, metaData);
+ public ExecutionContext generateExecutionContext(final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ConfigurationProperties props) {
RouteContext routeContext = route(logicSQL, metaData, props);
SQLRewriteResult rewriteResult = rewrite(logicSQL, metaData, props, routeContext);
ExecutionContext result = createExecutionContext(logicSQL, metaData, routeContext, rewriteResult);
@@ -55,10 +50,6 @@ public final class KernelProcessor {
return result;
}
- private void audit(final LogicSQL logicSQL, final ShardingSphereMetaData metaData) throws SQLException {
- new SQLAuditEngine().audit(logicSQL.getSqlStatementContext().getSqlStatement(), logicSQL.getParameters(), metaData.getName(), metaData.getRuleMetaData().getRules());
- }
-
private RouteContext route(final LogicSQL logicSQL, final ShardingSphereMetaData metaData, final ConfigurationProperties props) {
return new SQLRouteEngine(metaData.getRuleMetaData().getRules(), props).route(logicSQL, metaData);
}
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 0a277f1..49cbf82 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
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.driver.jdbc.core.constant.SQLExceptionConstant;
import org.apache.shardingsphere.driver.jdbc.core.resultset.GeneratedKeysResultSet;
import org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSet;
import org.apache.shardingsphere.driver.jdbc.core.statement.metadata.ShardingSphereParameterMetaData;
+import org.apache.shardingsphere.infra.audit.SQLCheckEngine;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.segment.insert.keygen.GeneratedKeyContext;
@@ -353,8 +354,9 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
return result;
}
- private ExecutionContext createExecutionContext() throws SQLException {
+ private ExecutionContext createExecutionContext() {
LogicSQL logicSQL = createLogicSQL();
+ SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), logicSQL.getParameters(), metaDataContexts.getDefaultMetaData(), metaDataContexts.getAuthentication());
ExecutionContext result = kernelProcessor.generateExecutionContext(logicSQL, metaDataContexts.getDefaultMetaData(), metaDataContexts.getProps());
findGeneratedKey(result).ifPresent(generatedKey -> generatedValues.addAll(generatedKey.getGeneratedValues()));
return result;
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 21b085b..d1344ef 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
@@ -29,6 +29,7 @@ import org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConne
import org.apache.shardingsphere.driver.jdbc.core.constant.SQLExceptionConstant;
import org.apache.shardingsphere.driver.jdbc.core.resultset.GeneratedKeysResultSet;
import org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSet;
+import org.apache.shardingsphere.infra.audit.SQLCheckEngine;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.segment.insert.keygen.GeneratedKeyContext;
@@ -389,6 +390,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(), metaDataContexts.getAuthentication());
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 0c0dd23..c702453 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
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.proxy.backend.text;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.audit.SQLCheckEngine;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
@@ -35,6 +37,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
import java.sql.SQLException;
+import java.util.Collections;
import java.util.Optional;
/**
@@ -62,6 +65,7 @@ public final class TextProtocolBackendHandlerFactory {
return ShardingCTLBackendHandlerFactory.newInstance(trimSQL, backendConnection);
}
SQLStatement sqlStatement = new ShardingSphereSQLParserEngine(getBackendDatabaseType(databaseType, backendConnection).getName()).parse(sql, false);
+ sqlCheck(backendConnection, sqlStatement);
if (sqlStatement instanceof TCLStatement) {
return TransactionBackendHandlerFactory.newInstance((TCLStatement) sqlStatement, sql, backendConnection);
}
@@ -73,6 +77,11 @@ public final class TextProtocolBackendHandlerFactory {
return databaseAdminBackendHandler.orElseGet(() -> DatabaseBackendHandlerFactory.newInstance(sqlStatement, sql, backendConnection));
}
+ private static void sqlCheck(final BackendConnection backendConnection, final SQLStatement sqlStatement) {
+ MetaDataContexts contexts = ProxyContext.getInstance().getMetaDataContexts();
+ SQLCheckEngine.check(sqlStatement, Collections.emptyList(), contexts.getMetaData(backendConnection.getSchemaName()), contexts.getAuthentication());
+ }
+
private static DatabaseType getBackendDatabaseType(final DatabaseType defaultDatabaseType, final BackendConnection backendConnection) {
return Strings.isNullOrEmpty(backendConnection.getSchemaName())
? defaultDatabaseType : ProxyContext.getInstance().getMetaDataContexts().getMetaData(backendConnection.getSchemaName()).getResource().getDatabaseType();
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 2a22b94..ef82d27 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
@@ -25,6 +25,8 @@ import org.apache.shardingsphere.db.protocol.mysql.packet.MySQLPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.MySQLBinaryResultSetRowPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.MySQLComStmtExecutePacket;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
+import org.apache.shardingsphere.infra.audit.SQLCheckEngine;
+import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
@@ -43,6 +45,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.Collections;
import java.util.stream.Collectors;
/**
@@ -61,9 +64,15 @@ public final class MySQLComStmtExecuteExecutor implements QueryCommandExecutor {
ShardingSphereSQLParserEngine sqlStatementParserEngine = new ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(
ProxyContext.getInstance().getMetaDataContexts().getMetaData(backendConnection.getSchemaName()).getResource().getDatabaseType()));
SQLStatement sqlStatement = sqlStatementParserEngine.parse(packet.getSql(), true);
+ sqlCheck(backendConnection, sqlStatement);
databaseCommunicationEngine = DatabaseCommunicationEngineFactory.getInstance().newBinaryProtocolInstance(sqlStatement, packet.getSql(), packet.getParameters(), backendConnection);
}
+ private static void sqlCheck(final BackendConnection backendConnection, final SQLStatement sqlStatement) {
+ MetaDataContexts contexts = ProxyContext.getInstance().getMetaDataContexts();
+ SQLCheckEngine.check(sqlStatement, Collections.emptyList(), contexts.getMetaData(backendConnection.getSchemaName()), contexts.getAuthentication());
+ }
+
@Override
public Collection<DatabasePacket<?>> execute() throws SQLException {
ResponseHeader responseHeader = databaseCommunicationEngine.execute();