This is an automated email from the ASF dual-hosted git repository.
shuwenwei pushed a commit to branch AuthEnhance
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/AuthEnhance by this push:
new a472ae0453a check deprecated privileges
a472ae0453a is described below
commit a472ae0453a5ebd2d2e15def98dd49996a286fb5
Author: shuwenwei <[email protected]>
AuthorDate: Wed Sep 17 18:49:36 2025 +0800
check deprecated privileges
---
.../org/apache/iotdb/db/auth/AuthorityChecker.java | 5 +--
.../db/queryengine/plan/parser/ASTVisitor.java | 11 +++++-
.../plan/relational/sql/parser/AstBuilder.java | 11 +++++-
.../iotdb/commons/auth/entity/PrivilegeType.java | 45 ++++++++++++++++++++++
.../org/apache/iotdb/commons/auth/entity/Role.java | 2 +-
5 files changed, 68 insertions(+), 6 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
index 35117bdf34b..26f320b8fe8 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
@@ -28,7 +28,6 @@ import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
-import org.apache.iotdb.commons.utils.AuthUtils;
import org.apache.iotdb.confignode.rpc.thrift.TAuthorizerResp;
import org.apache.iotdb.confignode.rpc.thrift.TDBPrivilege;
import org.apache.iotdb.confignode.rpc.thrift.TPathPrivilege;
@@ -186,10 +185,10 @@ public class AuthorityChecker {
.setMessage(
NO_PERMISSION_PROMOTION
+ getSatisfyAnyNeededPrivilegeString(
-
AuthUtils.getAllPrivilegesContainingCurrentPrivilege(neededPrivilege)));
+ neededPrivilege.getReplacedPrivilegeType()));
}
- private static String getSatisfyAnyNeededPrivilegeString(List<PrivilegeType>
privileges) {
+ private static String getSatisfyAnyNeededPrivilegeString(PrivilegeType...
privileges) {
StringJoiner sj = new StringJoiner("/");
for (PrivilegeType privilege : privileges) {
sj.add(privilege.toString());
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 06c6d345d09..104a8b1b431 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
@@ -2633,6 +2633,15 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
|| (!"READ".equalsIgnoreCase(privilege)
&& !"WRITE".equalsIgnoreCase(privilege)
&&
!PrivilegeType.valueOf(privilege.toUpperCase()).isPathPrivilege())) {
+ PrivilegeType privilegeType =
PrivilegeType.valueOf(privilege.toUpperCase());
+ if (privilegeType.isDeprecated()) {
+ throw new SemanticException(
+ "Privilege type "
+ + privilege.toUpperCase()
+ + " is deprecated, use "
+ + privilegeType.getReplacedPrivilegeType()
+ + " to instead it");
+ }
hasSystemPri = true;
errorPrivilegeName = privilege.toUpperCase();
break;
@@ -2659,7 +2668,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
continue;
} else if (priv.equalsIgnoreCase("ALL")) {
for (PrivilegeType type : PrivilegeType.values()) {
- if (type.isRelationalPrivilege() || type.isAdminPrivilege()) {
+ if (type.isRelationalPrivilege() || type.isDeprecated()) {
continue;
}
privSet.add(type.toString());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
index 89941c896c2..43de4fcc77d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
@@ -1795,7 +1795,16 @@ public class AstBuilder extends
RelationalSqlBaseVisitor<Node> {
List<RelationalSqlParser.SystemPrivilegeContext> privilegeContexts =
ctx.systemPrivilege();
Set<PrivilegeType> privileges = new HashSet<>();
for (RelationalSqlParser.SystemPrivilegeContext privilege :
privilegeContexts) {
- privileges.add(PrivilegeType.valueOf(privilege.getText().toUpperCase()));
+ PrivilegeType privilegeType =
PrivilegeType.valueOf(privilege.getText().toUpperCase());
+ if (privilegeType.isDeprecated()) {
+ throw new SemanticException(
+ "Privilege type "
+ + privilege.getText().toUpperCase()
+ + " is deprecated, use "
+ + privilegeType.getReplacedPrivilegeType()
+ + " to instead it");
+ }
+ privileges.add(privilegeType);
}
return privileges;
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
index c7330ac8356..4763c2fd454 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/PrivilegeType.java
@@ -19,7 +19,10 @@
package org.apache.iotdb.commons.auth.entity;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/** This enum class contains all available privileges in IoTDB. */
@@ -116,4 +119,46 @@ public enum PrivilegeType {
public PrivilegeModelType getModelType() {
return modelType;
}
+
+ public List<PrivilegeType> getAllPrivilegesContainingCurrentPrivilege() {
+ switch (this) {
+ case MANAGE_USER:
+ case MANAGE_ROLE:
+ return Arrays.asList(this, PrivilegeType.SECURITY);
+ case MAINTAIN:
+ case USE_UDF:
+ case USE_MODEL:
+ case USE_TRIGGER:
+ case USE_CQ:
+ case USE_PIPE:
+ case MANAGE_DATABASE:
+ case EXTEND_TEMPLATE:
+ return Arrays.asList(this, PrivilegeType.SYSTEM);
+ default:
+ return Collections.singletonList(this);
+ }
+ }
+
+ public PrivilegeType getReplacedPrivilegeType() {
+ switch (this) {
+ case MANAGE_USER:
+ case MANAGE_ROLE:
+ return PrivilegeType.SECURITY;
+ case MAINTAIN:
+ case USE_UDF:
+ case USE_MODEL:
+ case USE_TRIGGER:
+ case USE_CQ:
+ case USE_PIPE:
+ case MANAGE_DATABASE:
+ case EXTEND_TEMPLATE:
+ return PrivilegeType.SYSTEM;
+ default:
+ return this;
+ }
+ }
+
+ public boolean isDeprecated() {
+ return this.getReplacedPrivilegeType() != this;
+ }
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
index d798f0085ca..2443ef38a17 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/auth/entity/Role.java
@@ -515,7 +515,7 @@ public class Role {
}
public boolean checkSysPrivilege(PrivilegeType priv) {
- return AuthUtils.getAllPrivilegesContainingCurrentPrivilege(priv).stream()
+ return priv.getAllPrivilegesContainingCurrentPrivilege().stream()
.anyMatch(sysPrivilegeSet::contains);
}