Skip to content

Commit 5802fa2

Browse files
authored
Resolve the problem that everyone can alter table column data type. (#17089)
* Resolve the problem that everyone can alter table column data type. * Delete spare codes.
1 parent b40b74b commit 5802fa2

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

integration-test/src/test/java/org/apache/iotdb/db/it/auth/IoTDBSeriesPermissionIT.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ private void testWriteSchema() {
112112
"803: No permissions for this operation, please add privilege WRITE_SCHEMA",
113113
"test",
114114
"test123123456");
115+
assertNonQueryTestFail(
116+
"alter timeseries root.test.d1.s1 set data type float",
117+
"803: No permissions for this operation, please add privilege WRITE_SCHEMA on [root.test.d1.s1]",
118+
"test",
119+
"test123123456");
115120

116121
grantUserSeriesPrivilege("test", PrivilegeType.WRITE_SCHEMA, "root.test.**");
117122

@@ -126,6 +131,8 @@ private void testWriteSchema() {
126131
executeNonQuery(
127132
"create timeseries root.test.d1.s1 with dataType = int32", "test", "test123123456");
128133
executeNonQuery("ALTER timeseries root.test.d1.s1 ADD TAGS tag3=v3", "test", "test123123456");
134+
executeNonQuery(
135+
"alter timeseries root.test.d1.s1 set data type float", "test", "test123123456");
129136
executeNonQuery("drop timeseries root.test.d1.s1", "test", "test123123456");
130137
executeNonQuery("set TTL to root.test.** 10000", "test", "test123123456");
131138
executeNonQuery("unset TTL to root.test.**", "test", "test123123456");

integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBAuthenticationTableIT.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,4 +1103,40 @@ public void testTableAuth() throws Exception {
11031103
tmpDir.getAbsolutePath()));
11041104
}
11051105
}
1106+
1107+
@Test
1108+
public void testAlter() throws IoTDBConnectionException, StatementExecutionException {
1109+
try (ITableSession sessionRoot = EnvFactory.getEnv().getTableSessionConnection()) {
1110+
sessionRoot.executeNonQueryStatement("CREATE DATABASE test3");
1111+
sessionRoot.executeNonQueryStatement("USE test3");
1112+
sessionRoot.executeNonQueryStatement("CREATE TABLE t1 (c1 INT32)");
1113+
1114+
// test users
1115+
sessionRoot.executeNonQueryStatement("CREATE USER userA 'userA1234567'");
1116+
sessionRoot.executeNonQueryStatement("CREATE USER userB 'userB1234567'");
1117+
1118+
try (ITableSession sessionA =
1119+
EnvFactory.getEnv().getTableSessionConnection("userA", "userA1234567");
1120+
ITableSession sessionB =
1121+
EnvFactory.getEnv().getTableSessionConnection("userB", "userB1234567")) {
1122+
sessionRoot.executeNonQueryStatement(
1123+
"GRANT SELECT,INSERT,DELETE ON test3.t1 TO USER userA");
1124+
sessionRoot.executeNonQueryStatement(
1125+
"GRANT SELECT,ALTER,INSERT,DELETE ON test3.t1 TO USER userB");
1126+
sessionA.executeNonQueryStatement("USE test3");
1127+
sessionB.executeNonQueryStatement("USE test3");
1128+
1129+
try {
1130+
sessionA.executeNonQueryStatement("ALTER TABLE t1 ALTER COLUMN c1 SET DATA TYPE FLOAT");
1131+
fail("Should have thrown an exception");
1132+
} catch (StatementExecutionException e) {
1133+
assertEquals(
1134+
"803: Access Denied: No permissions for this operation, please add privilege ALTER ON test3.t1",
1135+
e.getMessage());
1136+
}
1137+
1138+
sessionB.executeNonQueryStatement("ALTER TABLE t1 ALTER COLUMN c1 SET DATA TYPE FLOAT");
1139+
}
1140+
}
1141+
}
11061142
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,10 @@ protected IConfigTask visitAlterColumnDataType(
636636
final DataType dataType = node.getDataType();
637637
final boolean ifTableExists = node.isIfTableExists();
638638
final boolean ifColumnExists = node.isIfColumnExists();
639+
accessControl.checkCanAlterTable(
640+
context.getSession().getUserName(),
641+
new QualifiedObjectName(databaseTablePair.getLeft(), databaseTablePair.getRight()),
642+
context);
639643
return new AlterColumnDataTypeTask(
640644
databaseTablePair.getLeft(),
641645
databaseTablePair.getRight(),

0 commit comments

Comments
 (0)