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

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


The following commit(s) were added to refs/heads/auth by this push:
     new d15087dbe1f Add IT for system permissions
d15087dbe1f is described below

commit d15087dbe1f430433c9727d2b96da9c9f0e2a185
Author: Weihao Li <[email protected]>
AuthorDate: Sat Sep 2 13:10:08 2023 +0800

    Add IT for system permissions
---
 .../apache/iotdb/db/it/{ => auth}/IoTDBAuthIT.java |   2 +-
 .../it => db/it/auth}/IoTDBClusterAuthorityIT.java |   8 +-
 .../iotdb/db/it/auth/IoTDBSeriesPermissionIT.java  |  54 ++++
 .../iotdb/db/it/auth/IoTDBSystemPermissionIT.java  | 329 +++++++++++++++++++++
 .../java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java  |  88 ------
 .../db/it/trigger/IoTDBTriggerManagementIT.java    | 117 +-------
 .../org/apache/iotdb/db/it/utils/TestUtils.java    |  65 +++-
 .../plan/execution/config/ConfigTaskVisitor.java   |   6 +-
 .../config/executor/ClusterConfigTaskExecutor.java |   2 +-
 .../config/executor/IConfigTaskExecutor.java       |   2 +-
 .../config/metadata/CreatePipePluginTask.java      |   2 +-
 .../config/metadata/DropPipePluginTask.java        |   2 +-
 .../db/queryengine/plan/parser/ASTVisitor.java     |   6 +-
 .../plan/statement/StatementVisitor.java           |   6 +-
 .../statement/metadata/ShowClusterStatement.java   |   9 +-
 .../{ => pipe}/CreatePipePluginStatement.java      |   2 +-
 .../{ => pipe}/DropPipePluginStatement.java        |   2 +-
 .../{ => pipe}/ShowPipePluginsStatement.java       |   3 +-
 18 files changed, 476 insertions(+), 229 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBAuthIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
