Skip to content

Commit 3cc6ee1

Browse files
wenyanshi-123shiwenyan
authored andcommitted
Append user index field for User (#16432)
(cherry picked from commit 4ebfe9e)
1 parent 7487f4c commit 3cc6ee1

File tree

37 files changed

+585
-118
lines changed

37 files changed

+585
-118
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,7 @@ public void listUser(CloseableHttpClient httpClient) {
13991399
List<Object> columnNames =
14001400
new ArrayList<Object>() {
14011401
{
1402+
add(ColumnHeaderConstant.USER_ID);
14021403
add(ColumnHeaderConstant.USER);
14031404
}
14041405
};
@@ -1409,7 +1410,7 @@ public void listUser(CloseableHttpClient httpClient) {
14091410
}
14101411
};
14111412
Assert.assertEquals(columnNames, columnNamesResult);
1412-
Assert.assertEquals(values1, valuesResult.get(0));
1413+
Assert.assertEquals(values1, valuesResult.get(1));
14131414
}
14141415

14151416
public void selectCount(CloseableHttpClient httpClient) {
@@ -2062,6 +2063,7 @@ public void listUserV2(CloseableHttpClient httpClient) {
20622063
List<Object> columnNames =
20632064
new ArrayList<Object>() {
20642065
{
2066+
add(ColumnHeaderConstant.USER_ID);
20652067
add(ColumnHeaderConstant.USER);
20662068
}
20672069
};
@@ -2072,7 +2074,7 @@ public void listUserV2(CloseableHttpClient httpClient) {
20722074
}
20732075
};
20742076
Assert.assertEquals(columnNames, columnNamesResult);
2075-
Assert.assertEquals(values1, valuesResult.get(0));
2077+
Assert.assertEquals(values1, valuesResult.get(1));
20762078
}
20772079

