This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 1b1a59ff48d Move ConnectionSession.grantee into ConnectionContext
(#31706)
1b1a59ff48d is described below
commit 1b1a59ff48ddbc44bfd079e2b414b088adf21565
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jun 15 14:58:50 2024 +0800
Move ConnectionSession.grantee into ConnectionContext (#31706)
* Move ConnectionSession.grantee into ConnectionContext
* Move ConnectionSession.grantee into ConnectionContext
* Move ConnectionSession.grantee into ConnectionContext
---
.../unicast/ShardingUnicastRoutingEngineTest.java | 3 ++-
.../session/connection/ConnectionContext.java | 9 ++++++-
.../DriverDatabaseConnectionManager.java | 5 ++--
.../core/connection/ShardingSphereConnection.java | 2 +-
.../DriverDatabaseConnectionManagerTest.java | 3 ++-
.../authority/checker/AuthorityChecker.java | 3 ++-
.../enumerable/EnumerableScanExecutor.java | 3 ++-
.../proxy/backend/connector/ProxySQLExecutor.java | 4 +--
.../handler/ProxyBackendHandlerFactory.java | 2 +-
.../executor/AbstractDatabaseMetaDataExecutor.java | 2 +-
.../data/impl/UnicastDatabaseBackendHandler.java | 2 +-
.../database/DropDatabaseBackendHandler.java | 2 +-
.../proxy/backend/session/ConnectionSession.java | 29 +++++++++++++++++-----
.../handler/ProxyBackendHandlerFactoryTest.java | 2 +-
.../DefaultDatabaseMetaDataExecutorTest.java | 5 ++--
.../DatabaseOperateBackendHandlerFactoryTest.java | 2 +-
.../database/DropDatabaseBackendHandlerTest.java | 4 ++-
.../backend/session/ConnectionSessionTest.java | 2 ++
.../admin/executor/ShowCurrentUserExecutor.java | 2 +-
.../admin/executor/ShowDatabasesExecutor.java | 2 +-
.../admin/executor/UseDatabaseExecutor.java | 2 +-
.../SelectInformationSchemataExecutor.java | 3 ++-
.../executor/ShowCurrentUserExecutorTest.java | 4 +--
.../admin/executor/ShowDatabasesExecutorTest.java | 4 +--
.../admin/executor/UseDatabaseExecutorTest.java | 3 ++-
.../SelectInformationSchemataExecutorTest.java | 5 ++--
.../frontend/command/CommandExecutorTask.java | 2 +-
.../netty/FrontendChannelInboundHandler.java | 9 ++++---
.../netty/FrontendChannelInboundHandlerTest.java | 2 +-
.../admin/initdb/MySQLComInitDbExecutor.java | 2 +-
.../text/query/MySQLMultiStatementsHandler.java | 2 +-
.../PostgreSQLBatchedStatementsExecutor.java | 2 +-
32 files changed, 83 insertions(+), 45 deletions(-)
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
index 18744574c61..c972a815d8b 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -93,7 +94,7 @@ class ShardingUnicastRoutingEngineTest {
@Test
void assertRoutingForBroadcastTableWithPreferredDataSource() {
- ConnectionContext connectionContext = new ConnectionContext(() ->
Collections.singleton("ds_1"));
+ ConnectionContext connectionContext = new ConnectionContext(() ->
Collections.singleton("ds_1"), new Grantee("", ""));
RouteContext actual = new
ShardingUnicastRoutingEngine(mock(SelectStatementContext.class),
Collections.singleton("t_config"), connectionContext).route(shardingRule);
assertThat(actual.getRouteUnits().size(), is(1));
assertThat(actual.getRouteUnits().iterator().next().getDataSourceMapper().getActualName(),
is("ds_1"));
diff --git
a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java
b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java
index a35ecb42776..c2539c8fe33 100644
---
a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java
+++
b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
import
org.apache.shardingsphere.infra.session.connection.cursor.CursorConnectionContext;
import
org.apache.shardingsphere.infra.session.connection.datasource.UsedDataSourceProvider;
import
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
@@ -44,13 +45,19 @@ public final class ConnectionContext implements
AutoCloseable {
@Getter(AccessLevel.NONE)
private final UsedDataSourceProvider usedDataSourceProvider;
+ private final Grantee grantee;
+
private String databaseName;
@Setter
private String trafficInstanceId;
public ConnectionContext() {
- this(Collections::emptySet);
+ this(new Grantee("", ""));
+ }
+
+ public ConnectionContext(final Grantee grantee) {
+ this(Collections::emptySet, grantee);
}
/**
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
index 82a6519c680..1ef2174e108 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
@@ -35,6 +35,7 @@ import
org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
import
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
@@ -83,10 +84,10 @@ public final class DriverDatabaseConnectionManager
implements OnlineDatabaseConn
private final ForceExecuteTemplate<Connection> forceExecuteTemplate = new
ForceExecuteTemplate<>();
- public DriverDatabaseConnectionManager(final String databaseName, final
ContextManager contextManager) {
+ public DriverDatabaseConnectionManager(final String databaseName, final
ContextManager contextManager, final Grantee grantee) {
this.contextManager = contextManager;
this.databaseName = databaseName;
- connectionContext = new ConnectionContext(cachedConnections::keySet);
+ connectionContext = new ConnectionContext(cachedConnections::keySet,
grantee);
connectionContext.setCurrentDatabase(databaseName);
physicalDataSourceMap = getPhysicalDataSourceMap(databaseName,
contextManager);
trafficDataSourceMap = getTrafficDataSourceMap(databaseName,
contextManager);
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index db2024bae85..cf9be12ad83 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -85,7 +85,7 @@ public final class ShardingSphereConnection extends
AbstractConnectionAdapter {
public ShardingSphereConnection(final String databaseName, final
ContextManager contextManager) {
this.databaseName = databaseName;
this.contextManager = contextManager;
- databaseConnectionManager = new
DriverDatabaseConnectionManager(databaseName, contextManager);
+ databaseConnectionManager = new
DriverDatabaseConnectionManager(databaseName, contextManager, new Grantee("",
""));
processId = processEngine.connect(new Grantee("", ""), databaseName);
}
diff --git
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
index 9391da3a394..a4a15f05c34 100644
---
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
+++
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
@@ -27,6 +27,7 @@ import
org.apache.shardingsphere.infra.instance.metadata.InstanceType;
import
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
@@ -70,7 +71,7 @@ class DriverDatabaseConnectionManagerTest {
@BeforeEach
void setUp() throws SQLException {
- databaseConnectionManager = new
DriverDatabaseConnectionManager(DefaultDatabase.LOGIC_NAME,
mockContextManager());
+ databaseConnectionManager = new
DriverDatabaseConnectionManager(DefaultDatabase.LOGIC_NAME,
mockContextManager(), new Grantee("", "'"));
}
private ContextManager mockContextManager() throws SQLException {
diff --git
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
index 7e1bd6abd6c..51d2d13a1e4 100644
---
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
+++
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/checker/AuthorityChecker.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.authority.checker;
+import com.google.common.base.Strings;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.authority.rule.AuthorityRule;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
@@ -41,7 +42,7 @@ public final class AuthorityChecker {
*/
@HighFrequencyInvocation
public boolean isAuthorized(final String database) {
- return null == grantee ||
rule.findUser(grantee).map(ShardingSphereUser::isAdmin).orElse(false)
+ return null == grantee || Strings.isNullOrEmpty(grantee.getUsername())
|| rule.findUser(grantee).map(ShardingSphereUser::isAdmin).orElse(false)
|| rule.findPrivileges(grantee).map(optional ->
optional.hasPrivileges(database)).orElse(false);
}
}
diff --git
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
index f0921d47722..ee3892c3afd 100644
---
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
+++
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
@@ -114,7 +114,8 @@ public final class EnumerableScanExecutor implements
ScanExecutor {
}
QueryContext queryContext =
createQueryContext(federationContext.getMetaData(), scanContext, databaseType,
federationContext.getQueryContext().isUseCache());
ShardingSphereDatabase database =
federationContext.getMetaData().getDatabase(databaseName);
- ExecutionContext executionContext = new
KernelProcessor().generateExecutionContext(queryContext, database,
globalRuleMetaData, executorContext.getProps(), new ConnectionContext());
+ ExecutionContext executionContext = new
KernelProcessor().generateExecutionContext(
+ queryContext, database, globalRuleMetaData,
executorContext.getProps(), new ConnectionContext());
if (federationContext.isPreview()) {
federationContext.getPreviewExecutionUnits().addAll(executionContext.getExecutionUnits());
return createEmptyEnumerable();
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index eec351266e4..441ce16663d 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -201,7 +201,7 @@ public final class ProxySQLExecutor {
try {
executionGroupContext =
prepareEngine.prepare(executionContext.getRouteContext(),
executionContext.getExecutionUnits(),
new
ExecutionGroupReportContext(databaseConnectionManager.getConnectionSession().getProcessId(),
-
databaseConnectionManager.getConnectionSession().getDatabaseName(),
databaseConnectionManager.getConnectionSession().getGrantee()));
+
databaseConnectionManager.getConnectionSession().getDatabaseName(),
databaseConnectionManager.getConnectionSession().getConnectionContext().getGrantee()));
} catch (final SQLException ex) {
return getSaneExecuteResults(executionContext, ex);
}
@@ -219,7 +219,7 @@ public final class ProxySQLExecutor {
try {
executionGroupContext =
prepareEngine.prepare(executionContext.getRouteContext(),
executionContext.getExecutionUnits(),
new
ExecutionGroupReportContext(databaseConnectionManager.getConnectionSession().getProcessId(),
-
databaseConnectionManager.getConnectionSession().getDatabaseName(),
databaseConnectionManager.getConnectionSession().getGrantee()));
+
databaseConnectionManager.getConnectionSession().getDatabaseName(),
databaseConnectionManager.getConnectionSession().getConnectionContext().getGrantee()));
} catch (final SQLException ex) {
return getSaneExecuteResults(executionContext, ex);
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index bb67afa958a..d145acf8e36 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -146,7 +146,7 @@ public final class ProxyBackendHandlerFactory {
}
AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
ShardingSphereDatabase database =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName);
- ShardingSpherePreconditions.checkState(new
AuthorityChecker(authorityRule,
connectionSession.getGrantee()).isAuthorized(databaseName),
+ ShardingSpherePreconditions.checkState(new
AuthorityChecker(authorityRule,
connectionSession.getConnectionContext().getGrantee()).isAuthorized(databaseName),
() -> new UnknownDatabaseException(databaseName));
SQLAuditEngine.audit(queryContext,
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData(),
database);
backendHandler =
DatabaseAdminBackendHandlerFactory.newInstance(databaseType,
sqlStatementContext, connectionSession);
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index 6cc9f9b34e4..23e8fe10f22 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -144,7 +144,7 @@ public abstract class AbstractDatabaseMetaDataExecutor
implements DatabaseAdminQ
@Override
protected Collection<String> getDatabaseNames(final ConnectionSession
connectionSession) {
- Optional<String> database =
ProxyContext.getInstance().getAllDatabaseNames().stream().filter(each ->
isAuthorized(each, connectionSession.getGrantee()))
+ Optional<String> database =
ProxyContext.getInstance().getAllDatabaseNames().stream().filter(each ->
isAuthorized(each, connectionSession.getConnectionContext().getGrantee()))
.filter(AbstractDatabaseMetaDataExecutor::hasDataSource).findFirst();
return
database.map(Collections::singletonList).orElse(Collections.emptyList());
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java
index 09b9e154e2f..792b2f08de5 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java
@@ -72,7 +72,7 @@ public final class UnicastDatabaseBackendHandler implements
DatabaseBackendHandl
throw new NoDatabaseSelectedException();
}
AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
- Optional<ShardingSpherePrivileges> privileges =
authorityRule.findPrivileges(connectionSession.getGrantee());
+ Optional<ShardingSpherePrivileges> privileges =
authorityRule.findPrivileges(connectionSession.getConnectionContext().getGrantee());
Stream<String> databaseStream = databaseNames.stream().filter(each ->
ProxyContext.getInstance().getContextManager().getDatabase(each).containsDataSource());
Optional<String> result = privileges.map(optional ->
databaseStream.filter(optional::hasPrivileges).findFirst()).orElseGet(databaseStream::findFirst);
ShardingSpherePreconditions.checkState(result.isPresent(),
EmptyStorageUnitException::new);
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
index a58e748d81c..d89359a8f15 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java
@@ -46,7 +46,7 @@ public final class DropDatabaseBackendHandler implements
ProxyBackendHandler {
@Override
public ResponseHeader execute() {
- check(sqlStatement, connectionSession.getGrantee());
+ check(sqlStatement,
connectionSession.getConnectionContext().getGrantee());
if (isDropCurrentDatabase(sqlStatement.getDatabaseName())) {
checkSupportedDropCurrentDatabase(connectionSession);
connectionSession.setCurrentDatabase(null);
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
index 1273c9aee70..95696d19f03 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
@@ -21,16 +21,18 @@ import io.netty.util.AttributeMap;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
-import org.apache.shardingsphere.infra.session.query.QueryContext;
-import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorStatementManager;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
import
org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
import
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
+import java.util.concurrent.atomic.AtomicReference;
+
/**
* Connection session.
*/
@@ -45,8 +47,6 @@ public final class ConnectionSession {
private volatile int connectionId;
- private Grantee grantee;
-
private final TransactionStatus transactionStatus;
private final AttributeMap attributeMap;
@@ -66,7 +66,7 @@ public final class ConnectionSession {
private final ServerPreparedStatementRegistry
serverPreparedStatementRegistry = new ServerPreparedStatementRegistry();
- private final ConnectionContext connectionContext;
+ private final AtomicReference<ConnectionContext> connectionContext = new
AtomicReference<>();
private final RequiredSessionVariableRecorder
requiredSessionVariableRecorder = new RequiredSessionVariableRecorder();
@@ -80,7 +80,15 @@ public final class ConnectionSession {
this.attributeMap = attributeMap;
databaseConnectionManager = new ProxyDatabaseConnectionManager(this);
statementManager = new JDBCBackendStatement();
- connectionContext = new
ConnectionContext(databaseConnectionManager::getUsedDataSourceNames);
+ }
+
+ /**
+ * Set grantee.
+ *
+ * @param grantee grantee
+ */
+ public void setGrantee(final Grantee grantee) {
+ connectionContext.set(new
ConnectionContext(databaseConnectionManager::getUsedDataSourceNames, grantee));
}
/**
@@ -94,6 +102,15 @@ public final class ConnectionSession {
}
}
+ /**
+ * Get connection context.
+ *
+ * @return connection context
+ */
+ public ConnectionContext getConnectionContext() {
+ return connectionContext.get();
+ }
+
/**
* Get database name.
*
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
index 3f95926d9d4..641268e44ef 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
@@ -90,7 +90,7 @@ class ProxyBackendHandlerFactoryTest {
@BeforeEach
void setUp() {
- when(connectionSession.getGrantee()).thenReturn(new
Grantee(DefaultUser.USERNAME, "%"));
+
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(new
Grantee(DefaultUser.USERNAME, "%"));
when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
when(connectionSession.getDatabaseName()).thenReturn("db");
ProxyDatabaseConnectionManager databaseConnectionManager =
mock(ProxyDatabaseConnectionManager.class);
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
index 5cdb9c92b9d..1a043115709 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
@@ -41,6 +41,7 @@ import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
import org.mockito.Mock;
import java.sql.Connection;
@@ -67,12 +68,12 @@ class DefaultDatabaseMetaDataExecutorTest {
private final Grantee grantee = new Grantee("root", "127.0.0.1");
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
@BeforeEach
void setUp() {
- when(connectionSession.getGrantee()).thenReturn(grantee);
+
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(grantee);
}
@Test
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
index 44e15ea89d8..fd6e47cda0f 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateBackendHandlerFactoryTest.java
@@ -74,7 +74,7 @@ class DatabaseOperateBackendHandlerFactoryTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ContextManager contextManager;
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
@BeforeEach
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java
index afbed046204..c45e96d73c0 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java
@@ -35,6 +35,7 @@ import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
@@ -58,7 +59,7 @@ import static org.mockito.Mockito.when;
@MockitoSettings(strictness = Strictness.LENIENT)
class DropDatabaseBackendHandlerTest {
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
@Mock
@@ -72,6 +73,7 @@ class DropDatabaseBackendHandlerTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
when(ProxyContext.getInstance().databaseExists("bar_db")).thenReturn(true);
+
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
handler = new DropDatabaseBackendHandler(sqlStatement,
connectionSession);
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
index a1fbc0a0eef..6f48236847b 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.session;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
@@ -59,6 +60,7 @@ class ConnectionSessionTest {
@BeforeEach
void setup() {
connectionSession = new
ConnectionSession(mock(MySQLDatabaseType.class), null);
+ connectionSession.setGrantee(new Grantee("", ""));
when(databaseConnectionManager.getConnectionSession()).thenReturn(connectionSession);
}
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutor.java
index 2d0772ea877..d88984dad2a 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutor.java
@@ -50,7 +50,7 @@ public final class ShowCurrentUserExecutor implements
DatabaseAdminQueryExecutor
@Override
public void execute(final ConnectionSession connectionSession) {
AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
- Optional<Grantee> grantee =
authorityRule.findUser(connectionSession.getGrantee()).map(ShardingSphereUser::getGrantee);
+ Optional<Grantee> grantee =
authorityRule.findUser(connectionSession.getConnectionContext().getGrantee()).map(ShardingSphereUser::getGrantee);
mergedResult = new LocalDataMergedResult(Collections.singleton(new
LocalDataQueryResultRow(grantee.isPresent() ? grantee.get().toString() : "")));
}
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutor.java
index 995f73235f0..becb0d9b0bb 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutor.java
@@ -57,7 +57,7 @@ public final class ShowDatabasesExecutor implements
DatabaseAdminQueryExecutor {
private Collection<LocalDataQueryResultRow> getDatabaseNames(final
ConnectionSession connectionSession) {
AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
- AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule, connectionSession.getGrantee());
+ AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule,
connectionSession.getConnectionContext().getGrantee());
return
ProxyContext.getInstance().getAllDatabaseNames().stream().sorted()
.filter(each -> checkLikePattern(each) &&
authorityChecker.isAuthorized(each)).map(LocalDataQueryResultRow::new).collect(Collectors.toList());
}
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java
index dcf9f5e4a9f..307fb4baa58 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java
@@ -40,7 +40,7 @@ public final class UseDatabaseExecutor implements
DatabaseAdminExecutor {
public void execute(final ConnectionSession connectionSession) {
String databaseName =
SQLUtils.getExactlyValue(useStatement.getSchema());
AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
- AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule, connectionSession.getGrantee());
+ AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule,
connectionSession.getConnectionContext().getGrantee());
ShardingSpherePreconditions.checkState(ProxyContext.getInstance().databaseExists(databaseName)
&& authorityChecker.isAuthorized(databaseName),
() -> new UnknownDatabaseException(databaseName));
connectionSession.setCurrentDatabase(databaseName);
diff --git
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
index 2a1977247b2..a0de7ba82b4 100644
---
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
+++
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
@@ -83,7 +83,8 @@ public final class SelectInformationSchemataExecutor extends
DefaultDatabaseMeta
@Override
protected Collection<String> getDatabaseNames(final ConnectionSession
connectionSession) {
- Collection<String> databaseNames =
ProxyContext.getInstance().getAllDatabaseNames().stream().filter(each ->
isAuthorized(each,
connectionSession.getGrantee())).collect(Collectors.toList());
+ Collection<String> databaseNames =
ProxyContext.getInstance().getAllDatabaseNames().stream()
+ .filter(each -> isAuthorized(each,
connectionSession.getConnectionContext().getGrantee())).collect(Collectors.toList());
SCHEMA_WITHOUT_DATA_SOURCE.addAll(databaseNames.stream().filter(each
->
!AbstractDatabaseMetaDataExecutor.hasDataSource(each)).collect(Collectors.toSet()));
Collection<String> result =
databaseNames.stream().filter(AbstractDatabaseMetaDataExecutor::hasDataSource).collect(Collectors.toList());
if (!SCHEMA_WITHOUT_DATA_SOURCE.isEmpty()) {
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
index 7892572ca27..04285d88be7 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowCurrentUserExecutorTest.java
@@ -81,8 +81,8 @@ class ShowCurrentUserExecutorTest {
}
private ConnectionSession mockConnectionSession() {
- ConnectionSession result = mock(ConnectionSession.class);
- when(result.getGrantee()).thenReturn(GRANTEE);
+ ConnectionSession result = mock(ConnectionSession.class,
RETURNS_DEEP_STUBS);
+ when(result.getConnectionContext().getGrantee()).thenReturn(GRANTEE);
return result;
}
}
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
index ffa02896f53..f67e378b688 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowDatabasesExecutorTest.java
@@ -220,8 +220,8 @@ class ShowDatabasesExecutorTest {
}
private ConnectionSession mockConnectionSession() {
- ConnectionSession result = mock(ConnectionSession.class);
- when(result.getGrantee()).thenReturn(new Grantee("root", ""));
+ ConnectionSession result = mock(ConnectionSession.class,
RETURNS_DEEP_STUBS);
+ when(result.getConnectionContext().getGrantee()).thenReturn(new
Grantee("root", ""));
return result;
}
}
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
index f7343046bad..ef5119de2ee 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java
@@ -36,6 +36,7 @@ import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
import org.mockito.Mock;
import java.util.HashMap;
@@ -55,7 +56,7 @@ class UseDatabaseExecutorTest {
private static final String DATABASE_PATTERN = "db_%s";
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
@Test
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
index 0c0e567c026..e057cf0fd63 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
@@ -45,6 +45,7 @@ import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockedConstruction;
import org.mockito.junit.jupiter.MockitoSettings;
@@ -84,12 +85,12 @@ class SelectInformationSchemataExecutorTest {
private SelectStatement statement;
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
@BeforeEach
void setUp() {
- when(connectionSession.getGrantee()).thenReturn(grantee);
+
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(grantee);
statement = (SelectStatement) new SQLParserRule(
new
DefaultSQLParserRuleConfigurationBuilder().build()).getSQLParserEngine(TypedSPILoader.getService(DatabaseType.class,
"MySQL")).parse(sql, false);
}
diff --git
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
index 84ba405e62a..548dbf71a7f 100644
---
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
+++
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
@@ -110,7 +110,7 @@ public final class CommandExecutorTask implements Runnable {
private void fillLogMDC() {
MDC.put(LogMDCConstants.DATABASE_KEY,
connectionSession.getDatabaseName());
- MDC.put(LogMDCConstants.USER_KEY,
connectionSession.getGrantee().toString());
+ MDC.put(LogMDCConstants.USER_KEY,
connectionSession.getConnectionContext().getGrantee().toString());
}
private boolean executeCommand(final ChannelHandlerContext context, final
PacketPayload payload) throws SQLException {
diff --git
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
index 50e2dac80d1..c7c0680af15 100644
---
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
+++
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
@@ -34,6 +34,7 @@ import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngi
import org.apache.shardingsphere.proxy.frontend.state.ProxyStateContext;
import java.util.Optional;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* Frontend channel inbound handler.
@@ -47,7 +48,7 @@ public final class FrontendChannelInboundHandler extends
ChannelInboundHandlerAd
private final ProcessEngine processEngine = new ProcessEngine();
- private volatile boolean authenticated;
+ private final AtomicBoolean authenticated = new AtomicBoolean(false);
public FrontendChannelInboundHandler(final DatabaseProtocolFrontendEngine
databaseProtocolFrontendEngine, final Channel channel) {
this.databaseProtocolFrontendEngine = databaseProtocolFrontendEngine;
@@ -63,8 +64,8 @@ public final class FrontendChannelInboundHandler extends
ChannelInboundHandlerAd
@Override
public void channelRead(final ChannelHandlerContext context, final Object
message) {
- if (!authenticated) {
- authenticated = authenticate(context, (ByteBuf) message);
+ if (!authenticated.get()) {
+ authenticated.set(authenticate(context, (ByteBuf) message));
return;
}
ProxyStateContext.execute(context, message,
databaseProtocolFrontendEngine, connectionSession);
@@ -77,7 +78,7 @@ public final class FrontendChannelInboundHandler extends
ChannelInboundHandlerAd
if (authResult.isFinished()) {
connectionSession.setGrantee(new
Grantee(authResult.getUsername(), authResult.getHostname()));
connectionSession.setCurrentDatabase(authResult.getDatabase());
-
connectionSession.setProcessId(processEngine.connect(connectionSession.getGrantee(),
connectionSession.getDatabaseName()));
+
connectionSession.setProcessId(processEngine.connect(connectionSession.getConnectionContext().getGrantee(),
connectionSession.getDatabaseName()));
}
return authResult.isFinished();
// CHECKSTYLE:OFF
diff --git
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
index d7e0c694fbf..7b0ced74f6f 100644
---
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
+++
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandlerTest.java
@@ -106,7 +106,7 @@ class FrontendChannelInboundHandlerTest {
AuthenticationResult authenticationResult =
AuthenticationResultBuilder.finished("username", "hostname", "database");
when(authenticationEngine.authenticate(any(ChannelHandlerContext.class),
any(PacketPayload.class))).thenReturn(authenticationResult);
channel.writeInbound(Unpooled.EMPTY_BUFFER);
- assertThat(connectionSession.getGrantee(), is(new Grantee("username",
"hostname")));
+ assertThat(connectionSession.getConnectionContext().getGrantee(),
is(new Grantee("username", "hostname")));
assertThat(connectionSession.getDatabaseName(), is("database"));
}
diff --git
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
index 2cd3e22bb51..4a37f201084 100644
---
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
+++
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java
@@ -48,7 +48,7 @@ public final class MySQLComInitDbExecutor implements
CommandExecutor {
public Collection<DatabasePacket> execute() {
String databaseName = SQLUtils.getExactlyValue(packet.getSchema());
AuthorityRule authorityRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
- AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule, connectionSession.getGrantee());
+ AuthorityChecker authorityChecker = new
AuthorityChecker(authorityRule,
connectionSession.getConnectionContext().getGrantee());
ShardingSpherePreconditions.checkState(ProxyContext.getInstance().databaseExists(databaseName)
&& authorityChecker.isAuthorized(databaseName),
() -> new UnknownDatabaseException(packet.getSchema()));
connectionSession.setCurrentDatabase(packet.getSchema());
diff --git
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 152adbafb4b..51218969215 100644
---
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -137,7 +137,7 @@ public final class MySQLMultiStatementsHandler implements
ProxyBackendHandler {
Map<String, List<ExecutionUnit>> dataSourcesToExecutionUnits =
buildDataSourcesToExecutionUnits(executionContexts);
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
prepareEngine.prepare(executionContexts.iterator().next().getRouteContext(),
samplingExecutionUnit(dataSourcesToExecutionUnits),
- new
ExecutionGroupReportContext(connectionSession.getProcessId(),
connectionSession.getDatabaseName(), connectionSession.getGrantee()));
+ new
ExecutionGroupReportContext(connectionSession.getProcessId(),
connectionSession.getDatabaseName(),
connectionSession.getConnectionContext().getGrantee()));
for (ExecutionGroup<JDBCExecutionUnit> each :
executionGroupContext.getInputGroups()) {
for (JDBCExecutionUnit unit : each.getInputs()) {
prepareBatchedStatement(unit, dataSourcesToExecutionUnits);
diff --git
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index e93aeb006a3..2cd40359979 100644
---
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -153,7 +153,7 @@ public final class PostgreSQLBatchedStatementsExecutor {
connectionSession.getDatabaseConnectionManager(),
(JDBCBackendStatement) connectionSession.getStatementManager(),
new StatementOption(false), rules,
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnits());
executionGroupContext =
prepareEngine.prepare(anyExecutionContext.getRouteContext(),
executionUnitParams.keySet(),
- new
ExecutionGroupReportContext(connectionSession.getProcessId(),
connectionSession.getDatabaseName(), connectionSession.getGrantee()));
+ new
ExecutionGroupReportContext(connectionSession.getProcessId(),
connectionSession.getDatabaseName(),
connectionSession.getConnectionContext().getGrantee()));
for (ExecutionGroup<JDBCExecutionUnit> eachGroup :
executionGroupContext.getInputGroups()) {
for (JDBCExecutionUnit each : eachGroup.getInputs()) {
prepareJDBCExecutionUnit(each);