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;