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

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


The following commit(s) were added to refs/heads/master by this push:
     new 300987c7cd2 Remove password history feature in iotdb. (#17436)
300987c7cd2 is described below

commit 300987c7cd28c35c22bb8194be996f26d636c2e4
Author: wenyanshi-123 <[email protected]>
AuthorDate: Tue Apr 14 09:53:53 2026 +0800

    Remove password history feature in iotdb. (#17436)
---
 .../partition/IoTDBAutoRegionGroupExtensionIT.java |   6 +-
 .../it/partition/IoTDBPartitionGetterIT.java       |   3 +-
 .../confignode/it/procedure/IoTDBProcedureIT.java  |   3 +-
 .../IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java |   6 +-
 .../commit/IoTDBRegionReconstructForIoTV1IT.java   |   2 +-
 .../java/org/apache/iotdb/db/it/IoTDBMiscIT.java   |   2 +-
 .../org/apache/iotdb/db/it/auth/IoTDBAuthIT.java   | 105 ------
 .../iotdb/db/it/mqtt/IoTDBMQTTServiceJsonIT.java   |   2 +-
 .../iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java  |   3 +-
 .../treemodel/auto/basic/IoTDBPipeLifeCycleIT.java |   2 +-
 .../treemodel/auto/basic/IoTDBPipeProtocolIT.java  |   4 +-
 .../treemodel/auto/basic/IoTDBPipeSourceIT.java    |   2 -
 .../auto/enhanced/IoTDBPipeIdempotentIT.java       |  36 +-
 .../treemodel/manual/IoTDBPipePermissionIT.java    |   6 +-
 .../relational/it/mqtt/IoTDBMQTTServiceIT.java     |   8 +-
 .../relational/it/schema/IoTDBDatabaseIT.java      |   5 +-
 .../org/apache/iotdb/db/audit/DNAuditLogger.java   |   1 -
 .../protocol/thrift/IoTDBDataNodeReceiver.java     |   9 -
 .../iotdb/db/protocol/session/SessionManager.java  |  52 ---
 .../execution/config/TableConfigTaskVisitor.java   |   2 -
 .../execution/config/TreeConfigTaskVisitor.java    |   3 -
 .../sql/ast/RelationalAuthorStatement.java         |  51 ---
 .../plan/statement/sys/AuthorStatement.java        |  51 ---
 .../apache/iotdb/db/utils/DataNodeAuthUtils.java   | 370 ---------------------
 .../apache/iotdb/commons/conf/CommonConfig.java    |  27 --
 25 files changed, 44 insertions(+), 717 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
index 33481d9faae..3cb9f6221f8 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBAutoRegionGroupExtensionIT.java
@@ -189,8 +189,7 @@ public class IoTDBAutoRegionGroupExtensionIT {
                   .merge(regionInfo.getDataNodeId(), 1, Integer::sum);
             });
     // The number of RegionGroups should not less than the 
testMinRegionGroupNum for each database
-    // +1 for AUDIT database
-    Assert.assertEquals(TEST_DATABASE_NUM + 1, databaseRegionCounter.size());
+    Assert.assertEquals(TEST_DATABASE_NUM, databaseRegionCounter.size());
     databaseRegionCounter.forEach(
         (database, regionCount) ->
             Assert.assertTrue(
@@ -209,8 +208,7 @@ public class IoTDBAutoRegionGroupExtensionIT {
             <= 1);
     // The maximal Region count - minimal Region count should be less than or 
equal to 1 for each
     // Database
-    // +1 for system database
-    Assert.assertEquals(TEST_DATABASE_NUM + 1, 
databaseDataNodeRegionCounter.size());
+    Assert.assertEquals(TEST_DATABASE_NUM, 
databaseDataNodeRegionCounter.size());
     databaseDataNodeRegionCounter.forEach(
         (database, dataNodeRegionCount) ->
             Assert.assertTrue(
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
index f110d4a8d28..37fec43648e 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
@@ -534,8 +534,7 @@ public class IoTDBPartitionGetterIT {
       nodeManagementResp = 
client.getSchemaNodeManagementPartition(nodeManagementReq);
       Assert.assertEquals(
           TSStatusCode.SUCCESS_STATUS.getStatusCode(), 
nodeManagementResp.getStatus().getCode());
-      // +1 for AUDIT database
-      Assert.assertEquals(databaseNum + 1, 
nodeManagementResp.getMatchedNodeSize());
+      Assert.assertEquals(databaseNum, 
nodeManagementResp.getMatchedNodeSize());
       Assert.assertNotNull(nodeManagementResp.getSchemaRegionMap());
       Assert.assertEquals(0, nodeManagementResp.getSchemaRegionMapSize());
     }
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/procedure/IoTDBProcedureIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/procedure/IoTDBProcedureIT.java
index ef56141d0bf..bae794807f3 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/procedure/IoTDBProcedureIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/procedure/IoTDBProcedureIT.java
@@ -137,7 +137,8 @@ public class IoTDBProcedureIT {
     Callable<Boolean> finalCheck =
         () -> {
           TShowDatabaseResp resp1 = 
newLeaderClient.showDatabase(showAllDatabasesReq);
-          if (MAX_STATE != resp1.getDatabaseInfoMap().size() - 1) {
+          if (resp1.getDatabaseInfoMap() == null
+              || MAX_STATE != resp1.getDatabaseInfoMap().size()) {
             return false;
           }
           resp1
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
index 99d061a443c..1e1b300fdf6 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionGroupExpandAndShrinkForIoTV1IT.java
@@ -94,8 +94,7 @@ public class IoTDBRegionGroupExpandAndShrinkForIoTV1IT
       Set<Integer> allDataNodeId = getAllDataNodes(statement);
 
       // expect one data region, one schema region
-      // plus one AUDIT data region, one AUDIT schema region
-      Assert.assertEquals(4, regionMap.size());
+      Assert.assertEquals(2, regionMap.size());
 
       // expand
       for (int selectedRegion : regionMap.keySet()) {
@@ -217,8 +216,7 @@ public class IoTDBRegionGroupExpandAndShrinkForIoTV1IT
       Set<Integer> allDataNodeId = getAllDataNodes(statement);
 
       // expect one data region, one schema region
-      // plus one AUDIT data region, one AUDIT schema region
-      Assert.assertEquals(4, regionMap.size());
+      Assert.assertEquals(2, regionMap.size());
 
       // select multiple regions for testing
       List<Integer> selectedRegions = new ArrayList<>(regionMap.keySet());
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionReconstructForIoTV1IT.java
 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionReconstructForIoTV1IT.java
index 3dc4468e526..fbecdabcc60 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionReconstructForIoTV1IT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/confignode/it/regionmigration/pass/commit/IoTDBRegionReconstructForIoTV1IT.java
@@ -104,7 +104,7 @@ public class IoTDBRegionReconstructForIoTV1IT extends 
IoTDBRegionOperationReliab
       Set<Integer> allDataNodeId = getAllDataNodes(statement);
 
       // select datanode
-      final int selectedRegion = 3;
+      final int selectedRegion = 1;
       Assert.assertTrue(dataRegionMap.containsKey(selectedRegion));
       Pair<Integer, Set<Integer>> leaderAndNodeIds = 
dataRegionMap.get(selectedRegion);
       Assert.assertEquals(2, leaderAndNodeIds.right.size());
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java
index e5fffd3dbde..809148535a5 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBMiscIT.java
@@ -56,7 +56,7 @@ public class IoTDBMiscIT {
       statement.execute("insert into 
root.comprssion_ratio_file.d1(timestamp,s1) values(1,1.0)");
       statement.execute("flush");
       // one global file and two data region file (including one AUDIT region)
-      assertEquals(3, collectCompressionRatioFiles(nodeWrapper).size());
+      assertEquals(2, collectCompressionRatioFiles(nodeWrapper).size());
 
       statement.execute("drop database root.comprssion_ratio_file");
       // one global file and system region file
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
index 441dd1fdb5c..5ec674b2a37 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBAuthIT.java
@@ -20,9 +20,7 @@
 package org.apache.iotdb.db.it.auth;
 
 import org.apache.iotdb.commons.auth.entity.PrivilegeType;
-import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.schema.column.ColumnHeaderConstant;
-import org.apache.iotdb.commons.utils.AuthUtils;
 import org.apache.iotdb.db.it.utils.TestUtils;
 import org.apache.iotdb.it.env.EnvFactory;
 import org.apache.iotdb.it.framework.IoTDBTestRunner;
@@ -51,8 +49,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Callable;
 
-import static org.apache.iotdb.commons.auth.entity.User.INTERNAL_USER_END_ID;
-import static org.apache.iotdb.db.audit.DNAuditLogger.PREFIX_PASSWORD_HISTORY;
 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.resultSetEqualTest;
@@ -1521,107 +1517,6 @@ public class IoTDBAuthIT {
     }
   }
 
-  @Test
-  public void testPasswordHistory() {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      testPasswordHistoryEncrypted(statement);
-      testPasswordHistoryCreateAndDrop(statement);
-      testPasswordHistoryAlter(statement);
-    } catch (SQLException e) {
-      e.printStackTrace();
-      fail(e.getMessage());
-    }
-  }
-
-  public void testPasswordHistoryEncrypted(Statement statement) throws 
SQLException {
-    ResultSet resultSet =
-        statement.executeQuery("SELECT password,oldPassword from 
root.__audit.password_history._0");
-    assertTrue(resultSet.next());
-    assertEquals(
-        
AuthUtils.encryptPassword(CommonDescriptor.getInstance().getConfig().getAdminPassword()),
-        resultSet.getString("root.__audit.password_history._0.password"));
-    assertEquals(
-        
AuthUtils.encryptPassword(CommonDescriptor.getInstance().getConfig().getAdminPassword()),
-        resultSet.getString("root.__audit.password_history._0.oldPassword"));
-  }
-
-  public void testPasswordHistoryCreateAndDrop(Statement statement) throws 
SQLException {
-    statement.execute("create user userA 'abcdef123456'");
-
-    long expectedUserAId = INTERNAL_USER_END_ID + 1;
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            String.format(
-                "select last password from %s.`_" + expectedUserAId + "`",
-                PREFIX_PASSWORD_HISTORY))) {
-      if (!resultSet.next()) {
-        fail("Password history not found");
-      }
-      assertEquals(AuthUtils.encryptPassword("abcdef123456"), 
resultSet.getString("Value"));
-    }
-
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            String.format(
-                "select last oldPassword from %s.`_" + expectedUserAId + "`",
-                PREFIX_PASSWORD_HISTORY))) {
-      if (!resultSet.next()) {
-        fail("Password history not found");
-      }
-      assertEquals(AuthUtils.encryptPassword("abcdef123456"), 
resultSet.getString("Value"));
-    }
-
-    statement.execute("drop user userA");
-
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            String.format(
-                "select last password from %s.`_" + expectedUserAId + "`",
-                PREFIX_PASSWORD_HISTORY))) {
-      assertFalse(resultSet.next());
-    }
-
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            String.format(
-                "select last oldPassword from %s.`_" + expectedUserAId + "`",
-                PREFIX_PASSWORD_HISTORY))) {
-      assertFalse(resultSet.next());
-    }
-  }
-
-  public void testPasswordHistoryAlter(Statement statement) throws 
SQLException {
-    statement.execute("create user userA 'abcdef123456'");
-    statement.execute("alter user userA set password 'abcdef654321'");
-
-    long expectedUserAId = INTERNAL_USER_END_ID + 2;
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            String.format(
-                "select last password from %s.`_" + expectedUserAId + "`",
-                PREFIX_PASSWORD_HISTORY))) {
-      if (!resultSet.next()) {
-        fail("Password history not found");
-      }
-      assertEquals(AuthUtils.encryptPassword("abcdef654321"), 
resultSet.getString("Value"));
-    }
-
-    try (ResultSet resultSet =
-        statement.executeQuery(
-            String.format(
-                "select oldPassword from %s.`_" + expectedUserAId + "` order 
by time desc limit 1",
-                PREFIX_PASSWORD_HISTORY))) {
-      if (!resultSet.next()) {
-        fail("Password history not found");
-      }
-      assertEquals(
-          AuthUtils.encryptPassword("abcdef123456"),
-          resultSet.getString(
-              String.format("%s._" + expectedUserAId + ".oldPassword", 
PREFIX_PASSWORD_HISTORY)));
-    }
-  }
-
   @Test
   public void testChangeBackPassword() {
     try (Connection connection = EnvFactory.getEnv().getConnection();
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/mqtt/IoTDBMQTTServiceJsonIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/mqtt/IoTDBMQTTServiceJsonIT.java
index 91031c0202d..38b0bd8ccc7 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/mqtt/IoTDBMQTTServiceJsonIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/mqtt/IoTDBMQTTServiceJsonIT.java
@@ -77,7 +77,7 @@ public class IoTDBMQTTServiceJsonIT {
     mqtt.setUserName(USER);
     mqtt.setPassword(PASSWORD);
     mqtt.setConnectAttemptsMax(3);
-    mqtt.setReconnectDelay(10);
+    mqtt.setReconnectDelay(1000);
     mqtt.setClientId("jsonClientId1");
 
     connection = mqtt.blockingConnection();
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
index 4de6b726d44..c1a08c2fd82 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBDeleteDatabaseIT.java
@@ -159,8 +159,7 @@ public class IoTDBDeleteDatabaseIT extends AbstractSchemaIT 
{
           result.add(resultSet.getString(1));
         }
       }
-      // One for un-deletable AUDIT database
-      assertEquals(1, result.size());
+      assertEquals(0, result.size());
     }
   }
 
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeLifeCycleIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeLifeCycleIT.java
index 226c9344e7a..dae6f1060ce 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeLifeCycleIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeLifeCycleIT.java
@@ -258,7 +258,7 @@ public class IoTDBPipeLifeCycleIT extends 
AbstractPipeDualTreeModelAutoIT {
           "count(timeseries),",
           Collections.singleton("0,"));
       TestUtils.assertDataEventuallyOnEnv(
-          receiverEnv, "count databases", "count,", 
Collections.singleton("4,"));
+          receiverEnv, "count databases", "count,", 
Collections.singleton("3,"));
     }
   }
 
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeProtocolIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeProtocolIT.java
index b5e4127e946..8a7ac4f1947 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeProtocolIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeProtocolIT.java
@@ -460,10 +460,10 @@ public class IoTDBPipeProtocolIT extends 
AbstractPipeDualTreeModelAutoIT {
           null);
 
       TestUtils.assertDataEventuallyOnEnv(
-          receiverEnv, "count timeseries", "count(timeseries),", 
Collections.singleton("4,"));
+          receiverEnv, "count timeseries", "count(timeseries),", 
Collections.singleton("2,"));
 
       TestUtils.assertDataEventuallyOnEnv(
-          receiverEnv, "count databases", "count,", 
Collections.singleton("3,"));
+          receiverEnv, "count databases", "count,", 
Collections.singleton("2,"));
 
       // Test file mode
       sourceAttributes.put("source.inclusion", "data");
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSourceIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSourceIT.java
index a45115f5a49..d93cb5e42d4 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSourceIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/basic/IoTDBPipeSourceIT.java
@@ -1040,8 +1040,6 @@ public class IoTDBPipeSourceIT extends 
AbstractPipeDualTreeModelAutoIT {
   }
 
   private void assertTimeseriesCountOnReceiver(BaseEnv receiverEnv, int count) 
{
-    // for system password history
-    count += 2;
     TestUtils.assertDataEventuallyOnEnv(
         receiverEnv,
         "count timeseries root.**",
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/enhanced/IoTDBPipeIdempotentIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/enhanced/IoTDBPipeIdempotentIT.java
index fb499ae5e43..6596c779132 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/enhanced/IoTDBPipeIdempotentIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/auto/enhanced/IoTDBPipeIdempotentIT.java
@@ -179,7 +179,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg",
         "count databases",
         "count,",
-        Collections.singleton("3,"));
+        Collections.singleton("2,"));
   }
 
   @Test
