You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2025/09/16 00:26:37 UTC

(iotdb) branch master updated: Using Visitor design pattern to refactor the access control logical

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

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 33f1e360787 Using Visitor design pattern to refactor the access control logical
33f1e360787 is described below

commit 33f1e360787f711fe808364ec09f05ef4867b44b
Author: Jackie Tien <ja...@gmail.com>
AuthorDate: Tue Sep 16 08:26:32 2025 +0800

    Using Visitor design pattern to refactor the access control logical
---
 .../org/apache/iotdb/db/it/auth/IoTDBAuthIT.java   |    8 +-
 .../iotdb/db/it/auth/IoTDBClusterAuthorityIT.java  |   17 +-
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |    8 +
 .../org/apache/iotdb/db/auth/AuthorityChecker.java |   33 +-
 .../apache/iotdb/db/auth/IAuthorityFetcher.java    |    2 +-
 .../visitor/PipeStatementTSStatusVisitor.java      |    3 +-
 .../iotdb/db/queryengine/plan/Coordinator.java     |    5 +-
 .../db/queryengine/plan/parser/ASTVisitor.java     |    2 +-
 .../plan/relational/security/AccessControl.java    |   16 +
 .../relational/security/AccessControlImpl.java     |   24 +-
 .../relational/security/AllowAllAccessControl.java |   14 +
 .../relational/security/TableModelPrivilege.java   |   18 +
 .../security/TreeAccessCheckContext.java}          |   24 +-
 .../security/TreeAccessCheckVisitor.java           | 1078 ++++++++++++++++++++
 .../statement/AuthorityInformationStatement.java   |   21 +-
 .../db/queryengine/plan/statement/Statement.java   |    8 -
 .../plan/statement/StatementVisitor.java           |   19 +-
 .../plan/statement/crud/DeleteDataStatement.java   |   17 -
 .../plan/statement/crud/InsertBaseStatement.java   |   17 -
 .../plan/statement/crud/InsertStatement.java       |   17 -
 .../plan/statement/crud/LoadTsFileStatement.java   |    8 -
 .../plan/statement/crud/QueryStatement.java        |   18 -
 .../InternalBatchActivateTemplateStatement.java    |   17 -
 .../InternalCreateMultiTimeSeriesStatement.java    |   17 -
 .../InternalCreateTimeSeriesStatement.java         |   17 -
 .../metadata/AlterTimeSeriesStatement.java         |   15 -
 .../statement/metadata/CountDevicesStatement.java  |   25 -
 .../metadata/CountTimeSeriesStatement.java         |   25 -
 .../metadata/CountTimeSlotListStatement.java       |    7 -
 .../metadata/CreateAlignedTimeSeriesStatement.java |   17 -
 .../metadata/CreateContinuousQueryStatement.java   |   14 -
 .../metadata/CreateFunctionStatement.java          |   14 -
 .../metadata/CreateMultiTimeSeriesStatement.java   |   17 -
 .../metadata/CreateTimeSeriesStatement.java        |   15 -
 .../statement/metadata/CreateTriggerStatement.java |   14 -
 .../metadata/DatabaseSchemaStatement.java          |   14 -
 .../metadata/DeleteDatabaseStatement.java          |   14 -
 .../metadata/DeleteTimeSeriesStatement.java        |   17 -
 .../metadata/DropContinuousQueryStatement.java     |   14 -
 .../statement/metadata/DropFunctionStatement.java  |   14 -
 .../statement/metadata/DropTriggerStatement.java   |   14 -
 .../statement/metadata/GetRegionIdStatement.java   |    7 -
 .../metadata/GetSeriesSlotListStatement.java       |    7 -
 .../metadata/GetTimeSlotListStatement.java         |    7 -
 .../statement/metadata/RemoveAINodeStatement.java  |    7 -
 .../metadata/RemoveConfigNodeStatement.java        |    7 -
 .../metadata/RemoveDataNodeStatement.java          |    7 -
 .../plan/statement/metadata/SetTTLStatement.java   |   17 -
 .../statement/metadata/ShowClusterIdStatement.java |    7 -
 .../statement/metadata/ShowClusterStatement.java   |    7 -
 .../metadata/ShowConfigNodesStatement.java         |    7 -
 .../metadata/ShowContinuousQueriesStatement.java   |   14 -
 .../statement/metadata/ShowDataNodesStatement.java |    7 -
 .../statement/metadata/ShowDevicesStatement.java   |   25 -
 .../statement/metadata/ShowFunctionsStatement.java |   14 -
 .../statement/metadata/ShowRegionStatement.java    |    7 -
 .../metadata/ShowTimeSeriesStatement.java          |   25 -
 .../statement/metadata/ShowTriggersStatement.java  |   14 -
 .../statement/metadata/ShowVariablesStatement.java |    7 -
 .../metadata/model/CreateModelStatement.java       |   14 -
 .../metadata/model/DropModelStatement.java         |   14 -
 .../metadata/model/ShowAINodesStatement.java       |    7 -
 .../metadata/model/ShowModelsStatement.java        |   14 -
 .../metadata/pipe/AlterPipeStatement.java          |   14 -
 .../metadata/pipe/CreatePipePluginStatement.java   |   14 -
 .../metadata/pipe/CreatePipeStatement.java         |   14 -
 .../metadata/pipe/DropPipePluginStatement.java     |   14 -
 .../statement/metadata/pipe/DropPipeStatement.java |   14 -
 .../metadata/pipe/ShowPipePluginsStatement.java    |   14 -
 .../metadata/pipe/ShowPipesStatement.java          |   14 -
 .../metadata/pipe/StartPipeStatement.java          |   14 -
 .../statement/metadata/pipe/StopPipeStatement.java |   14 -
 .../metadata/region/ExtendRegionStatement.java     |    7 -
 .../metadata/region/MigrateRegionStatement.java    |    7 -
 .../region/ReconstructRegionStatement.java         |    7 -
 .../metadata/region/RemoveRegionStatement.java     |    7 -
 .../subscription/CreateTopicStatement.java         |   14 -
 .../subscription/DropSubscriptionStatement.java    |   14 -
 .../metadata/subscription/DropTopicStatement.java  |   14 -
 .../subscription/ShowSubscriptionsStatement.java   |   14 -
 .../metadata/subscription/ShowTopicsStatement.java |   14 -
 .../template/ActivateTemplateStatement.java        |   17 -
 .../template/BatchActivateTemplateStatement.java   |   17 -
 .../template/DeactivateTemplateStatement.java      |   24 +-
 .../ShowNodesInSchemaTemplateStatement.java        |    9 -
 .../template/ShowPathSetTemplateStatement.java     |    9 -
 .../template/ShowSchemaTemplateStatement.java      |    9 -
 .../metadata/view/AlterLogicalViewStatement.java   |   39 -
 .../metadata/view/CreateLogicalViewStatement.java  |   52 +-
 .../metadata/view/DeleteLogicalViewStatement.java  |   17 -
 .../metadata/view/RenameLogicalViewStatement.java  |   19 -
 .../plan/statement/sys/AuthorStatement.java        |  135 ---
 .../statement/sys/ExplainAnalyzeStatement.java     |    6 -
 .../plan/statement/sys/KillQueryStatement.java     |    7 -
 .../plan/statement/sys/SetSqlDialectStatement.java |    8 -
 .../sys/ShowCurrentSqlDialectStatement.java        |    8 -
 .../statement/sys/ShowCurrentUserStatement.java    |    8 -
 .../plan/statement/sys/ShowQueriesStatement.java   |    7 -
 .../plan/statement/sys/ShowVersionStatement.java   |    8 -
 .../statement/sys/TestConnectionStatement.java     |    7 -
 ...vertedInsertTabletStatementTSStatusVisitor.java |    3 +-
 .../org/apache/iotdb/db/auth/entity/RoleTest.java  |   16 +-
 .../plan/parser/StatementGeneratorTest.java        |    8 +-
 .../plan/relational/analyzer/AuthTest.java         |   14 +-
 .../iotdb/commons/auth/entity/PrivilegeType.java   |   21 +-
 .../org/apache/iotdb/commons/auth/entity/Role.java |    3 +-
 .../iotdb/commons/auth/user/BasicUserManager.java  |    3 +
 .../org/apache/iotdb/commons/utils/AuthUtils.java  |   33 +
 .../db/relational/grammar/sql/RelationalSql.g4     |    1 +
 109 files changed, 1316 insertions(+), 1336 deletions(-)

diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
index 0d963f9e1a4..c15d84651df 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
@@ -993,7 +993,7 @@ public class IoTDBAuthIT {
 
     // 2. USER1 has all privileges on root.**
     for (PrivilegeType item : PrivilegeType.values()) {
-      if (item.isRelationalPrivilege()) {
+      if (item.isRelationalPrivilege() || item.isAdminPrivilege()) {
         continue;
       }
       String sql = "GRANT %s on root.** to USER user1";
@@ -1020,7 +1020,7 @@ public class IoTDBAuthIT {
 
     // 4. USER2 has all privilegs on root.** with grant option;
     for (PrivilegeType item : PrivilegeType.values()) {
-      if (item.isRelationalPrivilege()) {
+      if (item.isRelationalPrivilege() || item.isAdminPrivilege()) {
         continue;
       }
       String sql = "GRANT %s on root.** to USER user2 with grant option";
@@ -1150,7 +1150,7 @@ public class IoTDBAuthIT {
     //    user2 has all privileges without grant option on root.**
     //    user2 has all privileges without grant option on root.t1.**
     for (PrivilegeType item : PrivilegeType.values()) {
-      if (item.isRelationalPrivilege()) {
+      if (item.isRelationalPrivilege() || item.isAdminPrivilege()) {
         continue;
       }
       String sql = "GRANT %s on root.** to USER user1 WITH GRANT OPTION";
@@ -1168,7 +1168,7 @@ public class IoTDBAuthIT {
     try {
       // revoke privileges on root.** and root.t1.**
       for (PrivilegeType item : PrivilegeType.values()) {
-        if (item.isRelationalPrivilege()) {
+        if (item.isRelationalPrivilege() || item.isAdminPrivilege()) {
           continue;
         }
         user1Stmt.execute(String.format("REVOKE %s ON root.** FROM USER user2", item));
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java
index cbaa0690114..b867160dd45 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java
@@ -465,19 +465,16 @@ public class IoTDBClusterAuthorityIT {
               .size());
       assertEquals(
           PrivilegeType.getPrivilegeCount(PrivilegeModelType.SYSTEM),
-          authorizerResp
-              .getPermissionInfo()
-              .getUserInfo()
-              .getPermissionInfo()
-              .getSysPriSet()
-              .size());
+          authorizerResp.getPermissionInfo().getUserInfo().getPermissionInfo().getSysPriSet().size()
+              + 3);
       assertEquals(
           PrivilegeType.getPrivilegeCount(PrivilegeModelType.SYSTEM),
           authorizerResp
-              .getPermissionInfo()
-              .getUserInfo()
-              .getPermissionInfo()
-              .getSysPriSetGrantOptSize());
+                  .getPermissionInfo()
+                  .getUserInfo()
+                  .getPermissionInfo()
+                  .getSysPriSetGrantOptSize()
+              + 3);
 
       authorizerReq =
           new TAuthorizerReq(
diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
index 72b4001390d..4a5708817a7 100644
--- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
+++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
@@ -1138,6 +1138,14 @@ MAINTAIN
     : M A I N T A I N
     ;
 
+SECURITY
+    : S E C U R I T Y
+    ;
+
+AUDIT
+    : A U D I T
+    ;
+
 REPAIR
     : R E P A I R
     ;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
index 71f064008df..504e0250186 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
@@ -38,6 +38,9 @@ import org.apache.iotdb.db.pipe.source.dataregion.realtime.listener.PipeInsertio
 import org.apache.iotdb.db.protocol.session.IClientSession;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
+import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControlImpl;
+import org.apache.iotdb.db.queryengine.plan.relational.security.ITableAuthCheckerImpl;
+import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
@@ -55,6 +58,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.StringJoiner;
 import java.util.stream.Collectors;
 
 import static org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.LIST_USER_OR_ROLE_PRIVILEGES_COLUMN_HEADERS;
@@ -63,7 +67,7 @@ import static org.apache.iotdb.commons.schema.column.ColumnHeaderConstant.LIST_U
 // It checks permission in local. DCL statement will send to configNode.
 public class AuthorityChecker {
 
-  public static final String SUPER_USER = CommonDescriptor.getInstance().getConfig().getAdminName();
+  public static String SUPER_USER = CommonDescriptor.getInstance().getConfig().getAdminName();
 
   public static final TSStatus SUCCEED = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
 
@@ -82,10 +86,25 @@ public class AuthorityChecker {
   private static final PerformanceOverviewMetrics PERFORMANCE_OVERVIEW_METRICS =
       PerformanceOverviewMetrics.getInstance();
 
+  private static AccessControlImpl accessControl =
+      new AccessControlImpl(new ITableAuthCheckerImpl(), new TreeAccessCheckVisitor());
+
   private AuthorityChecker() {
     // empty constructor
   }
 
+  public static AccessControlImpl getAccessControl() {
+    return accessControl;
+  }
+
+  public static void setAccessControl(AccessControlImpl accessControl) {
+    AuthorityChecker.accessControl = accessControl;
+  }
+
+  public static void setSuperUser(String superUser) {
+    SUPER_USER = superUser;
+  }
+
   public static IAuthorityFetcher getAuthorityFetcher() {
     return authorityFetcher.get();
   }
@@ -122,7 +141,7 @@ public class AuthorityChecker {
   public static TSStatus checkAuthority(Statement statement, IClientSession session) {
     long startTime = System.nanoTime();
     try {
-      return statement.checkPermissionBeforeProcess(session.getUsername());
+      return accessControl.checkPermissionBeforeProcess(statement, session.getUsername());
     } finally {
       PERFORMANCE_OVERVIEW_METRICS.recordAuthCost(System.nanoTime() - startTime);
     }
@@ -131,7 +150,7 @@ public class AuthorityChecker {
   public static TSStatus checkAuthority(Statement statement, String userName) {
     long startTime = System.nanoTime();
     try {
-      return statement.checkPermissionBeforeProcess(userName);
+      return accessControl.checkPermissionBeforeProcess(statement, userName);
     } finally {
       PERFORMANCE_OVERVIEW_METRICS.recordAuthCost(System.nanoTime() - startTime);
     }
@@ -157,6 +176,14 @@ public class AuthorityChecker {
             .setMessage(NO_PERMISSION_PROMOTION + neededPrivilege);
   }
 
+  private static String getSatisfyAnyNeededPrivilegeString(List<PrivilegeType> privileges) {
+    StringJoiner sj = new StringJoiner("/");
+    for (PrivilegeType privilege : privileges) {
+      sj.add(privilege.toString());
+    }
+    return sj.toString();
+  }
+
   public static TSStatus getGrantOptTSStatus(
       boolean hasPermission, PrivilegeType neededPrivilege, String database) {
     return hasPermission
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/IAuthorityFetcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/IAuthorityFetcher.java
index 6b93c211fd6..51b9212cf45 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/IAuthorityFetcher.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/IAuthorityFetcher.java
@@ -45,7 +45,7 @@ public interface IAuthorityFetcher {
   TSStatus checkUserPathPrivilegesGrantOpt(
       String username, List<? extends PartialPath> allPath, PrivilegeType permission);
 
-  TSStatus checkUserSysPrivileges(String username, PrivilegeType permission);
+  TSStatus checkUserSysPrivileges(String username, PrivilegeType permissions);
 
   TSStatus checkUserDBPrivileges(String username, String database, PrivilegeType permission);
 
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
index 0874857c3f7..8d7a567fce0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
@@ -95,7 +95,8 @@ public class PipeStatementTSStatusVisitor extends StatementVisitor<TSStatus, TSS
     return visitInsertBase(insertMultiTabletsStatement, context);
   }
 
-  private TSStatus visitInsertBase(
+  @Override
+  public TSStatus visitInsertBase(
       final InsertBaseStatement insertBaseStatement, final TSStatus context) {
     if (context.getCode() == TSStatusCode.SYSTEM_READ_ONLY.getStatusCode()
         || context.getCode() == TSStatusCode.WRITE_PROCESS_REJECT.getStatusCode()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 2e1132b984f..e179157ff4d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.conf.CommonConfig;
 import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.protocol.session.IClientSession;
@@ -56,8 +57,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.Dis
 import org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.LogicalOptimizeFactory;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PlanOptimizer;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
-import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControlImpl;
-import org.apache.iotdb.db.queryengine.plan.relational.security.ITableAuthCheckerImpl;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AddColumn;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AlterDB;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ClearCache;
@@ -204,7 +203,7 @@ public class Coordinator {
             dispatchThreadNum,
             dispatchThreadNum,
             new ThreadPoolExecutor.CallerRunsPolicy());
-    this.accessControl = new AccessControlImpl(new ITableAuthCheckerImpl());
+    this.accessControl = AuthorityChecker.getAccessControl();
     this.statementRewrite = new StatementRewriteFactory().getStatementRewrite();
     this.logicalPlanOptimizers =
         new LogicalOptimizeFactory(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
index f7ee6b7c634..06c6d345d09 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
@@ -2659,7 +2659,7 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
         continue;
       } else if (priv.equalsIgnoreCase("ALL")) {
         for (PrivilegeType type : PrivilegeType.values()) {
-          if (type.isRelationalPrivilege()) {
+          if (type.isRelationalPrivilege() || type.isAdminPrivilege()) {
             continue;
           }
           privSet.add(type.toString());
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
index 739680b47fb..b91c75b0407 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
@@ -19,13 +19,17 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.security;
 
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 
 public interface AccessControl {
 
+  // ====================================== TABLE =============================================
+
   /**
    * Check if user is allowed to create the specified database.
    *
@@ -162,4 +166,16 @@ public interface AccessControl {
    * @throws AccessDeniedException if not allowed
    */
   void checkUserIsAdmin(String userName);
+
+  /**
+   * Check if user has global SYSTEM privilege
+   *
+   * @param userName name of user
+   * @throws AccessDeniedException if not allowed
+   */
+  void checkUserGlobalSysPrivilege(String userName);
+
+  // ====================================== TREE =============================================
+
+  TSStatus checkPermissionBeforeProcess(Statement statement, String userName);
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
index abfb7e48901..50c8d9b2e87 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
@@ -29,6 +29,9 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.type.AuthorRType;
+import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
 import org.apache.iotdb.db.schemaengine.table.InformationSchemaUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 
@@ -40,8 +43,12 @@ public class AccessControlImpl implements AccessControl {
 
   private final ITableAuthChecker authChecker;
 
-  public AccessControlImpl(ITableAuthChecker authChecker) {
+  private final StatementVisitor<TSStatus, TreeAccessCheckContext> treeAccessCheckVisitor;
+
+  public AccessControlImpl(
+      ITableAuthChecker authChecker, StatementVisitor<TSStatus, TreeAccessCheckContext> visitor) {
     this.authChecker = authChecker;
+    this.treeAccessCheckVisitor = visitor;
   }
 
   @Override
@@ -358,4 +365,19 @@ public class AccessControlImpl implements AccessControl {
       throw new AccessDeniedException(ONLY_ADMIN_ALLOWED);
     }
   }
+
+  @Override
+  public void checkUserGlobalSysPrivilege(String userName) {
+    if (!AuthorityChecker.SUPER_USER.equals(userName)) {
+      authChecker.checkGlobalPrivilege(userName, TableModelPrivilege.SYSTEM);
+    }
+  }
+
+  @Override
+  public TSStatus checkPermissionBeforeProcess(Statement statement, String userName) {
+    if (AuthorityChecker.SUPER_USER.equals(userName) && !(statement instanceof AuthorStatement)) {
+      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    }
+    return treeAccessCheckVisitor.process(statement, new TreeAccessCheckContext(userName));
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
index c48533c231a..c6f8237b2c9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AllowAllAccessControl.java
@@ -19,9 +19,13 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.security;
 
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RelationalAuthorStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+
+import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
 
 public class AllowAllAccessControl implements AccessControl {
   @Override
@@ -104,4 +108,14 @@ public class AllowAllAccessControl implements AccessControl {
   public void checkUserIsAdmin(String userName) {
     // allow anything
   }
+
+  @Override
+  public void checkUserGlobalSysPrivilege(String userName) {
+    // allow anything
+  }
+
+  @Override
+  public TSStatus checkPermissionBeforeProcess(Statement statement, String userName) {
+    return SUCCEED;
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TableModelPrivilege.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TableModelPrivilege.java
index d8ec3d437a0..3372d3af75f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TableModelPrivilege.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TableModelPrivilege.java
@@ -23,9 +23,15 @@ import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 
 public enum TableModelPrivilege {
   // global privilege
+  @Deprecated
   MANAGE_USER,
+  @Deprecated
   MANAGE_ROLE,
 
+  SYSTEM,
+  SECURITY,
+  AUDIT,
+
   // scope privilege
   CREATE,
   DROP,
@@ -52,6 +58,12 @@ public enum TableModelPrivilege {
         return PrivilegeType.INSERT;
       case DELETE:
         return PrivilegeType.DELETE;
+      case SYSTEM:
+        return PrivilegeType.SYSTEM;
+      case SECURITY:
+        return PrivilegeType.SECURITY;
+      case AUDIT:
+        return PrivilegeType.AUDIT;
       default:
         throw new IllegalStateException("Unexpected value:" + this);
     }
@@ -75,6 +87,12 @@ public enum TableModelPrivilege {
         return TableModelPrivilege.INSERT;
       case DELETE:
         return TableModelPrivilege.DELETE;
+      case SYSTEM:
+        return TableModelPrivilege.SYSTEM;
+      case SECURITY:
+        return TableModelPrivilege.SECURITY;
+      case AUDIT:
+        return TableModelPrivilege.AUDIT;
       default:
         throw new IllegalStateException("Unexpected value:" + privilegeType);
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
similarity index 54%
copy from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java
copy to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
index 69825844311..231f49332eb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckContext.java
@@ -17,27 +17,13 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.statement.sys;
+package org.apache.iotdb.db.queryengine.plan.relational.security;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
+public class TreeAccessCheckContext {
 
-import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
+  final String userName;
 
-public class ShowVersionStatement extends ShowStatement {
-
-  public ShowVersionStatement() {
-    // do nothing
-  }
-
-  @Override
-  public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
-    return visitor.visitShowVersion(this, context);
-  }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return SUCCEED;
+  public TreeAccessCheckContext(String userName) {
+    this.userName = userName;
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
new file mode 100644
index 00000000000..59dac2ae372
--- /dev/null
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java
@@ -0,0 +1,1078 @@
+/*
+ * 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.iotdb.db.queryengine.plan.relational.security;
+
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
+import org.apache.iotdb.commons.auth.AuthException;
+import org.apache.iotdb.commons.auth.entity.PrivilegeType;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.path.PathPatternTreeUtils;
+import org.apache.iotdb.db.auth.AuthorityChecker;
+import org.apache.iotdb.db.queryengine.plan.statement.AuthorType;
+import org.apache.iotdb.db.queryengine.plan.statement.AuthorityInformationStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementNode;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.DeleteDataStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.internal.InternalBatchActivateTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.internal.InternalCreateMultiTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.internal.InternalCreateTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.AlterTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDatabaseStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDevicesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CountLevelTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CountNodesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotListStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateAlignedTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateContinuousQueryStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateFunctionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateMultiTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateTriggerStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.DeleteDatabaseStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.DeleteTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.DropContinuousQueryStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.DropFunctionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.DropTriggerStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.GetRegionIdStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.GetSeriesSlotListStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.GetTimeSlotListStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveAINodeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveConfigNodeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveDataNodeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.SetTTLStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowChildNodesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowChildPathsStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowClusterIdStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowClusterStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowConfigNodesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowContinuousQueriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowCurrentTimestampStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDataNodesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDatabaseStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDevicesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowFunctionsStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowRegionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowTTLStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowTimeSeriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowTriggersStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowVariablesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.UnSetTTLStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.CreateModelStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.DropModelStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowAINodesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowModelsStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.AlterPipeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.CreatePipePluginStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.CreatePipeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.DropPipePluginStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.DropPipeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.ShowPipePluginsStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.ShowPipesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.StartPipeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.StopPipeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.region.ExtendRegionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.region.MigrateRegionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.region.ReconstructRegionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.region.RemoveRegionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription.CreateTopicStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription.DropSubscriptionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription.DropTopicStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription.ShowSubscriptionsStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription.ShowTopicsStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ActivateTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.AlterSchemaTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.BatchActivateTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.CreateSchemaTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.DropSchemaTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.SetSchemaTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ShowPathSetTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ShowPathsUsingTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ShowSchemaTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.template.UnsetSchemaTemplateStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.AlterLogicalViewStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.CreateLogicalViewStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.DeleteLogicalViewStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.RenameLogicalViewStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.ShowLogicalViewStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.ExplainAnalyzeStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.KillQueryStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSqlDialectStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowCurrentSqlDialectStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowCurrentUserStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowVersionStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.sys.TestConnectionStatement;
+import org.apache.iotdb.rpc.TSStatusCode;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
+
+/** userName in TreeAccessCheckContext will never be SUPER_USER */
+public class TreeAccessCheckVisitor extends StatementVisitor<TSStatus, TreeAccessCheckContext> {
+
+  @Override
+  public TSStatus visitNode(StatementNode node, TreeAccessCheckContext context) {
+    return AuthorityChecker.getTSStatus(false, "Only the admin user can perform this operation");
+  }
+
+  @Override
+  public TSStatus visitAuthorityInformation(
+      AuthorityInformationStatement statement, TreeAccessCheckContext context) {
+    try {
+      statement.setAuthorityScope(
+          AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_SCHEMA));
+    } catch (AuthException e) {
+      return new TSStatus(e.getCode().getStatusCode());
+    }
+    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+  }
+
+  // ====================== template related =================================
+
+  @Override
+  public TSStatus visitCreateSchemaTemplate(
+      CreateSchemaTemplateStatement createTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(createTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitSetSchemaTemplate(
+      SetSchemaTemplateStatement setSchemaTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(setSchemaTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitActivateTemplate(
+      ActivateTemplateStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitBatchActivateTemplate(
+      BatchActivateTemplateStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitInternalBatchActivateTemplate(
+      InternalBatchActivateTemplateStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitShowSchemaTemplate(
+      ShowSchemaTemplateStatement showSchemaTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(showSchemaTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitDeactivateTemplate(
+      DeactivateTemplateStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitUnsetSchemaTemplate(
+      UnsetSchemaTemplateStatement unsetSchemaTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(unsetSchemaTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitDropSchemaTemplate(
+      DropSchemaTemplateStatement dropSchemaTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(dropSchemaTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitAlterSchemaTemplate(
+      AlterSchemaTemplateStatement alterSchemaTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(alterSchemaTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitShowPathsUsingTemplate(
+      ShowPathsUsingTemplateStatement showPathsUsingTemplateStatement,
+      TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showPathsUsingTemplateStatement, context);
+  }
+
+  @Override
+  public TSStatus visitShowPathSetTemplate(
+      ShowPathSetTemplateStatement showPathSetTemplateStatement, TreeAccessCheckContext context) {
+    return visitNode(showPathSetTemplateStatement, context);
+  }
+
+  // ============================= timeseries view related ===============
+  @Override
+  public TSStatus visitCreateLogicalView(
+      CreateLogicalViewStatement statement, TreeAccessCheckContext context) {
+    TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    List<PartialPath> sourcePathList = statement.getSourcePaths().fullPathList;
+    if (sourcePathList != null) {
+      status =
+          AuthorityChecker.getTSStatus(
+              AuthorityChecker.checkFullPathOrPatternListPermission(
+                  context.userName, sourcePathList, PrivilegeType.READ_SCHEMA),
+              sourcePathList,
+              PrivilegeType.READ_SCHEMA);
+    }
+    QueryStatement queryStatement = statement.getQueryStatement();
+    if (queryStatement != null && status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+      sourcePathList = queryStatement.getPaths();
+      status =
+          AuthorityChecker.getTSStatus(
+              AuthorityChecker.checkFullPathOrPatternListPermission(
+                  context.userName, sourcePathList, PrivilegeType.READ_SCHEMA),
+              sourcePathList,
+              PrivilegeType.READ_SCHEMA);
+    }
+
+    final List<PartialPath> paths =
+        Objects.nonNull(statement.getTargetPathList())
+            ? statement.getTargetPathList()
+            : Collections.singletonList(
+                statement
+                    .getBatchGenerationItem()
+                    .getIntoDevice()
+                    .concatNode(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD));
+    if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+      return AuthorityChecker.getTSStatus(
+          AuthorityChecker.checkFullPathOrPatternListPermission(
+              context.userName, paths, PrivilegeType.WRITE_SCHEMA),
+          paths,
+          PrivilegeType.WRITE_SCHEMA);
+    }
+    return status;
+  }
+
+  @Override
+  public TSStatus visitDeleteLogicalView(
+      DeleteLogicalViewStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitShowLogicalView(
+      ShowLogicalViewStatement showLogicalViewStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showLogicalViewStatement, context);
+  }
+
+  @Override
+  public TSStatus visitAlterLogicalView(
+      AlterLogicalViewStatement statement, TreeAccessCheckContext context) {
+    TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    List<PartialPath> sourcePathList = statement.getSourcePaths().fullPathList;
+    if (sourcePathList != null) {
+      status =
+          AuthorityChecker.getTSStatus(
+              AuthorityChecker.checkFullPathOrPatternListPermission(
+                  context.userName, sourcePathList, PrivilegeType.READ_SCHEMA),
+              sourcePathList,
+              PrivilegeType.READ_SCHEMA);
+    }
+    QueryStatement queryStatement = statement.getQueryStatement();
+    if (queryStatement != null && status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+      sourcePathList = queryStatement.getPaths();
+      status =
+          AuthorityChecker.getTSStatus(
+              AuthorityChecker.checkFullPathOrPatternListPermission(
+                  context.userName, sourcePathList, PrivilegeType.READ_SCHEMA),
+              sourcePathList,
+              PrivilegeType.READ_SCHEMA);
+    }
+
+    if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+      return AuthorityChecker.getTSStatus(
+          AuthorityChecker.checkFullPathOrPatternListPermission(
+              context.userName, statement.getTargetPathList(), PrivilegeType.WRITE_SCHEMA),
+          statement.getTargetPathList(),
+          PrivilegeType.WRITE_SCHEMA);
+    }
+    return status;
+  }
+
+  @Override
+  public TSStatus visitRenameLogicalView(
+      RenameLogicalViewStatement statement, TreeAccessCheckContext context) {
+    List<PartialPath> checkedPaths =
+        ImmutableList.of(statement.getOldName(), statement.getNewName());
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkFullPathOrPatternListPermission(
+            context.userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
+        checkedPaths,
+        PrivilegeType.WRITE_SCHEMA);
+  }
+
+  // ===================================== security related ===============================
+  @Override
+  public TSStatus visitAuthor(AuthorStatement statement, TreeAccessCheckContext context) {
+    AuthorType authorType = statement.getAuthorType();
+    switch (authorType) {
+      case CREATE_USER:
+        if (AuthorityChecker.SUPER_USER.equals(statement.getUserName())) {
+          return AuthorityChecker.getTSStatus(
+              false, "Cannot create user has same name with admin user");
+        }
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        return AuthorityChecker.getTSStatus(
+            AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_USER),
+            PrivilegeType.MANAGE_USER);
+
+      case UPDATE_USER:
+        // users can change passwords of themselves
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)
+            || statement.getUserName().equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        return AuthorityChecker.getTSStatus(
+            AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_USER),
+            PrivilegeType.MANAGE_USER);
+
+      case DROP_USER:
+        if (AuthorityChecker.SUPER_USER.equals(statement.getUserName())
+            || statement.getUserName().equals(context.userName)) {
+          return AuthorityChecker.getTSStatus(false, "Cannot drop admin user or yourself");
+        }
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        return AuthorityChecker.getTSStatus(
+            AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_USER),
+            PrivilegeType.MANAGE_USER);
+
+      case LIST_USER:
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        return AuthorityChecker.getTSStatus(
+            AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_USER),
+            PrivilegeType.MANAGE_USER);
+
+      case LIST_USER_PRIVILEGE:
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)
+            || context.userName.equals(statement.getUserName())) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        return AuthorityChecker.getTSStatus(
+            AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_USER),
+            PrivilegeType.MANAGE_USER);
+
+      case LIST_ROLE_PRIVILEGE:
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        if (!AuthorityChecker.checkRole(context.userName, statement.getRoleName())) {
+          return AuthorityChecker.getTSStatus(
+              AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_ROLE),
+              PrivilegeType.MANAGE_ROLE);
+        } else {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+
+      case LIST_ROLE:
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        if (statement.getUserName() != null && context.userName.equals(statement.getUserName())) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        } else {
+          return AuthorityChecker.getTSStatus(
+              AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_ROLE),
+              PrivilegeType.MANAGE_ROLE);
+        }
+
+      case CREATE_ROLE:
+        if (AuthorityChecker.SUPER_USER.equals(statement.getRoleName())) {
+          return AuthorityChecker.getTSStatus(
+              false, "Cannot create role has same name with admin user");
+        }
+      case DROP_ROLE:
+      case GRANT_USER_ROLE:
+      case REVOKE_USER_ROLE:
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+        return AuthorityChecker.getTSStatus(
+            AuthorityChecker.checkSystemPermission(context.userName, PrivilegeType.MANAGE_ROLE),
+            PrivilegeType.MANAGE_ROLE);
+
+      case REVOKE_USER:
+      case GRANT_USER:
+      case GRANT_ROLE:
+      case REVOKE_ROLE:
+        if (AuthorityChecker.SUPER_USER.equals(statement.getUserName())) {
+          return AuthorityChecker.getTSStatus(
+              false, "Cannot grant/revoke privileges of admin user");
+        }
+        if (AuthorityChecker.SUPER_USER.equals(context.userName)) {
+          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+        }
+
+        for (String s : statement.getPrivilegeList()) {
+          PrivilegeType privilegeType = PrivilegeType.valueOf(s.toUpperCase());
+          if (privilegeType.isSystemPrivilege()) {
+            if (!AuthorityChecker.checkSystemPermissionGrantOption(
+                context.userName, privilegeType)) {
+              return AuthorityChecker.getTSStatus(
+                  false,
+                  "Has no permission to execute "
+                      + authorType
+                      + ", please ensure you have these privileges and the grant option is TRUE when granted)");
+            }
+          } else if (privilegeType.isPathPrivilege()) {
+            if (!AuthorityChecker.checkPathPermissionGrantOption(
+                context.userName, privilegeType, statement.getNodeNameList())) {
+              return AuthorityChecker.getTSStatus(
+                  false,
+                  "Has no permission to execute "
+                      + authorType
+                      + ", please ensure you have these privileges and the grant option is TRUE when granted)");
+            }
+          } else {
+            return AuthorityChecker.getTSStatus(
+                false, "Not support Relation statement in tree sql_dialect");
+          }
+        }
+        return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+      default:
+        throw new IllegalArgumentException("Unknown authorType: " + authorType);
+    }
+  }
+
+  // =================================== CQ related ====================================
+  @Override
+  public TSStatus visitCreateContinuousQuery(
+      CreateContinuousQueryStatement statement, TreeAccessCheckContext context) {
+    return checkCQManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropContinuousQuery(
+      DropContinuousQueryStatement statement, TreeAccessCheckContext context) {
+    return checkCQManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowContinuousQueries(
+      ShowContinuousQueriesStatement statement, TreeAccessCheckContext context) {
+    return checkCQManagement(context.userName);
+  }
+
+  private TSStatus checkCQManagement(String userName) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.SYSTEM)
+            || AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_CQ),
+        PrivilegeType.USE_CQ);
+  }
+
+  // =================================== UDF related ====================================
+  @Override
+  public TSStatus visitCreateFunction(
+      CreateFunctionStatement statement, TreeAccessCheckContext context) {
+    return checkUDFManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropFunction(
+      DropFunctionStatement statement, TreeAccessCheckContext context) {
+    return checkUDFManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowFunctions(
+      ShowFunctionsStatement statement, TreeAccessCheckContext context) {
+    return checkUDFManagement(context.userName);
+  }
+
+  private TSStatus checkUDFManagement(String userName) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.SYSTEM)
+            || AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_UDF),
+        PrivilegeType.USE_UDF);
+  }
+
+  // =================================== model related ====================================
+  @Override
+  public TSStatus visitCreateModel(CreateModelStatement statement, TreeAccessCheckContext context) {
+    return checkModelManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropModel(DropModelStatement statement, TreeAccessCheckContext context) {
+    return checkModelManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowModels(ShowModelsStatement statement, TreeAccessCheckContext context) {
+    return checkModelManagement(context.userName);
+  }
+
+  private TSStatus checkModelManagement(String userName) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.SYSTEM)
+            || AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_MODEL),
+        PrivilegeType.USE_MODEL);
+  }
+
+  // ================================ pipe plugin related ==================================
+  @Override
+  public TSStatus visitCreatePipePlugin(
+      CreatePipePluginStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropPipePlugin(
+      DropPipePluginStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowPipePlugins(
+      ShowPipePluginsStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  // =============================== pipe related ========================================
+
+  @Override
+  public TSStatus visitCreatePipe(CreatePipeStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowPipes(ShowPipesStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropPipe(DropPipeStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitAlterPipe(AlterPipeStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitStartPipe(StartPipeStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitStopPipe(StopPipeStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  private TSStatus checkPipeManagement(String userName) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.SYSTEM)
+            || AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
+        PrivilegeType.USE_PIPE);
+  }
+
+  // =============================== subscription related ========================================
+
+  @Override
+  public TSStatus visitCreateTopic(CreateTopicStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowTopics(ShowTopicsStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropTopic(DropTopicStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowSubscriptions(
+      ShowSubscriptionsStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropSubscription(
+      DropSubscriptionStatement statement, TreeAccessCheckContext context) {
+    return checkPipeManagement(context.userName);
+  }
+
+  // ======================= trigger related ================================
+  @Override
+  public TSStatus visitCreateTrigger(
+      CreateTriggerStatement statement, TreeAccessCheckContext context) {
+    return checkTriggerManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitDropTrigger(DropTriggerStatement statement, TreeAccessCheckContext context) {
+    return checkTriggerManagement(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowTriggers(
+      ShowTriggersStatement statement, TreeAccessCheckContext context) {
+    return checkTriggerManagement(context.userName);
+  }
+
+  private TSStatus checkTriggerManagement(String userName) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.SYSTEM)
+            || AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_TRIGGER),
+        PrivilegeType.USE_TRIGGER);
+  }
+
+  // ============================== database related ===========================
+  @Override
+  public TSStatus visitSetDatabase(
+      DatabaseSchemaStatement statement, TreeAccessCheckContext context) {
+    return checkCreateOrAlterDatabasePermission(context.userName);
+  }
+
+  @Override
+  public TSStatus visitAlterDatabase(
+      DatabaseSchemaStatement databaseSchemaStatement, TreeAccessCheckContext context) {
+    return checkCreateOrAlterDatabasePermission(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowStorageGroup(
+      ShowDatabaseStatement showDatabaseStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showDatabaseStatement, context);
+  }
+
+  @Override
+  public TSStatus visitCountStorageGroup(
+      CountDatabaseStatement countDatabaseStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(countDatabaseStatement, context);
+  }
+
+  @Override
+  public TSStatus visitDeleteStorageGroup(
+      DeleteDatabaseStatement statement, TreeAccessCheckContext context) {
+    return checkCreateOrAlterDatabasePermission(context.userName);
+  }
+
+  private TSStatus checkCreateOrAlterDatabasePermission(String userName) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_DATABASE),
+        PrivilegeType.MANAGE_DATABASE);
+  }
+
+  // ==================================== data related ========================================
+  @Override
+  public TSStatus visitInsertBase(InsertBaseStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName,
+        statement.getPaths().stream().distinct().collect(Collectors.toList()),
+        PrivilegeType.WRITE_DATA);
+  }
+
+  @Override
+  public TSStatus visitInsert(InsertStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_DATA);
+  }
+
+  @Override
+  public TSStatus visitLoadFile(LoadTsFileStatement statement, TreeAccessCheckContext context) {
+    // no need to check here, it will be checked in process phase
+    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+  }
+
+  @Override
+  public TSStatus visitDeleteData(DeleteDataStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_DATA);
+  }
+
+  @Override
+  public TSStatus visitQuery(QueryStatement statement, TreeAccessCheckContext context) {
+    try {
+      statement.setAuthorityScope(
+          AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_DATA));
+    } catch (AuthException e) {
+      return new TSStatus(e.getCode().getStatusCode());
+    }
+    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+  }
+
+  @Override
+  public TSStatus visitExplainAnalyze(
+      ExplainAnalyzeStatement statement, TreeAccessCheckContext context) {
+    return statement.getQueryStatement().accept(this, context);
+  }
+
+  // ============================= timeseries related =================================
+  private TSStatus checkTimeSeriesPermission(
+      String userName, List<? extends PartialPath> checkedPaths, PrivilegeType permission) {
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkFullPathOrPatternListPermission(userName, checkedPaths, permission),
+        checkedPaths,
+        permission);
+  }
+
+  @Override
+  public TSStatus visitCreateTimeseries(
+      CreateTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitCreateAlignedTimeseries(
+      CreateAlignedTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    List<PartialPath> checkedPaths = statement.getPaths();
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkFullPathOrPatternListPermission(
+            context.userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
+        checkedPaths,
+        PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitCreateMultiTimeSeries(
+      CreateMultiTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitInternalCreateMultiTimeSeries(
+      InternalCreateMultiTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitInternalCreateTimeseries(
+      InternalCreateTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitShowTimeSeries(
+      ShowTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    if (statement.hasTimeCondition()) {
+      try {
+        statement.setAuthorityScope(
+            PathPatternTreeUtils.intersectWithFullPathPrefixTree(
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_SCHEMA),
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_DATA)));
+      } catch (AuthException e) {
+        return new TSStatus(e.getCode().getStatusCode());
+      }
+      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    } else {
+      return visitAuthorityInformation(statement, context);
+    }
+  }
+
+  @Override
+  public TSStatus visitCountTimeSeries(
+      CountTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    if (statement.hasTimeCondition()) {
+      try {
+        statement.setAuthorityScope(
+            PathPatternTreeUtils.intersectWithFullPathPrefixTree(
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_SCHEMA),
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_DATA)));
+      } catch (AuthException e) {
+        return new TSStatus(e.getCode().getStatusCode());
+      }
+      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    } else {
+      return visitAuthorityInformation(statement, context);
+    }
+  }
+
+  @Override
+  public TSStatus visitCountLevelTimeSeries(
+      CountLevelTimeSeriesStatement countStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(countStatement, context);
+  }
+
+  @Override
+  public TSStatus visitCountNodes(
+      CountNodesStatement countStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(countStatement, context);
+  }
+
+  @Override
+  public TSStatus visitShowChildNodes(
+      ShowChildNodesStatement showChildNodesStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showChildNodesStatement, context);
+  }
+
+  @Override
+  public TSStatus visitShowChildPaths(
+      ShowChildPathsStatement showChildPathsStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showChildPathsStatement, context);
+  }
+
+  @Override
+  public TSStatus visitAlterTimeSeries(
+      AlterTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitDeleteTimeSeries(
+      DeleteTimeSeriesStatement statement, TreeAccessCheckContext context) {
+    return checkTimeSeriesPermission(
+        context.userName, statement.getPaths(), PrivilegeType.WRITE_SCHEMA);
+  }
+
+  // ================================== maintain related =============================
+  @Override
+  public TSStatus visitExtendRegion(
+      ExtendRegionStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitGetRegionId(GetRegionIdStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitGetSeriesSlotList(
+      GetSeriesSlotListStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitGetTimeSlotList(
+      GetTimeSlotListStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitCountTimeSlotList(
+      CountTimeSlotListStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitKillQuery(KillQueryStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitMigrateRegion(
+      MigrateRegionStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitReconstructRegion(
+      ReconstructRegionStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitRemoveAINode(
+      RemoveAINodeStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitRemoveConfigNode(
+      RemoveConfigNodeStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitRemoveDataNode(
+      RemoveDataNodeStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitRemoveRegion(
+      RemoveRegionStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitSetSqlDialect(
+      SetSqlDialectStatement statement, TreeAccessCheckContext context) {
+    return SUCCEED;
+  }
+
+  @Override
+  public TSStatus visitShowAINodes(ShowAINodesStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowClusterId(
+      ShowClusterIdStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowCluster(ShowClusterStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowConfigNodes(
+      ShowConfigNodesStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowCurrentSqlDialect(
+      ShowCurrentSqlDialectStatement statement, TreeAccessCheckContext context) {
+    return SUCCEED;
+  }
+
+  @Override
+  public TSStatus visitShowCurrentUser(
+      ShowCurrentUserStatement statement, TreeAccessCheckContext context) {
+    return SUCCEED;
+  }
+
+  @Override
+  public TSStatus visitShowDataNodes(
+      ShowDataNodesStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowQueries(ShowQueriesStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowRegion(ShowRegionStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowVariables(
+      ShowVariablesStatement statement, TreeAccessCheckContext context) {
+    return SUCCEED;
+  }
+
+  @Override
+  public TSStatus visitShowVersion(ShowVersionStatement statement, TreeAccessCheckContext context) {
+    return SUCCEED;
+  }
+
+  @Override
+  public TSStatus visitTestConnection(
+      TestConnectionStatement statement, TreeAccessCheckContext context) {
+    return AuthorityChecker.checkSuperUserOrMaintain(context.userName);
+  }
+
+  @Override
+  public TSStatus visitShowCurrentTimestamp(
+      ShowCurrentTimestampStatement showCurrentTimestampStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showCurrentTimestampStatement, context);
+  }
+
+  // ======================== TTL related ===========================
+  @Override
+  public TSStatus visitSetTTL(SetTTLStatement statement, TreeAccessCheckContext context) {
+    List<PartialPath> checkedPaths = statement.getPaths();
+    return AuthorityChecker.getTSStatus(
+        AuthorityChecker.checkFullPathOrPatternListPermission(
+            context.userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
+        checkedPaths,
+        PrivilegeType.WRITE_SCHEMA);
+  }
+
+  @Override
+  public TSStatus visitShowTTL(ShowTTLStatement showTTLStatement, TreeAccessCheckContext context) {
+    return visitAuthorityInformation(showTTLStatement, context);
+  }
+
+  @Override
+  public TSStatus visitUnSetTTL(
+      UnSetTTLStatement unSetTTLStatement, TreeAccessCheckContext context) {
+    return visitSetTTL(unSetTTLStatement, context);
+  }
+
+  // ================================= device related =============================
+  @Override
+  public TSStatus visitShowDevices(ShowDevicesStatement statement, TreeAccessCheckContext context) {
+    if (statement.hasTimeCondition()) {
+      try {
+        statement.setAuthorityScope(
+            PathPatternTreeUtils.intersectWithFullPathPrefixTree(
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_SCHEMA),
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_DATA)));
+      } catch (AuthException e) {
+        return new TSStatus(e.getCode().getStatusCode());
+      }
+      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    } else {
+      return visitAuthorityInformation(statement, context);
+    }
+  }
+
+  @Override
+  public TSStatus visitCountDevices(
+      CountDevicesStatement statement, TreeAccessCheckContext context) {
+    if (statement.hasTimeCondition()) {
+      try {
+        statement.setAuthorityScope(
+            PathPatternTreeUtils.intersectWithFullPathPrefixTree(
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_SCHEMA),
+                AuthorityChecker.getAuthorizedPathTree(context.userName, PrivilegeType.READ_DATA)));
+      } catch (AuthException e) {
+        return new TSStatus(e.getCode().getStatusCode());
+      }
+      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    } else {
+      return visitAuthorityInformation(statement, context);
+    }
+  }
+}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/AuthorityInformationStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/AuthorityInformationStatement.java
index 30552ee7269..df33dc16cf7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/AuthorityInformationStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/AuthorityInformationStatement.java
@@ -18,13 +18,8 @@
  */
 package org.apache.iotdb.db.queryengine.plan.statement;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PathPatternTree;
 import org.apache.iotdb.commons.schema.SchemaConstant;
-import org.apache.iotdb.db.auth.AuthorityChecker;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 public abstract class AuthorityInformationStatement extends Statement {
   protected PathPatternTree authorityScope = SchemaConstant.ALL_MATCH_SCOPE;
@@ -34,15 +29,11 @@ public abstract class AuthorityInformationStatement extends Statement {
   }
 
   @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    try {
-      if (!AuthorityChecker.SUPER_USER.equals(userName)) {
-        this.authorityScope =
-            AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_SCHEMA);
-      }
-    } catch (AuthException e) {
-      return new TSStatus(e.getCode().getStatusCode());
-    }
-    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+  public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
+    return visitor.visitAuthorityInformation(this, context);
+  }
+
+  public void setAuthorityScope(PathPatternTree authorityScope) {
+    this.authorityScope = authorityScope;
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/Statement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/Statement.java
index fc9aa1486a9..62d73c56c4c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/Statement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/Statement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.plan.parser.ASTVisitor;
 
@@ -62,12 +60,6 @@ public abstract class Statement extends StatementNode {
 
   public abstract List<? extends PartialPath> getPaths();
 
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.SUPER_USER.equals(userName),
-        "Only the admin user can perform this operation");
-  }
-
   public org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement toRelationalStatement(
       final MPPQueryContext context) {
     throw new UnsupportedOperationException("Method not implemented yet");
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
index 79ec9879683..3bafdf8bfe0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.queryengine.plan.statement;
 
 import org.apache.iotdb.db.queryengine.plan.statement.crud.DeleteDataStatement;
+import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsOfOneDeviceStatement;
@@ -344,8 +345,12 @@ public abstract class StatementVisitor<R, C> {
     return visitStatement(insertStatement, context);
   }
 
+  public R visitInsertBase(InsertBaseStatement insertStatement, C context) {
+    return visitStatement(insertStatement, context);
+  }
+
   public R visitInsertTablet(InsertTabletStatement insertTabletStatement, C context) {
-    return visitStatement(insertTabletStatement, context);
+    return visitInsertBase(insertTabletStatement, context);
   }
 
   public R visitLoadFile(LoadTsFileStatement loadTsFileStatement, C context) {
@@ -353,21 +358,21 @@ public abstract class StatementVisitor<R, C> {
   }
 
   public R visitInsertRow(InsertRowStatement insertRowStatement, C context) {
-    return visitStatement(insertRowStatement, context);
+    return visitInsertBase(insertRowStatement, context);
   }
 
   public R visitInsertRows(InsertRowsStatement insertRowsStatement, C context) {
-    return visitStatement(insertRowsStatement, context);
+    return visitInsertBase(insertRowsStatement, context);
   }
 
   public R visitInsertMultiTablets(
       InsertMultiTabletsStatement insertMultiTabletsStatement, C context) {
-    return visitStatement(insertMultiTabletsStatement, context);
+    return visitInsertBase(insertMultiTabletsStatement, context);
   }
 
   public R visitInsertRowsOfOneDevice(
       InsertRowsOfOneDeviceStatement insertRowsOfOneDeviceStatement, C context) {
-    return visitStatement(insertRowsOfOneDeviceStatement, context);
+    return visitInsertBase(insertRowsOfOneDeviceStatement, context);
   }
 
   public R visitPipeEnrichedStatement(PipeEnrichedStatement pipeEnrichedStatement, C context) {
@@ -721,4 +726,8 @@ public abstract class StatementVisitor<R, C> {
   public R visitCreateTraining(CreateTrainingStatement createTrainingStatement, C context) {
     return visitStatement(createTrainingStatement, context);
   }
+
+  public R visitAuthorityInformation(AuthorityInformationStatement statement, C context) {
+    return visitStatement(statement, context);
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/DeleteDataStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/DeleteDataStatement.java
index c2bc3416a3c..f57a5d7b623 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/DeleteDataStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/DeleteDataStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.crud;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.MeasurementPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.read.common.TimeRange;
 
@@ -48,19 +44,6 @@ public class DeleteDataStatement extends Statement {
     return getPathList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<MeasurementPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_DATA),
-        checkedPaths,
-        PrivilegeType.WRITE_DATA);
-  }
-
   public List<MeasurementPath> getPathList() {
     return pathList;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
index 950195c5248..2dc2118cd88 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
@@ -19,12 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.crud;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
 import org.apache.iotdb.db.exception.metadata.DuplicateInsertException;
@@ -40,7 +37,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.schemaengine.schemaregion.attribute.update.UpdateDetailContainer;
 import org.apache.iotdb.db.utils.CommonUtils;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.annotations.TableModel;
 import org.apache.tsfile.enums.TSDataType;
@@ -193,19 +189,6 @@ public abstract class InsertBaseStatement extends Statement implements Accountab
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths().stream().distinct().collect(Collectors.toList());
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_DATA),
-        checkedPaths,
-        PrivilegeType.WRITE_DATA);
-  }
-
   public abstract ISchemaValidation getSchemaValidation();
 
   public abstract List<ISchemaValidation> getSchemaValidationList();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertStatement.java
index 1019b65dfd8..e4460666af4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.crud;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -57,19 +53,6 @@ public class InsertStatement extends Statement {
     return ret;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_DATA),
-        checkedPaths,
-        PrivilegeType.WRITE_DATA);
-  }
-
   public PartialPath getDevice() {
     return device;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/LoadTsFileStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/LoadTsFileStatement.java
index abb42b74417..4c27796680b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/LoadTsFileStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/LoadTsFileStatement.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.crud;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
@@ -29,7 +28,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import org.apache.iotdb.db.storageengine.load.config.LoadTsFileConfigurator;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.annotations.TableModel;
 import org.apache.tsfile.common.constant.TsFileConstant;
@@ -312,12 +310,6 @@ public class LoadTsFileStatement extends Statement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    // no need to check here, it will be checked in process phase
-    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-  }
-
   @TableModel
   @Override
   public org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement toRelationalStatement(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java
index ba4ac07ae87..d966903abd3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java
@@ -19,11 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.crud;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.execution.operator.window.WindowType;
 import org.apache.iotdb.db.queryengine.execution.operator.window.ainode.InferenceWindow;
@@ -50,7 +46,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.ResultSetFormat;
 import org.apache.iotdb.db.queryengine.plan.statement.component.SelectComponent;
 import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
 import org.apache.iotdb.db.queryengine.plan.statement.component.WhereCondition;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -217,19 +212,6 @@ public class QueryStatement extends AuthorityInformationStatement {
     return new ArrayList<>(authPaths);
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    try {
-      if (!AuthorityChecker.SUPER_USER.equals(userName)) {
-        this.authorityScope =
-            AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_DATA);
-      }
-    } catch (AuthException e) {
-      return new TSStatus(e.getCode().getStatusCode());
-    }
-    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-  }
-
   public SelectComponent getSelectComponent() {
     return selectComponent;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java
index fb4e8d7ebd8..7b7a19a9a8e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalBatchActivateTemplateStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.internal;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
 import org.apache.iotdb.db.schemaengine.template.Template;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.utils.Pair;
 
@@ -71,19 +67,6 @@ public class InternalBatchActivateTemplateStatement extends Statement {
         .collect(Collectors.toList());
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitInternalBatchActivateTemplate(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateMultiTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateMultiTimeSeriesStatement.java
index 168cfeed76b..baee566130e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateMultiTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateMultiTimeSeriesStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.internal;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.MeasurementGroup;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.utils.Pair;
 
@@ -60,19 +56,6 @@ public class InternalCreateMultiTimeSeriesStatement extends Statement {
         .collect(Collectors.toList());
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitInternalCreateMultiTimeSeries(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateTimeSeriesStatement.java
index 9327ba038bc..8e6c16663f0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/internal/InternalCreateTimeSeriesStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.internal;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -95,19 +91,6 @@ public class InternalCreateTimeSeriesStatement extends Statement {
         .collect(Collectors.toList());
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitInternalCreateTimeseries(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
index f3e96cc09ce..5913fb9c2fd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -134,17 +130,6 @@ public class AlterTimeSeriesStatement extends Statement {
     return isAlterView;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternPermission(
-            userName, path, PrivilegeType.WRITE_SCHEMA),
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitAlterTimeSeries(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDevicesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDevicesStatement.java
index 05d4c6384a2..06d32f7c9b5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDevicesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountDevicesStatement.java
@@ -19,15 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTreeUtils;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.component.WhereCondition;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 public class CountDevicesStatement extends CountStatement {
 
@@ -49,25 +43,6 @@ public class CountDevicesStatement extends CountStatement {
     return timeCondition != null;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (hasTimeCondition()) {
-      try {
-        if (!AuthorityChecker.SUPER_USER.equals(userName)) {
-          this.authorityScope =
-              PathPatternTreeUtils.intersectWithFullPathPrefixTree(
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_SCHEMA),
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_DATA));
-        }
-      } catch (AuthException e) {
-        return new TSStatus(e.getCode().getStatusCode());
-      }
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    } else {
-      return super.checkPermissionBeforeProcess(userName);
-    }
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCountDevices(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSeriesStatement.java
index f116e190092..c7c259030a9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSeriesStatement.java
@@ -19,16 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTreeUtils;
 import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.component.WhereCondition;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 public class CountTimeSeriesStatement extends CountStatement {
 
@@ -60,25 +54,6 @@ public class CountTimeSeriesStatement extends CountStatement {
     return timeCondition;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (hasTimeCondition()) {
-      try {
-        if (!AuthorityChecker.SUPER_USER.equals(userName)) {
-          this.authorityScope =
-              PathPatternTreeUtils.intersectWithFullPathPrefixTree(
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_SCHEMA),
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_DATA));
-        }
-      } catch (AuthException e) {
-        return new TSStatus(e.getCode().getStatusCode());
-      }
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    } else {
-      return super.checkPermissionBeforeProcess(userName);
-    }
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCountTimeSeries(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java
index 40110bdf2a5..1d93c663d7a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java
@@ -19,10 +19,8 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -116,9 +114,4 @@ public class CountTimeSlotListStatement extends Statement implements IConfigStat
       return new ArrayList<>();
     }
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateAlignedTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateAlignedTimeSeriesStatement.java
index 600b87c19fe..576b198401a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateAlignedTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateAlignedTimeSeriesStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -70,19 +66,6 @@ public class CreateAlignedTimeSeriesStatement extends Statement {
     return paths;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public PartialPath getDevicePath() {
     return devicePath;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateContinuousQueryStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateContinuousQueryStatement.java
index fb8ba32b7b5..92cd2e05722 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateContinuousQueryStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateContinuousQueryStatement.java
@@ -19,11 +19,8 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.cq.TimeoutPolicy;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.plan.analyze.PredicateUtils;
@@ -34,7 +31,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.component.GroupByTimeComponent;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -167,16 +163,6 @@ public class CreateContinuousQueryStatement extends Statement implements IConfig
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_CQ),
-        PrivilegeType.USE_CQ);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCreateContinuousQuery(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateFunctionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateFunctionStatement.java
index 4859a6c596e..baa7a4a295b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateFunctionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateFunctionStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -74,14 +70,4 @@ public class CreateFunctionStatement extends Statement implements IConfigStateme
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_UDF),
-        PrivilegeType.USE_UDF);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
index 3a4e4c7b7b8..c380e7956a6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.MeasurementPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -58,19 +54,6 @@ public class CreateMultiTimeSeriesStatement extends Statement {
     return paths;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<MeasurementPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public void setPaths(List<MeasurementPath> paths) {
     this.paths = paths;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTimeSeriesStatement.java
index bd9b602fd97..b053bd97c02 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTimeSeriesStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -67,17 +63,6 @@ public class CreateTimeSeriesStatement extends Statement {
     return Collections.singletonList(path);
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternPermission(
-            userName, path, PrivilegeType.WRITE_SCHEMA),
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public MeasurementPath getPath() {
     return path;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTriggerStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTriggerStatement.java
index cf35785af48..2a1affe577e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTriggerStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateTriggerStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.trigger.api.enums.TriggerEvent;
 import org.apache.iotdb.trigger.api.enums.TriggerType;
 
@@ -121,14 +117,4 @@ public class CreateTriggerStatement extends Statement implements IConfigStatemen
   public List<PartialPath> getPaths() {
     return Collections.singletonList(pathPattern);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_TRIGGER),
-        PrivilegeType.USE_TRIGGER);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DatabaseSchemaStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DatabaseSchemaStatement.java
index 3efd42e5758..53ff33e2437 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DatabaseSchemaStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DatabaseSchemaStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -143,16 +139,6 @@ public class DatabaseSchemaStatement extends Statement implements IConfigStateme
     return databasePath != null ? Collections.singletonList(databasePath) : Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_DATABASE),
-        PrivilegeType.MANAGE_DATABASE);
-  }
-
   @Override
   public String toString() {
     return "SetStorageGroupStatement{"
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java
index 33786815e16..9861331974b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteDatabaseStatement.java
@@ -19,17 +19,13 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,16 +57,6 @@ public class DeleteDatabaseStatement extends Statement implements IConfigStateme
     return paths;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_DATABASE),
-        PrivilegeType.MANAGE_DATABASE);
-  }
-
   public List<String> getPrefixPath() {
     return prefixPathList;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
index 1c5e38be438..f8428d4e026 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.List;
 
@@ -51,19 +47,6 @@ public class DeleteTimeSeriesStatement extends Statement implements IConfigState
     return pathPatternList;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public List<PartialPath> getPathPatternList() {
     return pathPatternList;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropContinuousQueryStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropContinuousQueryStatement.java
index 695e489ddc9..12932d8a8d0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropContinuousQueryStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropContinuousQueryStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -61,14 +57,4 @@ public class DropContinuousQueryStatement extends Statement implements IConfigSt
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitDropContinuousQuery(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_CQ),
-        PrivilegeType.USE_CQ);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropFunctionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropFunctionStatement.java
index ec777e44d49..14a7d8b6868 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropFunctionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropFunctionStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -61,14 +57,4 @@ public class DropFunctionStatement extends Statement implements IConfigStatement
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_UDF),
-        PrivilegeType.USE_UDF);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropTriggerStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropTriggerStatement.java
index 3b3cb648391..96a07a11635 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropTriggerStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropTriggerStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -60,14 +56,4 @@ public class DropTriggerStatement extends Statement implements IConfigStatement
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_TRIGGER),
-        PrivilegeType.USE_TRIGGER);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java
index 280e658d54a..c7ba3784194 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java
@@ -20,10 +20,8 @@
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -121,9 +119,4 @@ public class GetRegionIdStatement extends Statement implements IConfigStatement
       return new ArrayList<>();
     }
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetSeriesSlotListStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetSeriesSlotListStatement.java
index 1c402f470e0..0cd67e6418a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetSeriesSlotListStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetSeriesSlotListStatement.java
@@ -20,10 +20,8 @@
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -77,9 +75,4 @@ public class GetSeriesSlotListStatement extends Statement implements IConfigStat
       return new ArrayList<>();
     }
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java
index 48da0c633a5..39d279c0ee6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java
@@ -19,10 +19,8 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -125,9 +123,4 @@ public class GetTimeSlotListStatement extends Statement implements IConfigStatem
       return new ArrayList<>();
     }
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveAINodeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveAINodeStatement.java
index 5b4b9f9ea46..b8ee3d6f08b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveAINodeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveAINodeStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -48,11 +46,6 @@ public class RemoveAINodeStatement extends Statement implements IConfigStatement
     return nodeId;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitRemoveAINode(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveConfigNodeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveConfigNodeStatement.java
index 3aac14ed831..3851ecb0e1e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveConfigNodeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveConfigNodeStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -42,11 +40,6 @@ public class RemoveConfigNodeStatement extends Statement implements IConfigState
     return nodeId;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitRemoveConfigNode(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveDataNodeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveDataNodeStatement.java
index 3fab79a7dd6..44a6ddc6907 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveDataNodeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/RemoveDataNodeStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -45,11 +43,6 @@ public class RemoveDataNodeStatement extends Statement implements IConfigStateme
     return nodeIds;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitRemoveDataNode(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/SetTTLStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/SetTTLStatement.java
index 3c78f52e9f9..c71a7ecb35e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/SetTTLStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/SetTTLStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -74,17 +70,4 @@ public class SetTTLStatement extends Statement implements IConfigStatement {
         ? Collections.singletonList(path)
         : Collections.singletonList(new PartialPath(new String[] {"root", "**"}));
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterIdStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterIdStatement.java
index bf3d84a7aca..3b0dbf12083 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterIdStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterIdStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -35,9 +33,4 @@ public class ShowClusterIdStatement extends ShowStatement implements IConfigStat
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowClusterId(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterStatement.java
index a835d0779e3..f66489793ad 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowClusterStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -34,11 +32,6 @@ public class ShowClusterStatement extends ShowStatement implements IConfigStatem
     return QueryType.READ;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowCluster(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowConfigNodesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowConfigNodesStatement.java
index 81f31aeb6cb..5fb490b2b5b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowConfigNodesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowConfigNodesStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -32,11 +30,6 @@ public class ShowConfigNodesStatement extends ShowStatement implements IConfigSt
     return QueryType.READ;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowConfigNodes(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowContinuousQueriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowContinuousQueriesStatement.java
index e40354beb10..8a98e7f363f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowContinuousQueriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowContinuousQueriesStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -53,14 +49,4 @@ public class ShowContinuousQueriesStatement extends ShowStatement implements ICo
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowContinuousQueries(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_CQ),
-        PrivilegeType.USE_CQ);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDataNodesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDataNodesStatement.java
index b1fc67c7b4c..519a6bc1bf6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDataNodesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDataNodesStatement.java
@@ -20,8 +20,6 @@
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -44,11 +42,6 @@ public class ShowDataNodesStatement extends ShowStatement implements IConfigStat
     this.regionType = regionType;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public QueryType getQueryType() {
     return QueryType.READ;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDevicesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDevicesStatement.java
index fe9c57fd920..75f33c7b4a1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDevicesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowDevicesStatement.java
@@ -19,16 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTreeUtils;
 import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.component.WhereCondition;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -84,25 +78,6 @@ public class ShowDevicesStatement extends ShowStatement {
     return timeCondition != null;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (hasTimeCondition()) {
-      try {
-        if (!AuthorityChecker.SUPER_USER.equals(userName)) {
-          this.authorityScope =
-              PathPatternTreeUtils.intersectWithFullPathPrefixTree(
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_SCHEMA),
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_DATA));
-        }
-      } catch (AuthException e) {
-        return new TSStatus(e.getCode().getStatusCode());
-      }
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    } else {
-      return super.checkPermissionBeforeProcess(userName);
-    }
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowDevices(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowFunctionsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowFunctionsStatement.java
index 289d4e259cc..3e61ced117d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowFunctionsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowFunctionsStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -47,14 +43,4 @@ public class ShowFunctionsStatement extends ShowStatement implements IConfigStat
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_UDF),
-        PrivilegeType.USE_UDF);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowRegionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowRegionStatement.java
index f5065ef83bc..92d66053f07 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowRegionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowRegionStatement.java
@@ -20,9 +20,7 @@
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -62,11 +60,6 @@ public class ShowRegionStatement extends ShowStatement implements IConfigStateme
     return nodeIds;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public QueryType getQueryType() {
     return QueryType.READ;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTimeSeriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTimeSeriesStatement.java
index 49e478860f5..82a389d6224 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTimeSeriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTimeSeriesStatement.java
@@ -19,16 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.path.PathPatternTreeUtils;
 import org.apache.iotdb.commons.schema.filter.SchemaFilter;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.component.WhereCondition;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -83,25 +77,6 @@ public class ShowTimeSeriesStatement extends ShowStatement {
     return timeCondition != null;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (hasTimeCondition()) {
-      try {
-        if (!AuthorityChecker.SUPER_USER.equals(userName)) {
-          this.authorityScope =
-              PathPatternTreeUtils.intersectWithFullPathPrefixTree(
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_SCHEMA),
-                  AuthorityChecker.getAuthorizedPathTree(userName, PrivilegeType.READ_DATA));
-        }
-      } catch (AuthException e) {
-        return new TSStatus(e.getCode().getStatusCode());
-      }
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    } else {
-      return super.checkPermissionBeforeProcess(userName);
-    }
-  }
-
   @Override
   public List<PartialPath> getPaths() {
     return Collections.singletonList(pathPattern);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTriggersStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTriggersStatement.java
index 8b86427e38f..4d1de329795 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTriggersStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowTriggersStatement.java
@@ -19,14 +19,10 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -47,14 +43,4 @@ public class ShowTriggersStatement extends ShowStatement implements IConfigState
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_TRIGGER),
-        PrivilegeType.USE_TRIGGER);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowVariablesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowVariablesStatement.java
index f8863fa2f12..dbf2f2397c6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowVariablesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowVariablesStatement.java
@@ -19,11 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 public class ShowVariablesStatement extends ShowStatement implements IConfigStatement {
 
@@ -32,11 +30,6 @@ public class ShowVariablesStatement extends ShowStatement implements IConfigStat
     return QueryType.READ;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowVariables(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/CreateModelStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/CreateModelStatement.java
index c99462bc3d1..2300af074a4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/CreateModelStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/CreateModelStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.model;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -68,16 +64,6 @@ public class CreateModelStatement extends Statement implements IConfigStatement
     return QueryType.WRITE;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_MODEL),
-        PrivilegeType.USE_MODEL);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCreateModel(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/DropModelStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/DropModelStatement.java
index 1273cde4fac..34ba98207e4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/DropModelStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/DropModelStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.model;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -54,16 +50,6 @@ public class DropModelStatement extends Statement implements IConfigStatement {
     return QueryType.WRITE;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_MODEL),
-        PrivilegeType.USE_MODEL);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitDropModel(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowAINodesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowAINodesStatement.java
index d99e158f0cd..602d0e01465 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowAINodesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowAINodesStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.model;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -39,9 +37,4 @@ public class ShowAINodesStatement extends ShowStatement implements IConfigStatem
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowAINodes(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowModelsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowModelsStatement.java
index 4675ed8980c..e9b68e67b70 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowModelsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/model/ShowModelsStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.model;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -62,16 +58,6 @@ public class ShowModelsStatement extends Statement implements IConfigStatement {
     return QueryType.READ;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_MODEL),
-        PrivilegeType.USE_MODEL);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowModels(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java
index 603303b49ae..122139f3d4e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/AlterPipeStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -141,16 +137,6 @@ public class AlterPipeStatement extends Statement implements IConfigStatement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitAlterPipe(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java
index 2787808f3cd..e1b22ea9de7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -86,16 +82,6 @@ public class CreatePipePluginStatement extends Statement implements IConfigState
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCreatePipePlugin(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java
index 3430128247f..66c7a85de79 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipeStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -96,16 +92,6 @@ public class CreatePipeStatement extends Statement implements IConfigStatement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCreatePipe(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java
index e40ae63d01d..24b44f85cf6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -82,14 +78,4 @@ public class DropPipePluginStatement extends Statement implements IConfigStateme
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitDropPipePlugin(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipeStatement.java
index 82d2f777be6..3099a8d5dd5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipeStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -77,16 +73,6 @@ public class DropPipeStatement extends Statement implements IConfigStatement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitDropPipe(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java
index 56c79e37a5d..e7ac65ada5b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 public class ShowPipePluginsStatement extends ShowStatement implements IConfigStatement {
 
@@ -55,14 +51,4 @@ public class ShowPipePluginsStatement extends ShowStatement implements IConfigSt
   public QueryType getQueryType() {
     return QueryType.READ;
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipesStatement.java
index 51de7b7c005..26bf6764a44 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipesStatement.java
@@ -19,15 +19,11 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 public class ShowPipesStatement extends ShowStatement implements IConfigStatement {
   public ShowPipesStatement() {
@@ -70,16 +66,6 @@ public class ShowPipesStatement extends ShowStatement implements IConfigStatemen
     return QueryType.READ;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitShowPipes(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StartPipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StartPipeStatement.java
index 346eaf05cd3..1122310b001 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StartPipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StartPipeStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -68,16 +64,6 @@ public class StartPipeStatement extends Statement implements IConfigStatement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitStartPipe(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StopPipeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StopPipeStatement.java
index 70447ae7b90..23bb60ae39c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StopPipeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/StopPipeStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -68,16 +64,6 @@ public class StopPipeStatement extends Statement implements IConfigStatement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitStopPipe(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ExtendRegionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ExtendRegionStatement.java
index 591c62c4b6b..353cb119553 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ExtendRegionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ExtendRegionStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.region;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -49,11 +47,6 @@ public class ExtendRegionStatement extends Statement implements IConfigStatement
     return dataNodeId;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitExtendRegion(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/MigrateRegionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/MigrateRegionStatement.java
index ef272c81d2c..616357f5379 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/MigrateRegionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/MigrateRegionStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.region;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -65,11 +63,6 @@ public class MigrateRegionStatement extends Statement implements IConfigStatemen
     return toId;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitMigrateRegion(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ReconstructRegionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ReconstructRegionStatement.java
index 25f3d65d837..cd22e61ad7f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ReconstructRegionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/ReconstructRegionStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.region;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -47,11 +45,6 @@ public class ReconstructRegionStatement extends Statement implements IConfigStat
     return regionIds;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitReconstructRegion(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/RemoveRegionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/RemoveRegionStatement.java
index f4d3b94c682..f64d6d84fe1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/RemoveRegionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/region/RemoveRegionStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.region;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -49,11 +47,6 @@ public class RemoveRegionStatement extends Statement implements IConfigStatement
     return dataNodeId;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitRemoveRegion(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/CreateTopicStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/CreateTopicStatement.java
index 8f3f237918f..7d1d59c44f4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/CreateTopicStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/CreateTopicStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -79,16 +75,6 @@ public class CreateTopicStatement extends Statement implements IConfigStatement
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitCreateTopic(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropSubscriptionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropSubscriptionStatement.java
index 53ecb6164fa..fb64cfdeb8e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropSubscriptionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropSubscriptionStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -82,14 +78,4 @@ public class DropSubscriptionStatement extends Statement implements IConfigState
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitDropSubscription(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropTopicStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropTopicStatement.java
index 3bc5d866bc4..5c7d7d115f6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropTopicStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/DropTopicStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -82,14 +78,4 @@ public class DropTopicStatement extends Statement implements IConfigStatement {
   public <R, C> R accept(final StatementVisitor<R, C> visitor, final C context) {
     return visitor.visitDropTopic(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowSubscriptionsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowSubscriptionsStatement.java
index 9bccb3270ae..aa2abbfc188 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowSubscriptionsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowSubscriptionsStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -73,14 +69,4 @@ public class ShowSubscriptionsStatement extends Statement implements IConfigStat
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowTopicsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowTopicsStatement.java
index eee05092407..a9c38856fd2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowTopicsStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/subscription/ShowTopicsStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.subscription;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -73,14 +69,4 @@ public class ShowTopicsStatement extends Statement implements IConfigStatement {
   public List<PartialPath> getPaths() {
     return Collections.emptyList();
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkSystemPermission(userName, PrivilegeType.USE_PIPE),
-        PrivilegeType.USE_PIPE);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java
index 0bf2edfb5ba..e5abc9be3b3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ActivateTemplateStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
 import org.apache.iotdb.db.schemaengine.template.Template;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.utils.Pair;
 
@@ -63,19 +59,6 @@ public class ActivateTemplateStatement extends Statement {
         .collect(Collectors.toList());
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public PartialPath getPath() {
     return path;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java
index 85e77c2697f..e518eee0d1e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/BatchActivateTemplateStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
 import org.apache.iotdb.db.schemaengine.template.Template;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.utils.Pair;
 
@@ -46,19 +42,6 @@ public class BatchActivateTemplateStatement extends Statement {
     statementType = StatementType.BATCH_ACTIVATE_TEMPLATE;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   @Override
   public List<PartialPath> getPaths() {
     ClusterTemplateManager clusterTemplateManager = ClusterTemplateManager.getInstance();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java
index bdb6375e83c..b2d7a5fef7b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/DeactivateTemplateStatement.java
@@ -19,11 +19,8 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -31,7 +28,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
 import org.apache.iotdb.db.schemaengine.template.Template;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -58,6 +54,13 @@ public class DeactivateTemplateStatement extends Statement implements IConfigSta
 
   @Override
   public List<PartialPath> getPaths() {
+    if (templateName == null) {
+      // When the template name is not specified, we cannot obtain the specific path, so we use *
+      // for concatenation and it just works
+      return pathPatternList.stream()
+          .map(path -> path.concatAsMeasurementPath(ONE_LEVEL_PATH_WILDCARD))
+          .collect(Collectors.toList());
+    }
     ClusterTemplateManager clusterTemplateManager = ClusterTemplateManager.getInstance();
 
     Template template;
@@ -77,19 +80,6 @@ public class DeactivateTemplateStatement extends Statement implements IConfigSta
         .collect(Collectors.toList());
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public String getTemplateName() {
     return templateName == null ? ONE_LEVEL_PATH_WILDCARD : templateName;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowNodesInSchemaTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowNodesInSchemaTemplateStatement.java
index 9f95310ce18..04b4c92a6e8 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowNodesInSchemaTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowNodesInSchemaTemplateStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
@@ -37,13 +35,6 @@ public class ShowNodesInSchemaTemplateStatement extends ShowStatement implements
     this.templateName = templateName;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.SUPER_USER.equals(userName),
-        "Only the admin user can perform this operation");
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowNodesInSchemaTemplate(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowPathSetTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowPathSetTemplateStatement.java
index 6865f4846ba..be4a7ef1af5 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowPathSetTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowPathSetTemplateStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
@@ -45,13 +43,6 @@ public class ShowPathSetTemplateStatement extends ShowStatement implements IConf
     this.templateName = templateName;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.SUPER_USER.equals(userName),
-        "Only the admin user can perform this operation");
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowPathSetTemplate(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowSchemaTemplateStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowSchemaTemplateStatement.java
index 77749b23d47..c31689aca2b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowSchemaTemplateStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/template/ShowSchemaTemplateStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.template;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
@@ -34,13 +32,6 @@ public class ShowSchemaTemplateStatement extends ShowStatement implements IConfi
     statementType = StatementType.SHOW_SCHEMA_TEMPLATE;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.SUPER_USER.equals(userName),
-        "Only the admin user can perform this operation");
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowSchemaTemplate(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/AlterLogicalViewStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/AlterLogicalViewStatement.java
index 7d5fbd11b68..73992479c3b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/AlterLogicalViewStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/AlterLogicalViewStatement.java
@@ -19,10 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.view;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
@@ -32,7 +29,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
 import org.apache.iotdb.db.schemaengine.schemaregion.view.ViewPathType;
 import org.apache.iotdb.db.schemaengine.schemaregion.view.ViewPaths;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.List;
 
@@ -60,41 +56,6 @@ public class AlterLogicalViewStatement extends Statement implements IConfigState
     return this.getTargetPathList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    List<PartialPath> sourcePathList = sourcePaths.fullPathList;
-    if (sourcePathList != null) {
-      status =
-          AuthorityChecker.getTSStatus(
-              AuthorityChecker.checkFullPathOrPatternListPermission(
-                  userName, sourcePathList, PrivilegeType.READ_SCHEMA),
-              sourcePathList,
-              PrivilegeType.READ_SCHEMA);
-    }
-    if (queryStatement != null && status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-      sourcePathList = queryStatement.getPaths();
-      status =
-          AuthorityChecker.getTSStatus(
-              AuthorityChecker.checkFullPathOrPatternListPermission(
-                  userName, sourcePathList, PrivilegeType.READ_SCHEMA),
-              sourcePathList,
-              PrivilegeType.READ_SCHEMA);
-    }
-
-    if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-      return AuthorityChecker.getTSStatus(
-          AuthorityChecker.checkFullPathOrPatternListPermission(
-              userName, getTargetPathList(), PrivilegeType.WRITE_SCHEMA),
-          getTargetPathList(),
-          PrivilegeType.WRITE_SCHEMA);
-    }
-    return status;
-  }
-
   public ViewPaths getTargetPaths() {
     return targetPaths;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/CreateLogicalViewStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/CreateLogicalViewStatement.java
index 70d5ade4c24..a69f763e1eb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/CreateLogicalViewStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/CreateLogicalViewStatement.java
@@ -19,12 +19,8 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.view;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.exception.metadata.view.UnsupportedViewException;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.plan.analyze.SelectIntoUtils;
@@ -38,14 +34,12 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.IntoItem;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
 import org.apache.iotdb.db.schemaengine.schemaregion.view.ViewPathType;
 import org.apache.iotdb.db.schemaengine.schemaregion.view.ViewPaths;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.utils.Pair;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Objects;
 
 /** CREATE LOGICAL VIEW statement. */
 public class CreateLogicalViewStatement extends Statement {
@@ -76,48 +70,6 @@ public class CreateLogicalViewStatement extends Statement {
     return this.getTargetPathList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    List<PartialPath> sourcePathList = sourcePaths.fullPathList;
-    if (sourcePathList != null) {
-      status =
-          AuthorityChecker.getTSStatus(
-              AuthorityChecker.checkFullPathOrPatternListPermission(
-                  userName, sourcePathList, PrivilegeType.READ_SCHEMA),
-              sourcePathList,
-              PrivilegeType.READ_SCHEMA);
-    }
-    if (queryStatement != null && status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-      sourcePathList = queryStatement.getPaths();
-      status =
-          AuthorityChecker.getTSStatus(
-              AuthorityChecker.checkFullPathOrPatternListPermission(
-                  userName, sourcePathList, PrivilegeType.READ_SCHEMA),
-              sourcePathList,
-              PrivilegeType.READ_SCHEMA);
-    }
-
-    final List<PartialPath> paths =
-        Objects.nonNull(getTargetPathList())
-            ? getTargetPathList()
-            : Collections.singletonList(
-                batchGenerationItem
-                    .getIntoDevice()
-                    .concatNode(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD));
-    if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-      return AuthorityChecker.getTSStatus(
-          AuthorityChecker.checkFullPathOrPatternListPermission(
-              userName, paths, PrivilegeType.WRITE_SCHEMA),
-          paths,
-          PrivilegeType.WRITE_SCHEMA);
-    }
-    return status;
-  }
-
   public ViewPaths getTargetPaths() {
     return targetPaths;
   }
@@ -239,6 +191,10 @@ public class CreateLogicalViewStatement extends Statement {
     }
   }
 
+  public IntoItem getBatchGenerationItem() {
+    return batchGenerationItem;
+  }
+
   // endregion
 
   // region Interfaces for checking
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/DeleteLogicalViewStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/DeleteLogicalViewStatement.java
index 38e67b6e868..f09ab0829f2 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/DeleteLogicalViewStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/DeleteLogicalViewStatement.java
@@ -19,16 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.view;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.List;
 
@@ -50,19 +46,6 @@ public class DeleteLogicalViewStatement extends Statement implements IConfigStat
     return pathPatternList;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = getPaths();
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   public List<PartialPath> getPathPatternList() {
     return pathPatternList;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/RenameLogicalViewStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/RenameLogicalViewStatement.java
index 4c3d13d559f..af1246d5339 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/RenameLogicalViewStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/view/RenameLogicalViewStatement.java
@@ -19,18 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.metadata.view;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.rpc.TSStatusCode;
-
-import com.google.common.collect.ImmutableList;
 
 import java.util.Arrays;
 import java.util.List;
@@ -67,19 +61,6 @@ public class RenameLogicalViewStatement extends Statement implements IConfigStat
     return Arrays.asList(oldName, newName);
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    if (AuthorityChecker.SUPER_USER.equals(userName)) {
-      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-    }
-    List<PartialPath> checkedPaths = ImmutableList.of(oldName, newName);
-    return AuthorityChecker.getTSStatus(
-        AuthorityChecker.checkFullPathOrPatternListPermission(
-            userName, checkedPaths, PrivilegeType.WRITE_SCHEMA),
-        checkedPaths,
-        PrivilegeType.WRITE_SCHEMA);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitRenameLogicalView(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
index e34f289b742..7ffdba24b4d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
@@ -20,11 +20,9 @@
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.AuthUtils;
 import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.AuthorType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
@@ -34,7 +32,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import java.util.Collections;
 import java.util.List;
@@ -219,138 +216,6 @@ public class AuthorStatement extends Statement implements IConfigStatement {
     return nodeNameList != null ? nodeNameList : Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    switch (authorType) {
-      case CREATE_USER:
-        if (AuthorityChecker.SUPER_USER.equals(this.userName)) {
-          return AuthorityChecker.getTSStatus(
-              false, "Cannot create user has same name with admin user");
-        }
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        return AuthorityChecker.getTSStatus(
-            AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_USER),
-            PrivilegeType.MANAGE_USER);
-
-      case UPDATE_USER:
-        // users can change passwords of themselves
-        if (AuthorityChecker.SUPER_USER.equals(userName) || this.userName.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        return AuthorityChecker.getTSStatus(
-            AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_USER),
-            PrivilegeType.MANAGE_USER);
-
-      case DROP_USER:
-        if (AuthorityChecker.SUPER_USER.equals(this.userName) || this.userName.equals(userName)) {
-          return AuthorityChecker.getTSStatus(false, "Cannot drop admin user or yourself");
-        }
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        return AuthorityChecker.getTSStatus(
-            AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_USER),
-            PrivilegeType.MANAGE_USER);
-
-      case LIST_USER:
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        return AuthorityChecker.getTSStatus(
-            AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_USER),
-            PrivilegeType.MANAGE_USER);
-
-      case LIST_USER_PRIVILEGE:
-        if (AuthorityChecker.SUPER_USER.equals(userName) || userName.equals(this.userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        return AuthorityChecker.getTSStatus(
-            AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_USER),
-            PrivilegeType.MANAGE_USER);
-
-      case LIST_ROLE_PRIVILEGE:
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        if (!AuthorityChecker.checkRole(userName, roleName)) {
-          return AuthorityChecker.getTSStatus(
-              AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_ROLE),
-              PrivilegeType.MANAGE_ROLE);
-        } else {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-
-      case LIST_ROLE:
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        if (this.userName != null && userName.equals(this.userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        } else {
-          return AuthorityChecker.getTSStatus(
-              AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_ROLE),
-              PrivilegeType.MANAGE_ROLE);
-        }
-
-      case CREATE_ROLE:
-        if (AuthorityChecker.SUPER_USER.equals(this.roleName)) {
-          return AuthorityChecker.getTSStatus(
-              false, "Cannot create role has same name with admin user");
-        }
-      case DROP_ROLE:
-      case GRANT_USER_ROLE:
-      case REVOKE_USER_ROLE:
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-        return AuthorityChecker.getTSStatus(
-            AuthorityChecker.checkSystemPermission(userName, PrivilegeType.MANAGE_ROLE),
-            PrivilegeType.MANAGE_ROLE);
-
-      case REVOKE_USER:
-      case GRANT_USER:
-      case GRANT_ROLE:
-      case REVOKE_ROLE:
-        if (AuthorityChecker.SUPER_USER.equals(this.userName)) {
-          return AuthorityChecker.getTSStatus(
-              false, "Cannot grant/revoke privileges of admin user");
-        }
-        if (AuthorityChecker.SUPER_USER.equals(userName)) {
-          return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-        }
-
-        for (String s : privilegeList) {
-          PrivilegeType privilegeType = PrivilegeType.valueOf(s.toUpperCase());
-          if (privilegeType.isSystemPrivilege()) {
-            if (!AuthorityChecker.checkSystemPermissionGrantOption(userName, privilegeType)) {
-              return AuthorityChecker.getTSStatus(
-                  false,
-                  "Has no permission to execute "
-                      + authorType
-                      + ", please ensure you have these privileges and the grant option is TRUE when granted)");
-            }
-          } else if (privilegeType.isPathPrivilege()) {
-            if (!AuthorityChecker.checkPathPermissionGrantOption(
-                userName, privilegeType, nodeNameList)) {
-              return AuthorityChecker.getTSStatus(
-                  false,
-                  "Has no permission to execute "
-                      + authorType
-                      + ", please ensure you have these privileges and the grant option is TRUE when granted)");
-            }
-          } else {
-            return AuthorityChecker.getTSStatus(
-                false, "Not support Relation statement in tree sql_dialect");
-          }
-        }
-        return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
-      default:
-        throw new IllegalArgumentException("Unknown authorType: " + authorType);
-    }
-  }
-
   /**
    * Post-process when the statement is successfully executed.
    *
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
index 34eec9f2a0e..352ec1c4041 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
@@ -39,11 +38,6 @@ public class ExplainAnalyzeStatement extends Statement {
     this.queryStatement = queryStatement;
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return queryStatement.checkPermissionBeforeProcess(userName);
-  }
-
   public QueryStatement getQueryStatement() {
     return queryStatement;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/KillQueryStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/KillQueryStatement.java
index fe2781331ec..4e1a8618561 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/KillQueryStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/KillQueryStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -54,11 +52,6 @@ public class KillQueryStatement extends Statement implements IConfigStatement {
     return Collections.emptyList();
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitKillQuery(this, context);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/SetSqlDialectStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/SetSqlDialectStatement.java
index edb63ef4893..75cbbee32e6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/SetSqlDialectStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/SetSqlDialectStatement.java
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.protocol.session.IClientSession;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
@@ -31,8 +30,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
-import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
-
 public class SetSqlDialectStatement extends Statement implements IConfigStatement {
   private final IClientSession.SqlDialect sqlDialect;
 
@@ -68,9 +65,4 @@ public class SetSqlDialectStatement extends Statement implements IConfigStatemen
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitSetSqlDialect(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(final String userName) {
-    return SUCCEED;
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentSqlDialectStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentSqlDialectStatement.java
index 73a40db282f..da8da0774ff 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentSqlDialectStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentSqlDialectStatement.java
@@ -19,25 +19,17 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
 
-import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
-
 public class ShowCurrentSqlDialectStatement extends ShowStatement implements IConfigStatement {
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowCurrentSqlDialect(this, context);
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return SUCCEED;
-  }
-
   @Override
   public QueryType getQueryType() {
     return QueryType.READ;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentUserStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentUserStatement.java
index 81650ef21ae..eefe4520372 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentUserStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowCurrentUserStatement.java
@@ -19,25 +19,17 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
 
-import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
-
 public class ShowCurrentUserStatement extends ShowStatement implements IConfigStatement {
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowCurrentUser(this, context);
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return SUCCEED;
-  }
-
   @Override
   public QueryType getQueryType() {
     return QueryType.READ;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowQueriesStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowQueriesStatement.java
index e23f2d647b1..1baca6e07b9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowQueriesStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowQueriesStatement.java
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.component.OrderByComponent;
@@ -56,11 +54,6 @@ public class ShowQueriesStatement extends ShowStatement {
     return visitor.visitShowQueries(this, context);
   }
 
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
-
   public void setWhereCondition(WhereCondition whereCondition) {
     this.whereCondition = whereCondition;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java
index 69825844311..cb8083422b1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ShowVersionStatement.java
@@ -19,12 +19,9 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
 
-import static org.apache.iotdb.db.auth.AuthorityChecker.SUCCEED;
-
 public class ShowVersionStatement extends ShowStatement {
 
   public ShowVersionStatement() {
@@ -35,9 +32,4 @@ public class ShowVersionStatement extends ShowStatement {
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowVersion(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return SUCCEED;
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/TestConnectionStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/TestConnectionStatement.java
index ebcfe8be859..4940254120c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/TestConnectionStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/TestConnectionStatement.java
@@ -19,9 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -55,9 +53,4 @@ public class TestConnectionStatement extends Statement implements IConfigStateme
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitTestConnection(this, context);
   }
-
-  @Override
-  public TSStatus checkPermissionBeforeProcess(String userName) {
-    return AuthorityChecker.checkSuperUserOrMaintain(userName);
-  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementTSStatusVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementTSStatusVisitor.java
index a4b1c0385ed..a94c050e7ac 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementTSStatusVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementTSStatusVisitor.java
@@ -52,7 +52,8 @@ public class LoadConvertedInsertTabletStatementTSStatusVisitor
     return visitInsertBase(insertMultiTabletsStatement, context);
   }
 
-  private TSStatus visitInsertBase(
+  @Override
+  public TSStatus visitInsertBase(
       final InsertBaseStatement insertBaseStatement, final TSStatus context) {
     if (context.getCode() == TSStatusCode.SYSTEM_READ_ONLY.getStatusCode()
         || context.getCode() == TSStatusCode.WRITE_PROCESS_REJECT.getStatusCode()) {
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/entity/RoleTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/entity/RoleTest.java
index 83b410ba8ef..270dd8af689 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/entity/RoleTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/auth/entity/RoleTest.java
@@ -78,21 +78,7 @@ public class RoleTest {
     admin.getDBScopePrivilegeMap().put("testDB", databasePrivilege);
     admin.getPathPrivilegeList().add(pathPri);
     Assert.assertEquals(
-        "Role{name='root', pathPrivilegeList=[root.** : READ_DATA_wi"
-            + "th_grant_option WRITE_DATA_with_grant_option READ_SCHEMA"
-            + "_with_grant_option WRITE_SCHEMA_with_grant_option], systemPr"
-            + "ivilegeSet=[MANAGE_USER_with_grant_option, USE_TRIGGER_with_gra"
-            + "nt_option, USE_MODEL_with_grant_option, MAINTAIN_with_grant_option"
-            + ", USE_CQ_with_grant_option, USE_PIPE_with_grant_option, USE_UDF_wit"
-            + "h_grant_option, EXTEND_TEMPLATE_with_grant_option, MANAGE_ROLE_with_gr"
-            + "ant_option, MANAGE_DATABASE_with_grant_option], AnyScopePrivilegeMap=[D"
-            + "ELETE_with_grant_option, DROP_with_grant_option, ALTER_with_grant_optio"
-            + "n, CREATE_with_grant_option, SELECT_with_grant_option, INSERT_with_gran"
-            + "t_option], objectPrivilegeSet={testDB=Database(testDB):{CREATE_with_gran"
-            + "t_option,DROP_with_grant_option,ALTER_with_grant_option,SELECT_with_grant_"
-            + "option,INSERT_with_grant_option,DELETE_with_grant_option,; Tables: [ testTa"
-            + "ble(CREATE_with_grant_option,DROP_with_grant_option,ALTER_with_grant_option"
-            + ",SELECT_with_grant_option,INSERT_with_grant_option,DELETE_with_grant_option,)]}}}",
+        "Role{name='root', pathPrivilegeList=[root.** : READ_DATA_with_grant_option WRITE_DATA_with_grant_option READ_SCHEMA_with_grant_option WRITE_SCHEMA_with_grant_option], systemPrivilegeSet=[USE_MODEL_with_grant_option, MAINTAIN_with_grant_option, EXTEND_TEMPLATE_with_grant_option, SYSTEM_with_grant_option, MANAGE_DATABASE_with_grant_option, MANAGE_USER_with_grant_option, USE_TRIGGER_with_grant_option, USE_CQ_with_grant_option, SECURITY_with_grant_option, USE_PIPE_with_grant_option, [...]
         admin.toString());
   }
 }
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
index cc46c63f24e..4245eb8a513 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGeneratorTest.java
@@ -715,7 +715,7 @@ public class StatementGeneratorTest {
 
     // 1. check simple privilege grant to user/role with/without grant option.
     for (PrivilegeType privilege : PrivilegeType.values()) {
-      if (privilege.isRelationalPrivilege()) {
+      if (privilege.isRelationalPrivilege() || privilege.isAdminPrivilege()) {
         continue;
       }
       testGrant.checkParser(privilege.toString(), name, true, path, true);
@@ -753,7 +753,7 @@ public class StatementGeneratorTest {
 
     // 3. check simple privilege revoke from user/role on simple path
     for (PrivilegeType type : PrivilegeType.values()) {
-      if (type.isRelationalPrivilege()) {
+      if (type.isRelationalPrivilege() || type.isAdminPrivilege()) {
         continue;
       }
       testRevoke.checkParser(type.toString(), name, true, path, false);
@@ -780,14 +780,14 @@ public class StatementGeneratorTest {
     // 1. test complex privilege on single path :"root.**"
     Set<String> allPriv = new HashSet<>();
     for (PrivilegeType type : PrivilegeType.values()) {
-      if (type.isRelationalPrivilege()) {
+      if (type.isRelationalPrivilege() || type.isAdminPrivilege()) {
         continue;
       }
       allPriv.add(type.toString());
     }
 
     for (PrivilegeType type : PrivilegeType.values()) {
-      if (type.isRelationalPrivilege()) {
+      if (type.isRelationalPrivilege() || type.isAdminPrivilege()) {
         continue;
       }
       {
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
index 831388de575..eaf8019ea33 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectN
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControlImpl;
 import org.apache.iotdb.db.queryengine.plan.relational.security.ITableAuthChecker;
 import org.apache.iotdb.db.queryengine.plan.relational.security.TableModelPrivilege;
+import org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
@@ -216,7 +217,10 @@ public class AuthTest {
         new SessionInfo(
             0, userName, zoneId, databaseNameInSessionInfo, IClientSession.SqlDialect.TABLE);
     StatementAnalyzerFactory statementAnalyzerFactory =
-        new StatementAnalyzerFactory(TEST_MATADATA, sqlParser, new AccessControlImpl(authChecker));
+        new StatementAnalyzerFactory(
+            TEST_MATADATA,
+            sqlParser,
+            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()));
     MPPQueryContext context = new MPPQueryContext(sql, QUERY_ID, 0, session, null, null);
     Analyzer analyzer =
         new Analyzer(
@@ -241,7 +245,9 @@ public class AuthTest {
 
     statement.accept(
         new TableConfigTaskVisitor(
-            Mockito.mock(IClientSession.class), TEST_MATADATA, new AccessControlImpl(authChecker)),
+            Mockito.mock(IClientSession.class),
+            TEST_MATADATA,
+            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
         context);
   }
 
@@ -254,7 +260,9 @@ public class AuthTest {
 
     statement.accept(
         new TableConfigTaskVisitor(
-            clientSession, TEST_MATADATA, new AccessControlImpl(authChecker)),
+            clientSession,
+            TEST_MATADATA,
+            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
         context);
   }
 }
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
index 773a1be38ba..c7330ac8356 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
@@ -44,7 +44,11 @@ public enum PrivilegeType {
   ALTER(PrivilegeModelType.RELATIONAL),
   SELECT(PrivilegeModelType.RELATIONAL),
   INSERT(PrivilegeModelType.RELATIONAL),
-  DELETE(PrivilegeModelType.RELATIONAL);
+  DELETE(PrivilegeModelType.RELATIONAL),
+
+  SYSTEM(PrivilegeModelType.SYSTEM),
+  SECURITY(PrivilegeModelType.SYSTEM),
+  AUDIT(PrivilegeModelType.SYSTEM);
 
   private final PrivilegeModelType modelType;
 
@@ -64,6 +68,10 @@ public enum PrivilegeType {
     return this.modelType == PrivilegeModelType.RELATIONAL;
   }
 
+  public boolean isAdminPrivilege() {
+    return this == SYSTEM || this == SECURITY || this == AUDIT;
+  }
+
   public static int getPrivilegeCount(PrivilegeModelType type) {
     int size = 0;
     for (PrivilegeType item : PrivilegeType.values()) {
@@ -93,7 +101,16 @@ public enum PrivilegeType {
   }
 
   public boolean forRelationalSys() {
-    return this == MANAGE_USER || this == MANAGE_ROLE;
+    switch (this) {
+      case MANAGE_USER:
+      case MANAGE_ROLE:
+      case SYSTEM:
+      case SECURITY:
+      case AUDIT:
+        return true;
+      default:
+        return false;
+    }
   }
 
   public PrivilegeModelType getModelType() {
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
index 21481de80c4..d798f0085ca 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
@@ -515,7 +515,8 @@ public class Role {
   }
 
   public boolean checkSysPrivilege(PrivilegeType priv) {
-    return sysPrivilegeSet.contains(priv);
+    return AuthUtils.getAllPrivilegesContainingCurrentPrivilege(priv).stream()
+        .anyMatch(sysPrivilegeSet::contains);
   }
 
   public boolean checkSysPriGrantOpt(PrivilegeType priv) {
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/BasicUserManager.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/BasicUserManager.java
index 296cd0fa6a4..3ac91f653ab 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/BasicUserManager.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/user/BasicUserManager.java
@@ -82,6 +82,9 @@ public abstract class BasicUserManager extends BasicRoleManager {
       PartialPath rootPath = new PartialPath(IoTDBConstant.PATH_ROOT + ".**");
       PathPrivilege pathPri = new PathPrivilege(rootPath);
       for (PrivilegeType item : PrivilegeType.values()) {
+        if (item.isAdminPrivilege()) {
+          continue;
+        }
         if (item.isSystemPrivilege()) {
           admin.grantSysPrivilege(item, true);
         } else if (item.isRelationalPrivilege()) {
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
index 09824dfbd69..1ee4c8beb46 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/AuthUtils.java
@@ -41,6 +41,8 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -508,6 +510,12 @@ public class AuthUtils {
         return PrivilegeType.MAINTAIN;
       case 9:
         return PrivilegeType.USE_MODEL;
+      case 10:
+        return PrivilegeType.SYSTEM;
+      case 11:
+        return PrivilegeType.SECURITY;
+      case 12:
+        return PrivilegeType.AUDIT;
       default:
         // Not reach here.
         LOGGER.warn("Not support position");
@@ -537,11 +545,36 @@ public class AuthUtils {
         return 8;
       case USE_MODEL:
         return 9;
+      case SYSTEM:
+        return 10;
+      case SECURITY:
+        return 11;
+      case AUDIT:
+        return 12;
       default:
         return -1;
     }
   }
 
+  public static List<PrivilegeType> getAllPrivilegesContainingCurrentPrivilege(PrivilegeType priv) {
+    switch (priv) {
+      case MANAGE_USER:
+      case MANAGE_ROLE:
+        return Arrays.asList(priv, PrivilegeType.SECURITY);
+      case MAINTAIN:
+      case USE_UDF:
+      case USE_MODEL:
+      case USE_TRIGGER:
+      case USE_CQ:
+      case USE_PIPE:
+      case MANAGE_DATABASE:
+      case EXTEND_TEMPLATE:
+        return Arrays.asList(priv, PrivilegeType.SYSTEM);
+      default:
+        return Collections.singletonList(priv);
+    }
+  }
+
   public static int pathPosToPri(int pos) {
     switch (pos) {
       case 0:
diff --git a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
index 3fd595b149a..cf1103182d7 100644
--- a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
+++ b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
@@ -1797,6 +1797,7 @@ WRAPPER: 'WRAPPER';
 WRITE: 'WRITE';
 YEAR: 'YEAR' | 'Y';
 ZONE: 'ZONE';
+AUDIT: 'AUDIT';
 
 EQ: '=';
 NEQ: '<>' | '!=';