similarity index 99%
rename from 
integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBAuthIT.java
rename to 
integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
index 78dbe87e4df..2a4c07f828d 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBAuthIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.it;
+package org.apache.iotdb.db.it.auth;
 
 import org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant;
 import org.apache.iotdb.it.env.EnvFactory;
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBClusterAuthorityIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java
similarity index 98%
rename from 
integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBClusterAuthorityIT.java
rename to 
integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java
index 7230e287aa5..72544e4302b 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBClusterAuthorityIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBClusterAuthorityIT.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.confignode.it;
+package org.apache.iotdb.db.it.auth;
 
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.auth.entity.PrivilegeType;
@@ -505,11 +505,11 @@ public class IoTDBClusterAuthorityIT {
       authorizerResp = client.queryPermission(authorizerReq);
       status = authorizerResp.getStatus();
       assertEquals(TSStatusCode.SUCCESS_STATUS.getStatusCode(), 
status.getCode());
-      Set<PrivilegeType> allPrivilegeTypes = 
PrivilegeType.ALL.getStorablePrivilege();
+      PrivilegeType[] allPrivilegeTypes = PrivilegeType.values();
       List<String> resultPrivilegeTypes =
           
authorizerResp.getAuthorizerInfo().get(IoTDBConstant.COLUMN_PRIVILEGE);
-      Assert.assertEquals(allPrivilegeTypes.size(), 
resultPrivilegeTypes.size());
-      for (int i = 0; i < allPrivilegeTypes.size(); i++) {
+      Assert.assertEquals(allPrivilegeTypes.length, 
resultPrivilegeTypes.size());
+      for (int i = 0; i < allPrivilegeTypes.length; i++) {
         
Assert.assertTrue(resultPrivilegeTypes.contains(PrivilegeType.values()[i].toString()));
       }
     } catch (Exception e) {
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSeriesPermissionIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSeriesPermissionIT.java
new file mode 100644
index 00000000000..820183e0209
--- /dev/null
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSeriesPermissionIT.java
@@ -0,0 +1,54 @@
+/*
+ * 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.it.auth;
+
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import static org.apache.iotdb.db.it.utils.TestUtils.createUser;
+
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBSeriesPermissionIT {
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvFactory.getEnv().initClusterEnvironment();
+    createUser("test", "test123");
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    EnvFactory.getEnv().cleanClusterEnvironment();
+  }
+
+  @Test
+  public void test() {
+    // TODO
+  }
+}
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSystemPermissionIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSystemPermissionIT.java
new file mode 100644
index 00000000000..ee1f144ed3c
--- /dev/null
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSystemPermissionIT.java
@@ -0,0 +1,329 @@
+/*
+ * 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.it.auth;
+
+import org.apache.iotdb.commons.auth.entity.PrivilegeType;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import static 
org.apache.iotdb.db.it.trigger.IoTDBTriggerManagementIT.TRIGGER_FILE_TIMES_COUNTER;
+import static 
org.apache.iotdb.db.it.trigger.IoTDBTriggerManagementIT.TRIGGER_JAR_PREFIX;
+import static org.apache.iotdb.db.it.utils.TestUtils.assertNonQueryTestFail;
+import static org.apache.iotdb.db.it.utils.TestUtils.assertTestFail;
+import static org.apache.iotdb.db.it.utils.TestUtils.createUser;
+import static org.apache.iotdb.db.it.utils.TestUtils.executeNonQuery;
+import static org.apache.iotdb.db.it.utils.TestUtils.executeQuery;
+import static org.apache.iotdb.db.it.utils.TestUtils.grantUserSystemPrivileges;
+
+/**
+ * This Class contains integration tests for SystemPermissions but {@link 
PrivilegeType#MANAGE_USER}
+ * and {@link PrivilegeType#MANAGE_ROLE}, you can see tests of them in {@link 
IoTDBAuthIT}.
+ */
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBSystemPermissionIT {
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvFactory.getEnv().initClusterEnvironment();
+    createUser("test", "test123");
+    executeNonQuery("create database root.test1");
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    EnvFactory.getEnv().cleanClusterEnvironment();
+  }
+
+  @Test
+  public void manageDataBaseTest() {
+    assertNonQueryTestFail(
+        "create database root.test2",
+        "803: No permissions for this operation, please add privilege 
MANAGE_DATABASE",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "drop database root.test1",
+        "803: No permissions for this operation, please add privilege 
MANAGE_DATABASE",
+        "test",
+        "test123");
+
+    grantUserSystemPrivileges("test", PrivilegeType.MANAGE_DATABASE);
+
+    executeNonQuery("create database root.test2", "test", "test123");
+    executeNonQuery("drop database root.test1, root.test2", "test", "test123");
+  }
+
+  @Test
+  public void manageTriggerTest() {
+    assertNonQueryTestFail(
+        String.format(
+            "create stateless trigger testTrigger before insert on 
root.test.stateless.* as '%s' using URI '%s'",
+            TRIGGER_FILE_TIMES_COUNTER, TRIGGER_JAR_PREFIX + 
"TriggerFireTimesCounter.jar"),
+        "803: No permissions for this operation, please add privilege 
USE_TRIGGER",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "drop trigger testTrigger",
+        "803: No permissions for this operation, please add privilege 
USE_TRIGGER",
+        "test",
+        "test123");
+    assertTestFail(
+        "show triggers",
+        "803: No permissions for this operation, please add privilege 
USE_TRIGGER",
+        "test",
+        "test123");
+
+    grantUserSystemPrivileges("test", PrivilegeType.USE_TRIGGER);
+
+    executeNonQuery(
+        String.format(
+            "create stateless trigger testTrigger before insert on 
root.test.stateless.* as '%s' using URI '%s'",
+            TRIGGER_FILE_TIMES_COUNTER, TRIGGER_JAR_PREFIX + 
"TriggerFireTimesCounter.jar"),
+        "test",
+        "test123");
+    executeNonQuery("drop trigger testTrigger", "test", "test123");
+    executeQuery("show triggers", "test", "test123");
+  }
+
+  @Test
+  public void manageUdfTest() {
+    assertNonQueryTestFail(
+        "create function counter as 
'org.apache.iotdb.db.query.udf.example.Counter'",
+        "803: No permissions for this operation, please add privilege USE_UDF",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "drop function counter",
+        "803: No permissions for this operation, please add privilege USE_UDF",
+        "test",
+        "test123");
+    assertTestFail(
+        "show functions",
+        "803: No permissions for this operation, please add privilege USE_UDF",
+        "test",
+        "test123");
+
+    grantUserSystemPrivileges("test", PrivilegeType.USE_UDF);
+
+    executeNonQuery(
+        "create function counter as 
'org.apache.iotdb.db.query.udf.example.Counter'",
+        "test",
+        "test123");
+    executeNonQuery("drop function counter", "test", "test123");
+    executeQuery("show functions", "test", "test123");
+  }
+
+  @Test
+  public void manageCQTest() {
+    assertNonQueryTestFail(
+        "CREATE CQ testCQ\n"
+            + "RESAMPLE RANGE 30m, 0m\n"
+            + "TIMEOUT POLICY DISCARD\n"
+            + "BEGIN \n"
+            + "  SELECT count(s1)  \n"
+            + "    INTO root.sg_count.d(count_s1)\n"
+            + "    FROM root.sg.d\n"
+            + "    GROUP BY(10m)\n"
+            + "END",
+        "803: No permissions for this operation, please add privilege USE_CQ",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "drop CQ testCQ",
+        "803: No permissions for this operation, please add privilege USE_CQ",
+        "test",
+        "test123");
+    assertTestFail(
+        "show CQs",
+        "803: No permissions for this operation, please add privilege USE_CQ",
+        "test",
+        "test123");
+
+    grantUserSystemPrivileges("test", PrivilegeType.USE_CQ);
+
+    executeNonQuery(
+        "CREATE CQ testCQ\n"
+            + "RESAMPLE RANGE 30m, 0m\n"
+            + "TIMEOUT POLICY DISCARD\n"
+            + "BEGIN \n"
+            + "  SELECT count(s1)  \n"
+            + "    INTO root.sg_count.d(count_s1)\n"
+            + "    FROM root.sg.d\n"
+            + "    GROUP BY(10m)\n"
+            + "END",
+        "test",
+        "test123");
+    executeNonQuery("drop CQ testCQ", "test", "test123");
+    executeQuery("show CQs", "test", "test123");
+  }
+
+  @Test
+  public void managePipe() {
+    assertNonQueryTestFail(
+        "create pipe testPipe\n"
+            + "with connector (\n"
+            + "  'connector'='iotdb-thrift-connector',\n"
+            + "  'connector.ip'='127.0.0.1',\n"
+            + "  'connector.port'='6668'\n"
+            + ")",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "drop pipe testPipe",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+    assertTestFail(
+        "show pipes",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "start pipe testPipe",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "stop pipe testPipe",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+
+    assertNonQueryTestFail(
+        "create pipePlugin TestProcessor as 
'org.apache.iotdb.db.pipe.example.TestProcessor' USING URI 'xxx'",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "drop pipePlugin TestProcessor",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+    assertTestFail(
+        "show pipe plugins",
+        "803: No permissions for this operation, please add privilege 
USE_PIPE",
+        "test",
+        "test123");
+
+    grantUserSystemPrivileges("test", PrivilegeType.USE_PIPE);
+
+    executeNonQuery(
+        "create pipe testPipe\n"
+            + "with connector (\n"
+            + "  'connector'='iotdb-thrift-connector',\n"
+            + "  'connector.ip'='127.0.0.1',\n"
+            + "  'connector.port'='6668'\n"
+            + ")",
+        "test",
+        "test123");
+    executeQuery("show pipes", "test", "test123");
+    executeNonQuery("start pipe testPipe", "test", "test123");
+    executeNonQuery("stop pipe testPipe", "test", "test123");
+    executeNonQuery("drop pipe testPipe", "test", "test123");
+
+    assertNonQueryTestFail(
+        "create pipePlugin TestProcessor as 
'org.apache.iotdb.db.pipe.example.TestProcessor' USING URI 'xxx'",
+        "1603: The scheme of URI is not set, please specify the scheme of 
URI.",
+        "test",
+        "test123");
+    executeNonQuery("drop pipePlugin TestProcessor", "test", "test123");
+    executeQuery("show pipe plugins", "test", "test123");
+  }
+
+  @Test
+  public void maintainOperationsTest() {
+    assertNonQueryTestFail(
+        "show variables",
+        "803: No permissions for this operation, please add privilege 
MAINTAIN",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "show queries",
+        "803: No permissions for this operation, please add privilege 
MAINTAIN",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "kill query 'test'",
+        "803: No permissions for this operation, please add privilege 
MAINTAIN",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "show cluster",
+        "803: No permissions for this operation, please add privilege 
MAINTAIN",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "show cluster details",
+        "803: No permissions for this operation, please add privilege 
MAINTAIN",
+        "test",
+        "test123");
+
+    grantUserSystemPrivileges("test", PrivilegeType.MAINTAIN);
+
+    executeNonQuery("show variables", "test", "test123");
+    executeNonQuery("show queries", "test", "test123");
+    assertNonQueryTestFail(
+        "kill query 'test'",
+        "305: Please ensure your input <queryId> is correct",
+        "test",
+        "test123");
+    executeNonQuery("show cluster", "test", "test123");
+    executeNonQuery("show cluster details", "test", "test123");
+  }
+
+  @Test
+  public void adminOperationsTest() {
+    assertNonQueryTestFail(
+        "flush", "803: Only the admin user can perform this operation", 
"test", "test123");
+    assertNonQueryTestFail(
+        "merge", "803: Only the admin user can perform this operation", 
"test", "test123");
+    assertNonQueryTestFail(
+        "clear cache", "803: Only the admin user can perform this operation", 
"test", "test123");
+    assertNonQueryTestFail(
+        "set system to readonly",
+        "803: Only the admin user can perform this operation",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "set system to running",
+        "803: Only the admin user can perform this operation",
+        "test",
+        "test123");
+    assertNonQueryTestFail(
+        "load configuration",
+        "803: Only the admin user can perform this operation",
+        "test",
+        "test123");
+    assertTestFail(
+        "show version", "803: Only the admin user can perform this operation", 
"test", "test123");
+    assertTestFail(
+        "show regions", "803: Only the admin user can perform this operation", 
"test", "test123");
+  }
+}
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java
index 1b858d70dd8..be8148758f6 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java
@@ -481,94 +481,6 @@ public class IoTDBCQIT {
     }
   }
 
-  @Test
-  public void testShowAuth() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-
-      String[] cqIds = {"show_cq_1", "show_cq_2", "show_cq_3", "show_cq_4"};
-      String[] cqSQLs = {
-        "CREATE CQ show_cq_1 \n"
-            + "RESAMPLE \n"
-            + "  EVERY 30m\n"
-            + "  BOUNDARY 0\n"
-            + "  RANGE 30m, 10m\n"
-            + "TIMEOUT POLICY BLOCKED\n"
-            + "BEGIN \n"
-            + "  SELECT count(s1)  \n"
-            + "    INTO root.sg_count.d(count_s1)\n"
-            + "    FROM root.sg.d\n"
-            + "    GROUP BY(30m)\n"
-            + "END",
-        "CREATE CQ show_cq_2\n"
-            + "BEGIN \n"
-            + "  SELECT count(s1)  \n"
-            + "    INTO root.sg_count.d(count_s1)\n"
-            + "    FROM root.sg.d\n"
-            + "    GROUP BY(30m)\n"
-            + "END",
-        "CREATE CQ show_cq_3\n"
-            + "RESAMPLE RANGE 30m, 0m\n"
-            + "TIMEOUT POLICY DISCARD\n"
-            + "BEGIN \n"
-            + "  SELECT count(s1)  \n"
-            + "    INTO root.sg_count.d(count_s1)\n"
-            + "    FROM root.sg.d\n"
-            + "    GROUP BY(10m)\n"
-            + "END",
-        "CREATE CQ show_cq_4\n"
-            + "RESAMPLE EVERY 30m \n"
-            + "TIMEOUT POLICY DISCARD\n"
-            + "BEGIN \n"
-            + "  SELECT count(s1)  \n"
-            + "    INTO root.sg_count.d(count_s1)\n"
-            + "    FROM root.sg.d\n"
-            + "    GROUP BY(10m)\n"
-            + "END"
-      };
-
-      for (String sql : cqSQLs) {
-        statement.execute(sql);
-      }
-
-      statement.execute("CREATE USER `zmty` 'zmty'");
-
-      try (Connection connection2 = EnvFactory.getEnv().getConnection("zmty", 
"zmty");
-          Statement statement2 = connection2.createStatement()) {
-        try {
-          statement2.executeQuery("show CQS");
-          fail();
-        } catch (Exception e) {
-          assertEquals(
-              TSStatusCode.NO_PERMISSION.getStatusCode()
-                  + ": No permissions for this operation, please add privilege 
USE_CQ",
-              e.getMessage());
-        }
-
-        statement.execute("GRANT USER `zmty` PRIVILEGES USE_CQ");
-
-        try (ResultSet resultSet = statement2.executeQuery("show CQS")) {
-
-          int cnt = 0;
-          while (resultSet.next()) {
-            // No need to add time column for aggregation query
-            assertEquals(cqIds[cnt], resultSet.getString(1));
-            assertEquals(cqSQLs[cnt], resultSet.getString(2));
-            assertEquals("ACTIVE", resultSet.getString(3));
-            cnt++;
-          }
-          assertEquals(cqIds.length, cnt);
-        }
-      }
-
-      for (String cqId : cqIds) {
-        statement.execute(String.format("DROP CQ %s;", cqId));
-      }
-    } catch (Exception e) {
-      fail(e.getMessage());
-    }
-  }
-
   // =======================================drop 
