diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java index b686add882f76e..5daf756db96508 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommand.java @@ -81,16 +81,17 @@ public ShowResultSet doRun(ConnectContext ctx, StmtExecutor executor) throws Exc userIdent = ConnectContext.get().getCurrentUserIdentity(); } } + boolean isSelf = userIdent != null && ConnectContext.get().getCurrentUserIdentity().equals(userIdent); Preconditions.checkState(isAll || userIdent != null); - UserIdentity self = ConnectContext.get().getCurrentUserIdentity(); - // if show all grants, or show other user's grants, need global GRANT priv. - if (isAll || !self.equals(userIdent)) { + if (isAll || !isSelf) { if (!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), PrivPredicate.GRANT)) { ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, "GRANT"); } } - if (userIdent != null && !Env.getCurrentEnv().getAccessManager().getAuth().doesUserExist(userIdent)) { + // ldap user not exist in userManager, so should not check + if (userIdent != null && !isSelf && !Env.getCurrentEnv().getAccessManager().getAuth() + .doesUserExist(userIdent)) { throw new AnalysisException(String.format("User: %s does not exist", userIdent)); } List> infos = Env.getCurrentEnv().getAuth().getAuthInfo(userIdent); diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommandTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommandTest.java index 5699069b161d9b..ffcbcdb42863b1 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommandTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/ShowGrantsCommandTest.java @@ -86,4 +86,21 @@ void testDorun() throws Exception { int size = results.size(); Assertions.assertEquals("'zzz'@'%'", results.get(size - 1).get(0)); } + + @Test + void testNonExistUser() { + ConnectContext ctx = ConnectContext.get(); + UserIdentity nonExistUser = UserIdentity.createAnalyzedUserIdentWithIp("non_exist_user", "%"); + Assertions.assertThrows(AnalysisException.class, () -> { + ShowGrantsCommand sg = new ShowGrantsCommand(nonExistUser, false); + sg.doRun(ctx, null); + }); + + ctx.setIsTempUser(true); + ctx.setCurrentUserIdentity(nonExistUser); + Assertions.assertDoesNotThrow(() -> { + ShowGrantsCommand sg = new ShowGrantsCommand(null, false); + sg.doRun(ctx, null); + }); + } }