20782080
public void selectCountV2(CloseableHttpClient httpClient) {

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

Lines changed: 64 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,17 @@ public void allPrivilegesTest() throws SQLException {
9494
Assert.assertThrows(
9595
SQLException.class,
9696
() -> userStmt.execute("GRANT WRITE_SCHEMA ON root.a TO USER tempuser"));
97+
Assert.assertThrows(
98+
SQLException.class, () -> userStmt.execute("LIST PRIVILEGES OF USER root"));
99+
100+
ResultSet resultSet = userStmt.executeQuery("LIST USER");
101+
Assert.assertTrue(resultSet.next());
102+
Assert.assertEquals("10000", resultSet.getString(1));
103+
Assert.assertEquals("tempuser", resultSet.getString(2));
104+
Assert.assertFalse(resultSet.next());
105+
106+
resultSet = userStmt.executeQuery("LIST PRIVILEGES OF USER tempuser");
107+
Assert.assertFalse(resultSet.next());
97108

98109
// 2. admin grant all privileges to user tempuser, So tempuser can do anything.
99110
adminStmt.execute("GRANT ALL ON root.** TO USER tempuser");
@@ -479,7 +490,7 @@ public void testListUser() throws SQLException {
479490

480491
try {
481492
ResultSet resultSet = adminStmt.executeQuery("LIST USER");
482-
String ans = "root,\n";
493+
String ans = "0,root,\n";
483494
try {
484495
validateResultSet(resultSet, ans);
485496

@@ -488,17 +499,17 @@ public void testListUser() throws SQLException {
488499
}
489500
resultSet = adminStmt.executeQuery("LIST USER");
490501
ans =
491-
"root,\n"
492-
+ "user0,\n"
493-
+ "user1,\n"
494-
+ "user2,\n"
495-
+ "user3,\n"
496-
+ "user4,\n"
497-
+ "user5,\n"
498-
+ "user6,\n"
499-
+ "user7,\n"
500-
+ "user8,\n"
501-
+ "user9,\n";
502+
"0,root,\n"
503+
+ "10000,user0,\n"
504+
+ "10001,user1,\n"
505+
+ "10002,user2,\n"
506+
+ "10003,user3,\n"
507+
+ "10004,user4,\n"
508+
+ "10005,user5,\n"
509+
+ "10006,user6,\n"
510+
+ "10007,user7,\n"
511+
+ "10008,user8,\n"
512+
+ "10009,user9,\n";
502513
validateResultSet(resultSet, ans);
503514

504515
for (int i = 0; i < 10; i++) {
@@ -507,7 +518,13 @@ public void testListUser() throws SQLException {
507518
}
508519
}
509520
resultSet = adminStmt.executeQuery("LIST USER");
510-
ans = "root,\n" + "user1,\n" + "user3,\n" + "user5,\n" + "user7,\n" + "user9,\n";
521+
ans =
522+
"0,root,\n"
523+
+ "10001,user1,\n"
524+
+ "10003,user3,\n"
525+
+ "10005,user5,\n"
526+
+ "10007,user7,\n"
527+
+ "10009,user9,\n";
511528
validateResultSet(resultSet, ans);
512529
} finally {
513530
resultSet.close();
@@ -591,7 +608,7 @@ public void testListUserRole() throws SQLException {
591608
ans = "role1,\nrole2,\n";
592609
validateResultSet(resultSet, ans);
593610
resultSet = userStmt.executeQuery("LIST USER OF ROLE role1");
594-
ans = "user1,\nuser2,\n";
611+
ans = "10000,user1,\n10001,user2,\n";
595612
validateResultSet(resultSet, ans);
596613
} finally {
597614
userStmt.close();
@@ -782,25 +799,25 @@ public void testListRoleUsers() throws SQLException {
782799

783800
ResultSet resultSet = adminStmt.executeQuery("LIST USER OF ROLE dalao");
784801
String ans =
785-
"DailySecurity,\n"
786-
+ "DoubleLight,\n"
787-
+ "East,\n"
788-
+ "Eastwards,\n"
789-
+ "GoldLuck,\n"
790-
+ "GoodWoods,\n"
791-
+ "HealthHonor,\n"
792-
+ "HighFly,\n"
793-
+ "Moon,\n"
794-
+ "Persistence,\n"
795-
+ "RayBud,\n"
796-
+ "ScentEffusion,\n"
797-
+ "Smart,\n"
798-
+ "SunComparison,\n";
802+
"10011,DailySecurity,\n"
803+
+ "10006,DoubleLight,\n"
804+
+ "10010,East,\n"
805+
+ "10007,Eastwards,\n"
806+
+ "10005,GoldLuck,\n"
807+
+ "10003,GoodWoods,\n"
808+
+ "10004,HealthHonor,\n"
809+
+ "10000,HighFly,\n"
810+
+ "10012,Moon,\n"
811+
+ "10002,Persistence,\n"
812+
+ "10013,RayBud,\n"
813+
+ "10008,ScentEffusion,\n"
814+
+ "10009,Smart,\n"
815+
+ "10001,SunComparison,\n";
799816
try {
800817
validateResultSet(resultSet, ans);
801818

802819
resultSet = adminStmt.executeQuery("LIST USER OF ROLE zhazha");
803-
ans = "RiverSky,\n";
820+
ans = "10014,RiverSky,\n";
804821
validateResultSet(resultSet, ans);
805822

806823
adminStmt.execute("REVOKE ROLE zhazha from RiverSky");
@@ -855,23 +872,25 @@ public void testListUserPrivilege() throws SQLException {
855872
try (Connection userCon = EnvFactory.getEnv().getConnection("tempuser", "temppw123456");
856873
Statement userStmt = userCon.createStatement()) {
857874
try {
858-
Assert.assertThrows(SQLException.class, () -> userStmt.execute("LIST USER"));
859-
// with list user privilege
860-
adminStmt.execute("GRANT MANAGE_USER on root.** TO USER tempuser");
875+
String ans = "10010,tempuser,\n";
861876
ResultSet resultSet = userStmt.executeQuery("LIST USER");
862-
String ans =
863-
"root,\n"
864-
+ "tempuser,\n"
865-
+ "user0,\n"
866-
+ "user1,\n"
867-
+ "user2,\n"
868-
+ "user3,\n"
869-
+ "user4,\n"
870-
+ "user5,\n"
871-
+ "user6,\n"
872-
+ "user7,\n"
873-
+ "user8,\n"
874-
+ "user9,\n";
877+
validateResultSet(resultSet, ans);
878+
// with list user privilege
879+
adminStmt.execute("GRANT SECURITY on root.** TO USER tempuser");
880+
resultSet = userStmt.executeQuery("LIST USER");
881+
ans =
882+
"0,root,\n"
883+
+ "10010,tempuser,\n"
884+
+ "10000,user0,\n"
885+
+ "10001,user1,\n"
886+
+ "10002,user2,\n"
887+
+ "10003,user3,\n"
888+
+ "10004,user4,\n"
889+
+ "10005,user5,\n"
890+
+ "10006,user6,\n"
891+
+ "10007,user7,\n"
892+
+ "10008,user8,\n"
893+
+ "10009,user9,\n";
875894
validateResultSet(resultSet, ans);
876895
} finally {
877896
userStmt.close();

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ public void listUserPrivileges() throws SQLException {
6666
Statement adminStmt = adminCon.createStatement()) {
6767

6868
adminStmt.execute("create user testuser 'password123456'");
69+
try (Connection userCon =
70+
EnvFactory.getEnv()
71+
.getConnection("testuser", "password123456", BaseEnv.TABLE_SQL_DIALECT);
72+
Statement userStmt = userCon.createStatement()) {
73+
ResultSet resultSet = userStmt.executeQuery("LIST USER");
74+
Assert.assertTrue(resultSet.next());
75+
Assert.assertEquals("10000", resultSet.getString(1));
76+
Assert.assertEquals("testuser", resultSet.getString(2));
77+
Assert.assertFalse(resultSet.next());
78+
}
6979
adminStmt.execute("create database testdb");
7080
adminStmt.execute("GRANT MANAGE_USER to user testuser");
7181
Assert.assertThrows(
@@ -119,7 +129,7 @@ public void listUserPrivileges() throws SQLException {
119129
adminStmt.execute("create role testrole");
120130
adminStmt.execute("GRANT ROLE testrole to testuser");
121131
rs = adminStmt.executeQuery("LIST USER OF ROLE testrole");
122-
TestUtils.assertResultSetEqual(rs, "User,", Collections.singleton("testuser,"));
132+
TestUtils.assertResultSetEqual(rs, "UserId,User,", Collections.singleton("10000,testuser,"));
123133
rs = adminStmt.executeQuery("LIST ROLE OF USER testuser");
124134
TestUtils.assertResultSetEqual(rs, "Role,", Collections.singleton("testrole,"));
125135
}
@@ -600,11 +610,11 @@ public void testCreateUserAndRole() throws SQLException {
600610

601611
ResultSet resultSet = adminStmt.executeQuery("List user");
602612
Set<String> resultSetList = new HashSet<>();
603-
resultSetList.add("root,");
604-
resultSetList.add("testuser,");
605-
resultSetList.add("!@#$%^*()_+-=1,");
606-
resultSetList.add("!@#$%^*()_+-=2,");
607-
TestUtils.assertResultSetEqual(resultSet, "User,", resultSetList);
613+
resultSetList.add("0,root,");
614+
resultSetList.add("10000,testuser,");
615+
resultSetList.add("10001,!@#$%^*()_+-=1,");
616+
resultSetList.add("10002,!@#$%^*()_+-=2,");
617+
TestUtils.assertResultSetEqual(resultSet, "UserId,User,", resultSetList);
608618
resultSet = adminStmt.executeQuery("List role");
609619
TestUtils.assertResultSetEqual(resultSet, "Role,", Collections.singleton("!@#$%^*()_+-=3,"));
610620
adminStmt.execute("GRANT role \"!@#$%^*()_+-=3\" to \"!@#$%^*()_+-=1\"");

integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipeMetaHistoricalIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,8 @@ public void testAuthInclusion() throws Exception {
236236
TestUtils.assertDataEventuallyOnEnv(
237237
receiverEnv,
238238
"list user of role `admin`",
239-
ColumnHeaderConstant.USER + ",",
240-
Collections.singleton("thulab,"));
239+
ColumnHeaderConstant.USER_ID + "," + ColumnHeaderConstant.USER + ",",
240+
Collections.singleton("10000,thulab,"));
241241
TestUtils.assertDataEventuallyOnEnv(
242242
receiverEnv,
243243
"list privileges of role `admin`",

integration-test/src/test/java/org/apache/iotdb/pipe/it/dual/treemodel/manual/IoTDBPipePermissionIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ private void testWithConnector(final String connector) throws Exception {
152152
TestUtils.assertDataEventuallyOnEnv(
153153
receiverEnv,
154154
"list user",
155-
"User,",
156-
new HashSet<>(Arrays.asList("root,", "user,", "thulab,")));
155+
"UserId,User,",
156+
new HashSet<>(Arrays.asList("0,root,", "10001,user,", "10000,thulab,")));
157157
final Set<String> expectedResSet = new HashSet<>();
158158
expectedResSet.add(
159159
"root.ln.wf02.wt01.temperature,null,root.ln,INT64,PLAIN,LZ4,null,null,null,null,BASE,");

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/response/auth/PermissionInfoResp.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.apache.iotdb.confignode.consensus.response.auth;
2121

2222
import org.apache.iotdb.common.rpc.thrift.TSStatus;
23+
import org.apache.iotdb.confignode.rpc.thrift.TListUserInfo;
2324
import org.apache.iotdb.confignode.rpc.thrift.TPermissionInfoResp;
2425
import org.apache.iotdb.consensus.common.DataSet;
2526

@@ -32,6 +33,8 @@ public class PermissionInfoResp implements DataSet {
3233
private String tag;
3334
private List<String> memberList;
3435

36+
private List<TListUserInfo> usersInfo;
37+
3538
private TPermissionInfoResp permissionInfoResp;
3639

3740
public PermissionInfoResp() {}
@@ -62,6 +65,14 @@ public List<String> getMemberList() {
6265
return memberList;
6366
}
6467

68+
public void setUsersInfo(List<TListUserInfo> usersInfo) {
69+
this.usersInfo = usersInfo;
70+
}
71+
72+
public List<TListUserInfo> getUsersInfo() {
73+
return usersInfo;
74+
}
75+
6576
public TPermissionInfoResp getPermissionInfoResp() {
6677
return permissionInfoResp;
6778
}

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/PermissionManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,8 @@ public TPermissionInfoResp checkRoleOfUser(String username, String rolename)
141141
public TPermissionInfoResp getUser(String username) throws AuthException {
142142
return authorInfo.getUser(username);
143143
}
144+
145+
public String getUserName(long userId) throws AuthException {
146+
return authorInfo.getUserName(userId);
147+
}
144148
}

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/event/PipeConfigRegionSnapshotEvent.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public class PipeConfigRegionSnapshotEvent extends PipeSnapshotEvent
6060
SNAPSHOT_FILE_TYPE_2_CONFIG_PHYSICAL_PLAN_TYPE_MAP = new EnumMap<>(CNSnapshotFileType.class);
6161
private CNSnapshotFileType fileType;
6262

63+
private String authUserName = "";
64+
6365
static {
6466
SNAPSHOT_FILE_TYPE_2_CONFIG_PHYSICAL_PLAN_TYPE_MAP.put(
6567
CNSnapshotFileType.ROLE,
@@ -136,6 +138,14 @@ public PipeConfigRegionSnapshotEvent(
136138
this.fileType = type;
137139
}
138140

141+
public String getAuthUserName() {
142+
return authUserName;
143+
}
144+
145+
public void setAuthUserName(String authUserName) {
146+
this.authUserName = authUserName;
147+
}
148+
139149
public File getSnapshotFile() {
140150
return new File(snapshotPath);
141151
}
@@ -195,17 +205,20 @@ public EnrichedEvent shallowCopySelfAndBindPipeTaskMetaForProgressReport(
195205
final boolean skipIfNoPrivileges,
196206
final long startTime,
197207
final long endTime) {
198-
return new PipeConfigRegionSnapshotEvent(
199-
snapshotPath,
200-
templateFilePath,
201-
fileType,
202-
pipeName,
203-
creationTime,
204-
pipeTaskMeta,
205-
treePattern,
206-
tablePattern,
207-
userName,
208-
skipIfNoPrivileges);
208+
PipeConfigRegionSnapshotEvent pipeConfigRegionSnapshotEvent =
209+
new PipeConfigRegionSnapshotEvent(
210+
snapshotPath,
211+
templateFilePath,
212+
fileType,
213+
pipeName,
214+
creationTime,
215+
pipeTaskMeta,
216+
treePattern,
217+
tablePattern,
218+
userName,
219+
skipIfNoPrivileges);
220+
pipeConfigRegionSnapshotEvent.setAuthUserName(authUserName);
221+
return pipeConfigRegionSnapshotEvent;
209222
}
210223

211224
@Override

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,8 @@ protected TSStatus loadFileV2(
10331033
Paths.get(fileAbsolutePaths.get(0)),
10341034
fileAbsolutePaths.size() > 1 ? Paths.get(fileAbsolutePaths.get(1)) : null,
10351035
CNSnapshotFileType.deserialize(
1036-
Byte.parseByte(parameters.get(PipeTransferConfigSnapshotSealReq.FILE_TYPE))));
1036+
Byte.parseByte(parameters.get(PipeTransferConfigSnapshotSealReq.FILE_TYPE))),
1037+
parameters.getOrDefault("authUserName", ""));
10371038
if (Objects.isNull(generator)) {
10381039
throw new IOException(
10391040
String.format("The config region snapshots %s cannot be parsed.", fileAbsolutePaths));

0 commit comments

Comments
 (0)