@@ -190,7 +190,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -202,7 +202,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -214,7 +214,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -227,7 +227,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg2",
         "count databases",
         "count,",
-        Collections.singleton("3,"));
+        Collections.singleton("2,"));
   }
 
   @Test
@@ -241,7 +241,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg2",
         "count databases",
         "count,",
-        Collections.singleton("3,"));
+        Collections.singleton("2,"));
   }
 
   @Test
@@ -271,7 +271,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg2",
         "count databases",
         "count,",
-        Collections.singleton("3,"));
+        Collections.singleton("2,"));
   }
 
   @Test
@@ -282,7 +282,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg2",
         "count databases",
         "count,",
-        Collections.singleton("3,"));
+        Collections.singleton("2,"));
   }
 
   @Test
@@ -293,7 +293,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg2",
         "count databases",
         "count,",
-        Collections.singleton("3,"));
+        Collections.singleton("2,"));
   }
 
   @Test
@@ -304,7 +304,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg2",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -315,7 +315,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -326,7 +326,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -337,7 +337,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -350,7 +350,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -361,7 +361,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -375,7 +375,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -386,7 +386,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   @Test
@@ -397,7 +397,7 @@ public class IoTDBPipeIdempotentIT extends 
AbstractPipeDualTreeModelAutoIT {
         "create database root.sg1",
         "count databases",
         "count,",
-        Collections.singleton("2,"));
+        Collections.singleton("1,"));
   }
 
   private void testIdempotent(
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipePermissionIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipePermissionIT.java
index 24807622cf6..cf6eaf6a9c5 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipePermissionIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipePermissionIT.java
@@ -198,7 +198,6 @@ public class IoTDBPipePermissionIT extends 
AbstractPipeDualTreeModelManualIT {
               "create user someUser 'passwd'",
               "create timeseries root.noPermission.wf02.wt01.status with 
datatype=BOOLEAN,encoding=PLAIN"),
           null);
-      awaitUntilFlush(senderEnv);
 
       final Map<String, String> sourceAttributes = new HashMap<>();
       final Map<String, String> processorAttributes = new HashMap<>();
@@ -229,7 +228,10 @@ public class IoTDBPipePermissionIT extends 
AbstractPipeDualTreeModelManualIT {
           
"Timeseries,Alias,Database,DataType,Encoding,Compression,Tags,Attributes,Deadband,DeadbandParameters,ViewType,",
           Collections.emptySet());
       TestUtils.assertDataAlwaysOnEnv(
-          receiverEnv, "list user", "User,", Collections.singleton("root,"));
+          receiverEnv,
+          "list user",
+          "UserId,User,",
+          new HashSet<>(Arrays.asList("0,root,", "10000,thulab,")));
     }
   }
 
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/mqtt/IoTDBMQTTServiceIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/mqtt/IoTDBMQTTServiceIT.java
index 16e3c33129f..031322cc502 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/mqtt/IoTDBMQTTServiceIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/mqtt/IoTDBMQTTServiceIT.java
@@ -104,7 +104,9 @@ public class IoTDBMQTTServiceIT {
                 try (final SessionDataSet dataSet =
                     session.executeQueryStatement(
                         "select tag1,tag2,field1,field2,field3 from test1 
where time = 1")) {
-                  assertEquals(5, dataSet.getColumnNames().size());
+                  if (dataSet.getColumnNames().size() != 5 || 
!dataSet.hasNext()) {
+                    return false;
+                  }
                   List<Field> fields = dataSet.next().getFields();
                   assertEquals("t1", fields.get(0).getStringValue());
                   assertEquals("t2", fields.get(1).getStringValue());
@@ -139,7 +141,9 @@ public class IoTDBMQTTServiceIT {
                 try (final SessionDataSet dataSet =
                     session.executeQueryStatement(
                         "select tag1,tag2,attr3,attr4,field1,field2,field3 
from test2 where time = 1")) {
-                  assertEquals(7, dataSet.getColumnNames().size());
+                  if (dataSet.getColumnNames().size() != 7 || 
!dataSet.hasNext()) {
+                    return false;
+                  }
                   List<Field> fields = dataSet.next().getFields();
                   assertEquals("t1", fields.get(0).getStringValue());
                   assertEquals("t2", fields.get(1).getStringValue());
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
index 94c215a52ae..398830efaec 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/schema/IoTDBDatabaseIT.java
@@ -751,8 +751,7 @@ public class IoTDBDatabaseIT {
           
Collections.singleton(EnvFactory.getEnv().getConfigNodeWrapperList().size() + 
","));
 
       Set<String> resultSet = new HashSet<>();
-      // data region created from writing password history
-      resultSet.add("1,");
+      resultSet.add("0,");
       for (int i = 1; i < EnvFactory.getEnv().getDataNodeWrapperList().size(); 
i++) {
         resultSet.add("0,");
       }
@@ -821,7 +820,7 @@ public class IoTDBDatabaseIT {
     try (final Connection connection = EnvFactory.getEnv().getConnection();
         final Statement statement = connection.createStatement()) {
       // One for AUDIT database
-      TestUtils.assertResultSetSize(statement.executeQuery("show databases"), 
2);
+      TestUtils.assertResultSetSize(statement.executeQuery("show databases"), 
1);
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
index 3a07ac9aa69..c838ff8ef3f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/audit/DNAuditLogger.java
@@ -32,7 +32,6 @@ import javax.validation.constraints.NotNull;
 import java.util.function.Supplier;
 
 public class DNAuditLogger extends AbstractAuditLogger {
-  public static final String PREFIX_PASSWORD_HISTORY = 
"root.__audit.password_history";
 
   private Coordinator coordinator;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
index 254928e9191..c4664f552de 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
@@ -105,7 +105,6 @@ import 
org.apache.iotdb.db.storageengine.rescon.disk.FolderManager;
 import 
org.apache.iotdb.db.storageengine.rescon.disk.strategy.DirectoryStrategyType;
 import org.apache.iotdb.db.tools.schema.SRStatementGenerator;
 import org.apache.iotdb.db.tools.schema.SchemaRegionSnapshotParser;
-import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.pipe.api.exception.PipeException;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
@@ -955,14 +954,6 @@ public class IoTDBDataNodeReceiver extends 
IoTDBFileReceiver {
       return RpcUtils.getStatus(openSessionResp.getCode(), 
openSessionResp.getMessage());
     }
 
-    long userId = AuthorityChecker.getUserId(username).orElse(-1L);
-    Long timeToExpire = DataNodeAuthUtils.checkPasswordExpiration(userId, 
password, false);
-    if (timeToExpire != null && timeToExpire <= System.currentTimeMillis()) {
-      return RpcUtils.getStatus(
-          TSStatusCode.ILLEGAL_PASSWORD.getStatusCode(),
-          "Password has expired, please use \"ALTER USER\" to change to a new 
one");
-    }
-
     return AuthorityChecker.checkUser(username, password);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
index ac7cc236d9f..cf0705dbb53 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
@@ -24,14 +24,12 @@ import org.apache.iotdb.commons.audit.AuditEventType;
 import org.apache.iotdb.commons.audit.AuditLogFields;
 import org.apache.iotdb.commons.audit.AuditLogOperation;
 import org.apache.iotdb.commons.audit.UserEntity;
-import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.service.JMXService;
 import org.apache.iotdb.commons.service.ServiceType;
 import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.service.metric.enums.Metric;
 import org.apache.iotdb.commons.service.metric.enums.Tag;
-import org.apache.iotdb.commons.utils.AuthUtils;
 import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
 import org.apache.iotdb.db.audit.DNAuditLogger;
 import org.apache.iotdb.db.auth.AuthorityChecker;
@@ -42,7 +40,6 @@ import org.apache.iotdb.db.queryengine.common.ConnectionInfo;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import 
org.apache.iotdb.db.queryengine.plan.execution.config.session.PreparedStatementMemoryManager;
 import 
org.apache.iotdb.db.storageengine.dataregion.read.control.QueryResourceManager;
-import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.metrics.utils.MetricLevel;
 import org.apache.iotdb.metrics.utils.MetricType;
 import org.apache.iotdb.rpc.RpcUtils;
@@ -55,10 +52,7 @@ import org.apache.tsfile.external.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.time.Instant;
-import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -148,16 +142,6 @@ public class SessionManager implements SessionManagerMBean 
{
 
     final long userId = AuthorityChecker.getUserId(username).orElse(-1L);
 
-    Long timeToExpire =
-        DataNodeAuthUtils.checkPasswordExpiration(userId, password, 
useEncryptedPassword);
-    if (timeToExpire != null && timeToExpire <= System.currentTimeMillis()) {
-      openSessionResp
-          .sessionId(-1)
-          .setCode(TSStatusCode.ILLEGAL_PASSWORD.getStatusCode())
-          .setMessage("Password has expired, please use \"ALTER USER\" to 
change to a new one");
-      return openSessionResp;
-    }
-
     boolean enableLoginLock = userId != -1;
     LoginLockManager loginLockManager = LoginLockManager.getInstance();
     if (enableLoginLock && loginLockManager.checkLock(userId, 
session.getClientAddress())) {
@@ -182,42 +166,6 @@ public class SessionManager implements SessionManagerMBean 
{
         session.setSqlDialect(sqlDialect);
         supplySession(session, userId, username, ZoneId.of(zoneId), 
clientVersion);
         String logInMessage = "Login successfully";
-        if (timeToExpire != null && timeToExpire != Long.MAX_VALUE) {
-          DateTimeFormatter dateFormat = 
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-          logInMessage +=
-              ". Your password will expire at "
-                  + dateFormat.format(
-                      LocalDateTime.ofInstant(
-                          Instant.ofEpochMilli(timeToExpire), 
ZoneId.systemDefault()));
-        } else if (timeToExpire == null) {
-          LOGGER.info(
-              "No password history for user {}, using the current time to 
create a new one",
-              username);
-          long currentTime = CommonDateTimeUtils.currentTime();
-          TSStatus tsStatus =
-              DataNodeAuthUtils.recordPasswordHistory(
-                  userId, password, AuthUtils.encryptPassword(password), 
currentTime);
-          if (tsStatus.getCode() != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-            openSessionResp
-                .sessionId(-1)
-                .setCode(tsStatus.getCode())
-                .setMessage(tsStatus.getMessage());
-            return openSessionResp;
-          }
-          timeToExpire =
-              CommonDateTimeUtils.convertIoTDBTimeToMillis(currentTime)
-                  + 
CommonDescriptor.getInstance().getConfig().getPasswordExpirationDays()
-                      * 1000
-                      * 86400;
-          if (timeToExpire > System.currentTimeMillis()) {
-            DateTimeFormatter dateFormat = 
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            logInMessage +=
-                ". Your password will expire at "
-                    + dateFormat.format(
-                        LocalDateTime.ofInstant(
-                            Instant.ofEpochMilli(timeToExpire), 
ZoneId.systemDefault()));
-          }
-        }
         openSessionResp
             .sessionId(session.getId())
             .setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode())
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
index 9a622a751c3..320c904ac20 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
@@ -249,7 +249,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStateme
 import 
org.apache.iotdb.db.queryengine.plan.statement.sys.ShowConfigurationStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement;
-import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.pipe.api.customizer.parameter.PipeParameters;
 import org.apache.iotdb.rpc.TSStatusCode;
 
@@ -1497,7 +1496,6 @@ public class TableConfigTaskVisitor extends 
AstVisitor<IConfigTask, MPPQueryCont
       throw new SemanticException("User " + node.getUserName() + " not found");
     }
     node.setOldPassword(user.getPassword());
-    DataNodeAuthUtils.verifyPasswordReuse(node.getAssociatedUserId(), 
node.getPassword());
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
index 1ea10ef37e8..362982f645c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java
@@ -227,7 +227,6 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.sys.quota.SetSpaceQuotaSta
 import 
org.apache.iotdb.db.queryengine.plan.statement.sys.quota.SetThrottleQuotaStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.sys.quota.ShowSpaceQuotaStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.sys.quota.ShowThrottleQuotaStatement;
-import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.exception.NotImplementedException;
@@ -346,8 +345,6 @@ public class TreeConfigTaskVisitor extends 
StatementVisitor<IConfigTask, MPPQuer
       throw new SemanticException("User " + statement.getUserName() + " not 
found");
     }
     statement.setPassWord(user.getPassword());
-    DataNodeAuthUtils.verifyPasswordReuse(
-        statement.getAssociatedUsedId(), statement.getNewPassword());
   }
 
   private void visitRenameUser(AuthorStatement statement) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
index 8fbf1339e41..8509b21987d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java
@@ -22,14 +22,10 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.schema.table.Audit;
 import org.apache.iotdb.commons.schema.table.InformationSchema;
-import org.apache.iotdb.commons.utils.AuthUtils;
-import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.relational.type.AuthorRType;
-import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.rpc.RpcUtils;
-import org.apache.iotdb.rpc.StatementExecutionException;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -300,53 +296,6 @@ public class RelationalAuthorStatement extends Statement {
    * @return null if the post-process succeeds, a status otherwise.
    */
   public TSStatus onSuccess() {
-    if (authorType == AuthorRType.CREATE_USER) {
-      return onCreateUserSuccess();
-    } else if (authorType == AuthorRType.UPDATE_USER) {
-      return onUpdateUserSuccess();
-    } else if (authorType == AuthorRType.DROP_USER) {
-      return onDropUserSuccess();
-    }
-    return null;
-  }
-
-  private TSStatus onCreateUserSuccess() {
-    associatedUserId = AuthorityChecker.getUserId(userName).orElse(-1L);
-    // the old password is expected to be encrypted during updates, so we also 
encrypt it here to
-    // keep consistency
-    TSStatus tsStatus =
-        DataNodeAuthUtils.recordPasswordHistory(
-            associatedUserId,
-            password,
-            AuthUtils.encryptPassword(password),
-            CommonDateTimeUtils.currentTime());
-    try {
-      RpcUtils.verifySuccess(tsStatus);
-    } catch (StatementExecutionException e) {
-      return new TSStatus(e.getStatusCode()).setMessage(e.getMessage());
-    }
-    return null;
-  }
-
-  private TSStatus onUpdateUserSuccess() {
-    TSStatus tsStatus =
-        DataNodeAuthUtils.recordPasswordHistory(
-            associatedUserId, password, oldPassword, 
CommonDateTimeUtils.currentTime());
-    try {
-      RpcUtils.verifySuccess(tsStatus);
-    } catch (StatementExecutionException e) {
-      return new TSStatus(e.getStatusCode()).setMessage(e.getMessage());
-    }
-    return null;
-  }
-
-  private TSStatus onDropUserSuccess() {
-    TSStatus tsStatus = 
DataNodeAuthUtils.deletePasswordHistory(associatedUserId);
-    try {
-      RpcUtils.verifySuccess(tsStatus);
-    } catch (StatementExecutionException e) {
-      return new TSStatus(e.getStatusCode()).setMessage(e.getMessage());
-    }
     return null;
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
index faf0db5391f..ecc10a8ae7a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/AuthorStatement.java
@@ -22,8 +22,6 @@ package org.apache.iotdb.db.queryengine.plan.statement.sys;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.schema.table.Audit;
-import org.apache.iotdb.commons.utils.AuthUtils;
-import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.AuthorType;
@@ -31,9 +29,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.db.utils.DataNodeAuthUtils;
 import org.apache.iotdb.rpc.RpcUtils;
-import org.apache.iotdb.rpc.StatementExecutionException;
 
 import java.util.Collections;
 import java.util.List;
@@ -265,53 +261,6 @@ public class AuthorStatement extends Statement implements 
IConfigStatement {
    * @return null if the post-process succeeds, a status otherwise.
    */
   public TSStatus onSuccess() {
-    if (authorType == AuthorType.CREATE_USER) {
-      return onCreateUserSuccess();
-    } else if (authorType == AuthorType.UPDATE_USER) {
-      return onUpdateUserSuccess();
-    } else if (authorType == AuthorType.DROP_USER) {
-      return onDropUserSuccess();
-    }
-    return null;
-  }
-
-  private TSStatus onCreateUserSuccess() {
-    associatedUsedId = AuthorityChecker.getUserId(userName).orElse(-1L);
-    // the old password is expected to be encrypted during updates, so we also 
encrypt it here to
-    // keep consistency
-    TSStatus tsStatus =
-        DataNodeAuthUtils.recordPasswordHistory(
-            associatedUsedId,
-            password,
-            AuthUtils.encryptPassword(password),
-            CommonDateTimeUtils.currentTime());
-    try {
-      RpcUtils.verifySuccess(tsStatus);
-    } catch (StatementExecutionException e) {
-      return new TSStatus(e.getStatusCode()).setMessage(e.getMessage());
-    }
-    return null;
-  }
-
-  private TSStatus onUpdateUserSuccess() {
-    TSStatus tsStatus =
-        DataNodeAuthUtils.recordPasswordHistory(
-            associatedUsedId, newPassword, password, 
CommonDateTimeUtils.currentTime());
-    try {
-      RpcUtils.verifySuccess(tsStatus);
-    } catch (StatementExecutionException e) {
-      return new TSStatus(e.getStatusCode()).setMessage(e.getMessage());
-    }
-    return null;
-  }
-
-  private TSStatus onDropUserSuccess() {
-    TSStatus tsStatus = 
DataNodeAuthUtils.deletePasswordHistory(associatedUsedId);
-    try {
-      RpcUtils.verifySuccess(tsStatus);
-    } catch (StatementExecutionException e) {
-      return new TSStatus(e.getStatusCode()).setMessage(e.getMessage());
-    }
     return null;
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java
deleted file mode 100644
index 6ee378282ad..00000000000
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DataNodeAuthUtils.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * 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.utils;
-
-import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.audit.UserEntity;
-import org.apache.iotdb.commons.conf.CommonDescriptor;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.exception.IoTDBException;
-import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.utils.AuthUtils;
-import org.apache.iotdb.commons.utils.CommonDateTimeUtils;
-import org.apache.iotdb.commons.utils.StatusUtils;
-import org.apache.iotdb.db.audit.DNAuditLogger;
-import org.apache.iotdb.db.auth.AuthorityChecker;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.exception.sql.SemanticException;
-import org.apache.iotdb.db.protocol.session.SessionManager;
-import org.apache.iotdb.db.queryengine.common.SessionInfo;
-import org.apache.iotdb.db.queryengine.plan.Coordinator;
-import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
-import 
org.apache.iotdb.db.queryengine.plan.analyze.schema.ClusterSchemaFetcher;
-import org.apache.iotdb.db.queryengine.plan.execution.ExecutionResult;
-import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
-import org.apache.iotdb.db.queryengine.plan.parser.StatementGenerator;
-import org.apache.iotdb.db.queryengine.plan.statement.Statement;
-import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
-import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.DeleteTimeSeriesStatement;
-import org.apache.iotdb.rpc.TSStatusCode;
-import org.apache.iotdb.service.rpc.thrift.TSLastDataQueryReq;
-
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.read.common.block.TsBlock;
-import org.apache.tsfile.utils.Binary;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.charset.StandardCharsets;
-import java.time.ZoneId;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Optional;
-
-public class DataNodeAuthUtils {
-
-  private DataNodeAuthUtils() {}
-
-  private static final Logger LOGGER = 
LoggerFactory.getLogger(DataNodeAuthUtils.class);
-
-  /**
-   * @return the timestamp when the password of the user is lastly changed 
from the given one to a
-   *     new one, or -1 if the password has not been changed.
-   */
-  public static long getPasswordChangeTimeMillis(long userId, String password) 
{
-
-    long queryId = -1;
-    try {
-      Statement statement =
-          StatementGenerator.createStatement(
-              "SELECT password from "
-                  + DNAuditLogger.PREFIX_PASSWORD_HISTORY
-                  + ".`_"
-                  + userId
-                  + "` where oldPassword='"
-                  + AuthUtils.encryptPassword(password)
-                  + "' order by time desc limit 1",
-              ZoneId.systemDefault());
-
-      SessionInfo sessionInfo =
-          new SessionInfo(
-              0,
-              new UserEntity(
-                  AuthorityChecker.INTERNAL_AUDIT_USER_ID,
-                  AuthorityChecker.INTERNAL_AUDIT_USER,
-                  
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
-              ZoneId.systemDefault());
-
-      queryId = SessionManager.getInstance().requestQueryId();
-      ExecutionResult result =
-          Coordinator.getInstance()
-              .executeForTreeModel(
-                  statement,
-                  queryId,
-                  sessionInfo,
-                  "",
-                  ClusterPartitionFetcher.getInstance(),
-                  ClusterSchemaFetcher.getInstance());
-      if (result.status.getCode() != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-        LOGGER.warn("Fail to get password change time: {}", result.status);
-        return -1;
-      }
-
-      IQueryExecution queryExecution = 
Coordinator.getInstance().getQueryExecution(queryId);
-      TsBlock lastTsBlock;
-      Optional<TsBlock> batchResult = queryExecution.getBatchResult();
-      lastTsBlock = batchResult.orElse(null);
-      if (lastTsBlock != null) {
-        if (lastTsBlock.getPositionCount() <= 0) {
-          // no password history, may have upgraded from an older version
-          return -1;
-        }
-        long timeByIndex = 
lastTsBlock.getTimeByIndex(lastTsBlock.getPositionCount() - 1);
-        return CommonDateTimeUtils.convertIoTDBTimeToMillis(timeByIndex);
-      }
-    } catch (IoTDBException e) {
-      LOGGER.warn("Cannot generate query for checking password reuse 
interval", e);
-    } finally {
-      if (queryId != -1) {
-        Coordinator.getInstance().cleanupQueryExecution(queryId);
-      }
-    }
-    return -1;
-  }
-
-  public static void verifyPasswordReuse(long userId, String password) {
-    long passwordReuseIntervalDays =
-        
CommonDescriptor.getInstance().getConfig().getPasswordReuseIntervalDays();
-    if (password == null || passwordReuseIntervalDays <= 0) {
-      return;
-    }
-
-    long passwordChangeTime = 
DataNodeAuthUtils.getPasswordChangeTimeMillis(userId, password);
-    long currentTimeMillis = System.currentTimeMillis();
-    long elapsedTime = currentTimeMillis - passwordChangeTime;
-    long reuseIntervalMillis =
-        passwordReuseIntervalDays * 1000 * 86400 > 0
-            ? passwordReuseIntervalDays * 1000 * 86400
-            : Long.MAX_VALUE;
-    if (elapsedTime <= reuseIntervalMillis) {
-      throw new SemanticException(
-          String.format(
-              "The password has been used recently, and it cannot be reused 
before %s",
-              new Date(passwordChangeTime + reuseIntervalMillis)));
-    }
-    LOGGER.info(
-        "It has been {}ms, since the password was changed {} -> {}",
-        elapsedTime,
-        passwordChangeTime,
-        currentTimeMillis);
-  }
-
-  public static TSStatus recordPasswordHistory(
-      long userId, String password, String oldEncryptedPassword, long 
timeToRecord) {
-    InsertRowStatement insertRowStatement = new InsertRowStatement();
-    try {
-      insertRowStatement.setDevicePath(
-          new PartialPath(DNAuditLogger.PREFIX_PASSWORD_HISTORY + ".`_" + 
userId + "`"));
-      insertRowStatement.setTime(timeToRecord);
-      insertRowStatement.setMeasurements(new String[] {"password", 
"oldPassword"});
-      insertRowStatement.setValues(
-          new Object[] {
-            new Binary(AuthUtils.encryptPassword(password), 
StandardCharsets.UTF_8),
-            oldEncryptedPassword == null
-                ? null
-                : new Binary(oldEncryptedPassword, StandardCharsets.UTF_8)
-          });
-      insertRowStatement.setDataTypes(new TSDataType[] {TSDataType.STRING, 
TSDataType.STRING});
-    } catch (IllegalPathException ignored) {
-      return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode())
-          .setMessage(
-              "Cannot create password history for " + userId + " because the 
path will be illegal");
-    }
-
-    long queryId = -1;
-    try {
-      SessionInfo sessionInfo =
-          new SessionInfo(
-              0,
-              new UserEntity(
-                  AuthorityChecker.INTERNAL_AUDIT_USER_ID,
-                  AuthorityChecker.INTERNAL_AUDIT_USER,
-                  
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
-              ZoneId.systemDefault());
-
-      queryId = SessionManager.getInstance().requestQueryId();
-      ExecutionResult result =
-          Coordinator.getInstance()
-              .executeForTreeModel(
-                  insertRowStatement,
-                  queryId,
-                  sessionInfo,
-                  "",
-                  ClusterPartitionFetcher.getInstance(),
-                  ClusterSchemaFetcher.getInstance());
-      return result.status;
-    } catch (Exception e) {
-      if 
(CommonDescriptor.getInstance().getConfig().isMayBypassPasswordCheckInException())
 {
-        return StatusUtils.OK;
-      }
-      LOGGER.error("Cannot create password history for {}", userId, e);
-      return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode())
-          .setMessage("The server is not ready for login, please check the 
server log for details");
-    } finally {
-      if (queryId != -1) {
-        Coordinator.getInstance().cleanupQueryExecution(queryId);
-      }
-    }
-  }
-
-  public static TSStatus deletePasswordHistory(long userId) {
-    DeleteTimeSeriesStatement deleteTimeSeriesStatement = new 
DeleteTimeSeriesStatement();
-    deleteTimeSeriesStatement.setMayDeleteAudit(true);
-    try {
-      PartialPath devicePath =
-          new PartialPath(DNAuditLogger.PREFIX_PASSWORD_HISTORY + ".`_" + 
userId + "`");
-      deleteTimeSeriesStatement.setPathPatternList(
-          Arrays.asList(
-              devicePath.concatAsMeasurementPath("password"),
-              devicePath.concatAsMeasurementPath("oldPassword")));
-    } catch (IllegalPathException ignored) {
-      return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode())
-          .setMessage(
-              "Cannot delete password history for " + userId + " because the 
path will be illegal");
-    }
-
-    long queryId = -1;
-    try {
-      SessionInfo sessionInfo =
-          new SessionInfo(
-              0,
-              new UserEntity(
-                  AuthorityChecker.INTERNAL_AUDIT_USER_ID,
-                  AuthorityChecker.INTERNAL_AUDIT_USER,
-                  
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
-              ZoneId.systemDefault());
-
-      queryId = SessionManager.getInstance().requestQueryId();
-      ExecutionResult result =
-          Coordinator.getInstance()
-              .executeForTreeModel(
-                  deleteTimeSeriesStatement,
-                  queryId,
-                  sessionInfo,
-                  "",
-                  ClusterPartitionFetcher.getInstance(),
-                  ClusterSchemaFetcher.getInstance());
-      return result.status;
-    } catch (Exception e) {
-      if 
(CommonDescriptor.getInstance().getConfig().isMayBypassPasswordCheckInException())
 {
-        return StatusUtils.OK;
-      }
-      LOGGER.error("Cannot delete password history for {}", userId, e);
-      return new TSStatus(TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode())
-          .setMessage(
-              "The server is not ready for this operation, please check the 
server log for details");
-    } finally {
-      if (queryId != -1) {
-        Coordinator.getInstance().cleanupQueryExecution(queryId);
-      }
-    }
-  }
-
-  /**
-   * Check if the password for the give user has expired.
-   *
-   * @return the timestamp when the password will expire. Long.MAX if the 
password never expires.
-   *     Null if the password history cannot be found.
-   */
-  public static Long checkPasswordExpiration(
-      final long userId, final String password, final boolean 
useEncryptedPassword) {
-    if (userId == -1) {
-      return null;
-    }
-
-    // check password expiration
-    long passwordExpirationDays =
-        CommonDescriptor.getInstance().getConfig().getPasswordExpirationDays();
-    boolean mayBypassPasswordCheckInException =
-        
CommonDescriptor.getInstance().getConfig().isMayBypassPasswordCheckInException();
-
-    TSLastDataQueryReq lastDataQueryReq = new TSLastDataQueryReq();
-    lastDataQueryReq.setSessionId(0);
-    lastDataQueryReq.setPaths(
-        Collections.singletonList(
-            DNAuditLogger.PREFIX_PASSWORD_HISTORY + ".`_" + userId + 
"`.password"));
-
-    long queryId = -1;
-    try {
-      Statement statement = 
StatementGenerator.createStatement(lastDataQueryReq);
-      SessionInfo sessionInfo =
-          new SessionInfo(
-              0,
-              new UserEntity(
-                  AuthorityChecker.INTERNAL_AUDIT_USER_ID,
-                  AuthorityChecker.INTERNAL_AUDIT_USER,
-                  
IoTDBDescriptor.getInstance().getConfig().getInternalAddress()),
-              ZoneId.systemDefault());
-
-      queryId = SessionManager.getInstance().requestQueryId();
-      ExecutionResult result =
-          Coordinator.getInstance()
-              .executeForTreeModel(
-                  statement,
-                  queryId,
-                  sessionInfo,
-                  "",
-                  ClusterPartitionFetcher.getInstance(),
-                  ClusterSchemaFetcher.getInstance());
-      if (result.status.getCode() != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-        LOGGER.warn("Fail to check password expiration: {}", result.status);
-        throw new IoTDBRuntimeException(
-            "Cannot query password history because: "
-                + result
-                + ", please log in later or disable password expiration.",
-            result.status.getCode());
-      }
-
-      IQueryExecution queryExecution = 
Coordinator.getInstance().getQueryExecution(queryId);
-      Optional<TsBlock> batchResult = queryExecution.getBatchResult();
-      if (batchResult.isPresent()) {
-        TsBlock tsBlock = batchResult.get();
-        if (tsBlock.getPositionCount() <= 0) {
-          // no password history, may have upgraded from an older version
-          return null;
-        }
-        long lastPasswordTime =
-            
CommonDateTimeUtils.convertIoTDBTimeToMillis(tsBlock.getTimeByIndex(0));
-        // columns of last query: [timeseriesName, value, dataType]
-        String oldPassword = tsBlock.getColumn(1).getBinary(0).toString();
-        if (oldPassword.equals(
-            useEncryptedPassword ? password : 
AuthUtils.encryptPassword(password))) {
-          if (lastPasswordTime + passwordExpirationDays * 1000 * 86400 <= 
lastPasswordTime) {
-            // overflow or passwordExpirationDays <= 0
-            return Long.MAX_VALUE;
-          } else {
-            return lastPasswordTime + passwordExpirationDays * 1000 * 86400;
-          }
-        } else {
-          // 1. the password is incorrect, later logIn will fail
-          // 2. the password history does not record correctly, use the 
current time to create one
-          return null;
-        }
-      } else {
-        return null;
-      }
-    } catch (Throwable e) {
-      LOGGER.error("Fail to check password expiration", e);
-      if (mayBypassPasswordCheckInException) {
-        return Long.MAX_VALUE;
-      } else {
-        throw new IoTDBRuntimeException(
-            "Internal server error " + ", please log in later or disable 
password expiration.",
-            TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
-      }
-    } finally {
-      if (queryId != -1) {
-        Coordinator.getInstance().cleanupQueryExecution(queryId);
-      }
-    }
-  }
-}
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
index dcf5e36ea58..4703fa77f92 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
@@ -466,9 +466,6 @@ public class CommonConfig {
   private String userEncryptTokenHint = "not set yet";
 
   private boolean enforceStrongPassword = false;
-  private long passwordExpirationDays = -1;
-  // an old password cannot be reused within the given interval if >= 0.
-  private long passwordReuseIntervalDays = -1;
   private boolean mayBypassPasswordCheckInException = true;
 
   /** whether to enable the audit log * */
@@ -2754,30 +2751,6 @@ public class CommonConfig {
     this.enforceStrongPassword = enforceStrongPassword;
   }
 
-  public long getPasswordExpirationDays() {
-    return passwordExpirationDays;
-  }
-
-  public void setPasswordExpirationDays(long passwordExpirationDays) {
-    this.passwordExpirationDays = passwordExpirationDays;
-  }
-
-  public long getPasswordReuseIntervalDays() {
-    return passwordReuseIntervalDays;
-  }
-
-  public void setPasswordReuseIntervalDays(long passwordReuseIntervalDays) {
-    this.passwordReuseIntervalDays = passwordReuseIntervalDays;
-  }
-
-  public boolean isMayBypassPasswordCheckInException() {
-    return mayBypassPasswordCheckInException;
-  }
-
-  public void setMayBypassPasswordCheckInException(boolean 
mayBypassPasswordCheckInException) {
-    this.mayBypassPasswordCheckInException = mayBypassPasswordCheckInException;
-  }
-
   public boolean isEnableAuditLog() {
     return enableAuditLog;
   }

Reply via email to