cq======================================
   @Test
   public void testDropCQ() {
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/trigger/IoTDBTriggerManagementIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/trigger/IoTDBTriggerManagementIT.java
index 8b04523b6b8..cb21faa628d 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/trigger/IoTDBTriggerManagementIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/trigger/IoTDBTriggerManagementIT.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.it.env.EnvFactory;
 import org.apache.iotdb.it.framework.IoTDBTestRunner;
 import org.apache.iotdb.itbase.category.ClusterIT;
 import org.apache.iotdb.itbase.category.LocalStandaloneIT;
-import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.junit.After;
 import org.junit.Before;
@@ -56,9 +55,9 @@ public class IoTDBTriggerManagementIT {
           + "test-classes"
           + File.separator;
 
-  private static final String TRIGGER_JAR_PREFIX =
+  public static final String TRIGGER_JAR_PREFIX =
       new File(TRIGGER_COUNTER_PREFIX).toURI().toString();
-  private static final String TRIGGER_FILE_TIMES_COUNTER =
+  public static final String TRIGGER_FILE_TIMES_COUNTER =
       "org.apache.iotdb.db.trigger.example.TriggerFireTimesCounter";
 
   private static final String STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX =
@@ -524,116 +523,4 @@ public class IoTDBTriggerManagementIT {
       assertTrue(e.getMessage().contains("has not been created"));
     }
   }
-
-  @Test
-  public void testCreateAuth() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-
-      statement.execute("CREATE USER `zmty` 'zmty'");
-
-      try (Connection connection2 = EnvFactory.getEnv().getConnection("zmty", 
"zmty");
-          Statement statement2 = connection2.createStatement()) {
-        try {
-          statement2.execute(
-              String.format(
-                  "create stateless trigger %s before insert on 
root.test.stateless.a as '%s' using URI '%s' with (\"name\"=\"%s\")",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a",
-                  TRIGGER_FILE_TIMES_COUNTER,
-                  TRIGGER_JAR_PREFIX + "TriggerFireTimesCounter.jar",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a"));
-          fail();
-        } catch (Exception e) {
-          assertEquals(
-              TSStatusCode.NO_PERMISSION.getStatusCode()
-                  + ": No permissions for this operation, please add privilege 
USE_TRIGGER",
-              e.getMessage());
-        }
-
-        statement.execute("GRANT USER `zmty` PRIVILEGES USE_TRIGGER on 
root.test.stateless.a");
-
-        try {
-          statement2.execute(
-              String.format(
-                  "create stateless trigger %s before insert on 
root.test.stateless.a as '%s' using URI '%s' with (\"name\"=\"%s\")",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a",
-                  TRIGGER_FILE_TIMES_COUNTER,
-                  TRIGGER_JAR_PREFIX + "TriggerFireTimesCounter.jar",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a"));
-        } catch (Exception e) {
-          fail(e.getMessage());
-        }
-
-        try {
-          statement2.execute(
-              String.format(
-                  "create stateless trigger %s before insert on 
root.test.stateless.b as '%s' using URI '%s' with (\"name\"=\"%s\")",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "b",
-                  TRIGGER_FILE_TIMES_COUNTER,
-                  TRIGGER_JAR_PREFIX + "TriggerFireTimesCounter.jar",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "b"));
-          fail();
-        } catch (Exception e) {
-          assertEquals(
-              TSStatusCode.NO_PERMISSION.getStatusCode()
-                  + ": No permissions for this operation, please add privilege 
USE_TRIGGER",
-              e.getMessage());
-        }
-      }
-    } catch (Exception e) {
-      fail(e.getMessage());
-    }
-  }
-
-  @Test
-  public void testDropAuth() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-
-      statement.execute("CREATE USER `zmty` 'zmty'");
-
-      try (Connection connection2 = EnvFactory.getEnv().getConnection("zmty", 
"zmty");
-          Statement statement2 = connection2.createStatement()) {
-        try {
-          statement.execute(
-              String.format(
-                  "create stateless trigger %s before insert on 
root.test.stateless.a as '%s' using URI '%s' with (\"name\"=\"%s\")",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a",
-                  TRIGGER_FILE_TIMES_COUNTER,
-                  TRIGGER_JAR_PREFIX + "TriggerFireTimesCounter.jar",
-                  STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a"));
-
-          statement2.execute("drop trigger " + 
STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a");
-          fail();
-        } catch (Exception e) {
-          assertEquals(
-              TSStatusCode.NO_PERMISSION.getStatusCode()
-                  + ": No permissions for this operation, please add privilege 
USE_TRIGGER",
-              e.getMessage());
-        }
-
-        statement.execute("GRANT USER `zmty` PRIVILEGES USE_TRIGGER on 
root.test.stateless.b");
-
-        try {
-          statement2.execute("drop trigger " + 
STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a");
-          fail();
-        } catch (Exception e) {
-          assertEquals(
-              TSStatusCode.NO_PERMISSION.getStatusCode()
-                  + ": No permissions for this operation, please add privilege 
USE_TRIGGER",
-              e.getMessage());
-        }
-
-        statement.execute("GRANT USER `zmty` PRIVILEGES USE_TRIGGER on 
root.test.stateless.a");
-
-        try {
-          statement2.execute("drop trigger " + 
STATELESS_TRIGGER_BEFORE_INSERTION_PREFIX + "a");
-        } catch (Exception e) {
-          fail(e.getMessage());
-        }
-      }
-    } catch (Exception e) {
-      fail(e.getMessage());
-    }
-  }
 }
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
index 0aaf98bab0e..cdb2ce47443 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/utils/TestUtils.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.it.utils;
 
+import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.isession.SessionDataSet;
 import org.apache.iotdb.it.env.EnvFactory;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
@@ -205,7 +206,11 @@ public class TestUtils {
   }
 
   public static void assertTestFail(String sql, String errMsg) {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
+    assertTestFail(sql, errMsg, "root", "root");
+  }
+
+  public static void assertTestFail(String sql, String errMsg, String 
userName, String password) {
+    try (Connection connection = EnvFactory.getEnv().getConnection(userName, 
password);
         Statement statement = connection.createStatement()) {
       statement.executeQuery(sql);
       fail("No exception!");
@@ -215,7 +220,12 @@ public class TestUtils {
   }
 
   public static void assertNonQueryTestFail(String sql, String errMsg) {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
+    assertNonQueryTestFail(sql, errMsg, "root", "root");
+  }
+
+  public static void assertNonQueryTestFail(
+      String sql, String errMsg, String userName, String password) {
+    try (Connection connection = EnvFactory.getEnv().getConnection(userName, 
password);
         Statement statement = connection.createStatement()) {
       statement.execute(sql);
       fail("No exception!");
@@ -287,7 +297,11 @@ public class TestUtils {
   }
 
   public static void executeNonQuery(String sql) {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
+    executeNonQuery(sql, "root", "root");
+  }
+
+  public static void executeNonQuery(String sql, String userName, String 
password) {
+    try (Connection connection = EnvFactory.getEnv().getConnection(userName, 
password);
         Statement statement = connection.createStatement()) {
       statement.execute(sql);
     } catch (SQLException e) {
@@ -296,6 +310,20 @@ public class TestUtils {
     }
   }
 
+  public static void executeQuery(String sql) {
+    executeNonQuery(sql, "root", "root");
+  }
+
+  public static void executeQuery(String sql, String userName, String 
password) {
+    try (Connection connection = EnvFactory.getEnv().getConnection(userName, 
password);
+        Statement statement = connection.createStatement()) {
+      statement.executeQuery(sql);
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
   public static void assertResultSetEqual(
       SessionDataSet actualResultSet,
       List<String> expectedColumnNames,
@@ -321,4 +349,35 @@ public class TestUtils {
       fail(e.getMessage());
     }
   }
+
+  public static void createUser(String userName, String password) {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(String.format("create user %s '%s'", userName, 
password));
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  public static void grantUserSystemPrivileges(String userName, PrivilegeType 
privilegeType) {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(String.format("grant %s on root.** to user %s", 
privilegeType, userName));
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  public static void grantUserSeriesPrivilege(
+      String userName, PrivilegeType privilegeType, String path) {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      statement.execute(String.format("grant %s on %s to user %s", 
privilegeType, path, userName));
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
index 57b6a3cbad9..42af7b283f0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
@@ -89,14 +89,12 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDatabaseStat
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotListStatement;
 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.CreatePipePluginStatement;
 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.DropPipePluginStatement;
 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;
@@ -109,7 +107,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowContinuousQue
 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.ShowFunctionsStatement;
-import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowPipePluginsStatement;
 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.ShowTriggersStatement;
@@ -119,8 +116,11 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.CreateModel
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.DropModelStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowModelsStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowTrailsStatement;
+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;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 8afb2a02bf4..6cdf3a93da2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -145,7 +145,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDatabaseStat
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotListStatement;
 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.CreatePipePluginStatement;
 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;
@@ -161,6 +160,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDatabaseState
 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.model.CreateModelStatement;
+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.DropPipeStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.ShowPipesStatement;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
index 895f81cd9be..84f10e3cf99 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java
@@ -28,7 +28,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountDatabaseStat
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotListStatement;
 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.CreatePipePluginStatement;
 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;
@@ -44,6 +43,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDatabaseState
 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.model.CreateModelStatement;
+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.DropPipeStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.ShowPipesStatement;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/CreatePipePluginTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/CreatePipePluginTask.java
index 243bde89d09..13ba7a9a7ed 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/CreatePipePluginTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/CreatePipePluginTask.java
@@ -22,7 +22,7 @@ package 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata;
 import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
 import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor;
-import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CreatePipePluginStatement;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.CreatePipePluginStatement;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/DropPipePluginTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/DropPipePluginTask.java
index 6d187d546a6..82f9a325706 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/DropPipePluginTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/DropPipePluginTask.java
@@ -22,7 +22,7 @@ package 
org.apache.iotdb.db.queryengine.plan.execution.config.metadata;
 import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult;
 import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor;
-import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.DropPipePluginStatement;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.pipe.DropPipePluginStatement;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
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 700789dfa7e..5909d4f51e4 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
@@ -125,7 +125,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CountTimeSlotList
 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.CreatePipePluginStatement;
 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;
@@ -133,7 +132,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.DeleteDatabaseSta
 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.DropPipePluginStatement;
 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;
@@ -149,7 +147,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDataNodesStat
 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.ShowPipePluginsStatement;
 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;
@@ -160,8 +157,11 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.CreateModel
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.DropModelStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowModelsStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowTrailsStatement;
+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;
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 17bee5aa40b..7b290a25ad9 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
@@ -45,7 +45,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateAlignedTime
 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.CreatePipePluginStatement;
 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;
@@ -53,7 +52,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.DeleteDatabaseSta
 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.DropPipePluginStatement;
 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;
@@ -69,7 +67,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowDataNodesStat
 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.ShowPipePluginsStatement;
 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;
@@ -80,8 +77,11 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.CreateModel
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.DropModelStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowModelsStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowTrailsStatement;
+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;
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 d9111b743ae..dfda53b4cf0 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
@@ -20,10 +20,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.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;
 
 public class ShowClusterStatement extends ShowStatement implements 
IConfigStatement {
 
@@ -36,9 +38,12 @@ public class ShowClusterStatement extends ShowStatement 
implements IConfigStatem
 
   @Override
   public TSStatus checkPermissionBeforeProcess(String userName) {
+    if (AuthorityChecker.SUPER_USER.equals(userName)) {
+      return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    }
     return AuthorityChecker.getTSStatus(
-        AuthorityChecker.SUPER_USER.equals(userName),
-        "Only the admin user can perform this operation");
+        AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.MAINTAIN.ordinal()),
+        PrivilegeType.MAINTAIN);
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreatePipePluginStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java
similarity index 97%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreatePipePluginStatement.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java
index 50496553894..f954cc347dc 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreatePipePluginStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/CreatePipePluginStatement.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.statement.metadata;
+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;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropPipePluginStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java
similarity index 97%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropPipePluginStatement.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java
index c85257b1b40..49807d21a24 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DropPipePluginStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/DropPipePluginStatement.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.statement.metadata;
+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;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowPipePluginsStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java
similarity index 93%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowPipePluginsStatement.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java
index b0159a7bb37..351ab731754 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/ShowPipePluginsStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/pipe/ShowPipePluginsStatement.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.statement.metadata;
+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;
@@ -27,6 +27,7 @@ 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;
 
 import java.util.Collections;

Reply via email to