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 34ed2eb0776 modify AccessControl
34ed2eb0776 is described below

commit 34ed2eb077620dcb10cbbf4b8169d7e6f667b5cd
Author: shuwenwei <[email protected]>
AuthorDate: Wed Sep 17 10:24:22 2025 +0800

    modify AccessControl
---
 .../plan/relational/security/AccessControl.java    |  9 ++++++
 .../relational/security/AccessControlImpl.java     | 32 ++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
index b91c75b0407..1cc7083360b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControl.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.db.queryengine.plan.relational.security;
 
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
+import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
 import org.apache.iotdb.commons.path.PartialPath;
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectName;
@@ -175,6 +176,14 @@ public interface AccessControl {
    */
   void checkUserGlobalSysPrivilege(String userName);
 
+  /**
+   * Check if user has sepecified global privilege
+   * @param userName name of user
+   * @param privilegeType needed privilege
+   * @throws AccessDeniedException if not allowed
+   */
+  boolean hasGlobalPrivilege(String userName, PrivilegeType privilegeType);
+
   // ====================================== TREE 
=============================================
 
   TSStatus checkPermissionBeforeProcess(Statement statement, String userName);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
index 50c8d9b2e87..1e5ee6bc82a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/AccessControlImpl.java
@@ -54,18 +54,27 @@ public class AccessControlImpl implements AccessControl {
   @Override
   public void checkCanCreateDatabase(String userName, String databaseName) {
     InformationSchemaUtils.checkDBNameInWrite(databaseName);
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkDatabasePrivilege(userName, databaseName, 
TableModelPrivilege.CREATE);
   }
 
   @Override
   public void checkCanDropDatabase(String userName, String databaseName) {
     InformationSchemaUtils.checkDBNameInWrite(databaseName);
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkDatabasePrivilege(userName, databaseName, 
TableModelPrivilege.DROP);
   }
 
   @Override
   public void checkCanAlterDatabase(String userName, String databaseName) {
     InformationSchemaUtils.checkDBNameInWrite(databaseName);
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkDatabasePrivilege(userName, databaseName, 
TableModelPrivilege.ALTER);
   }
 
@@ -75,24 +84,36 @@ public class AccessControlImpl implements AccessControl {
     if (databaseName.equals(InformationSchema.INFORMATION_DATABASE)) {
       return;
     }
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkDatabaseVisibility(userName, databaseName);
   }
 
   @Override
   public void checkCanCreateTable(String userName, QualifiedObjectName 
tableName) {
     InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkTablePrivilege(userName, tableName, 
TableModelPrivilege.CREATE);
   }
 
   @Override
   public void checkCanDropTable(String userName, QualifiedObjectName 
tableName) {
     InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkTablePrivilege(userName, tableName, 
TableModelPrivilege.DROP);
   }
 
   @Override
   public void checkCanAlterTable(String userName, QualifiedObjectName 
tableName) {
     InformationSchemaUtils.checkDBNameInWrite(tableName.getDatabaseName());
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkTablePrivilege(userName, tableName, 
TableModelPrivilege.ALTER);
   }
 
@@ -136,6 +157,9 @@ public class AccessControlImpl implements AccessControl {
     if 
(tableName.getDatabaseName().equals(InformationSchema.INFORMATION_DATABASE)) {
       return;
     }
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     authChecker.checkTableVisibility(userName, tableName);
   }
 
@@ -144,6 +168,9 @@ public class AccessControlImpl implements AccessControl {
     if (AuthorityChecker.SUPER_USER.equals(userName)) {
       return;
     }
+    if (AuthorityChecker.checkSystemPermission(userName, 
PrivilegeType.SYSTEM)) {
+      return;
+    }
     TSStatus status =
         AuthorityChecker.getTSStatus(
             AuthorityChecker.checkFullPathOrPatternPermission(
@@ -373,6 +400,11 @@ public class AccessControlImpl implements AccessControl {
     }
   }
 
+  @Override
+  public boolean hasGlobalPrivilege(String userName, PrivilegeType 
privilegeType) {
+    return AuthorityChecker.SUPER_USER.equals(userName) || 
AuthorityChecker.checkSystemPermission(userName, privilegeType);
+  }
+
   @Override
   public TSStatus checkPermissionBeforeProcess(Statement statement, String 
userName) {
     if (AuthorityChecker.SUPER_USER.equals(userName) && !(statement instanceof 
AuthorStatement)) {

Reply via email to