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

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 4177ad9ab08 branch-3.0:[fix](restapi) Unify Permission Requirements 
for Executing SHOW FRONT… (#52226)
4177ad9ab08 is described below

commit 4177ad9ab084265e6e0ad1833c720478745e6ebb
Author: zhangdong <[email protected]>
AuthorDate: Mon Jul 7 14:32:52 2025 +0800

    branch-3.0:[fix](restapi) Unify Permission Requirements for Executing SHOW 
FRONT… (#52226)
    
    …ENDS/BACKENDS And NODE RestAPI (#50140)
    
    pick: https://github.com/apache/doris/pull/50140
    
    ---------
    
    Co-authored-by: zhaorongsheng <[email protected]>
---
 .../apache/doris/analysis/ShowBackendsStmt.java    | 10 +++++----
 .../apache/doris/analysis/ShowFrontendsStmt.java   | 10 +++++----
 .../apache/doris/httpv2/rest/BackendsAction.java   |  9 ++++----
 .../doris/httpv2/rest/manager/NodeAction.java      | 15 +++++++-------
 .../java/org/apache/doris/qe/ShowExecutor.java     | 14 +++++++++++--
 .../tablefunction/BackendsTableValuedFunction.java | 12 +++++++++++
 .../FrontendsDisksTableValuedFunction.java         | 12 +++++++++++
 .../FrontendsTableValuedFunction.java              | 12 +++++++++++
 .../doris/analysis/ShowBackendsStmtTest.java       |  2 +-
 ...ndsStmtTest.java => ShowFrontendsStmtTest.java} | 24 +++-------------------
 .../suites/auth_call/test_show_backend_auth.groovy | 14 ++++++++++++-
 .../auth_call/test_show_frontend_auth.groovy       | 13 +++++++++++-
 12 files changed, 101 insertions(+), 46 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackendsStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackendsStmt.java
index 8e1e589477d..06652d2dada 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackendsStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowBackendsStmt.java
@@ -19,11 +19,13 @@ package org.apache.doris.analysis;
 
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
 import org.apache.doris.common.proc.BackendsProcDir;
+import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.ShowResultSetMetaData;
@@ -37,10 +39,10 @@ public class ShowBackendsStmt extends ShowStmt implements 
NotFallbackInParser {
     public void analyze(Analyzer analyzer) throws UserException {
         super.analyze(analyzer);
 
-        if 
(!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.ADMIN)
-                && 
!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(),
-                                                                          
PrivPredicate.OPERATOR)) {
-            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ADMIN/OPERATOR");
+        if 
(!Env.getCurrentEnv().getAccessManager().checkDbPriv(ConnectContext.get(),
+                InternalCatalog.INTERNAL_CATALOG_NAME, 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT)) {
+            
ErrorReport.reportAnalysisException(ErrorCode.ERR_DB_ACCESS_DENIED_ERROR,
+                    PrivPredicate.SELECT.getPrivs().toString(), 
InfoSchemaDb.DATABASE_NAME);
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowFrontendsStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowFrontendsStmt.java
index d8b5c454ff9..4e968843477 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowFrontendsStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowFrontendsStmt.java
@@ -19,11 +19,13 @@ package org.apache.doris.analysis;
 
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.proc.FrontendsProcNode;
+import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.ShowResultSetMetaData;
@@ -46,10 +48,10 @@ public class ShowFrontendsStmt extends ShowStmt implements 
NotFallbackInParser {
 
     @Override
     public void analyze(Analyzer analyzer) throws AnalysisException {
-        if 
(!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.ADMIN)
-                && 
!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(),
-                                                                          
PrivPredicate.OPERATOR)) {
-            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ADMIN/OPERATOR");
+        if 
(!Env.getCurrentEnv().getAccessManager().checkDbPriv(ConnectContext.get(),
+                InternalCatalog.INTERNAL_CATALOG_NAME, 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT)) {
+            
ErrorReport.reportAnalysisException(ErrorCode.ERR_DB_ACCESS_DENIED_ERROR,
+                    PrivPredicate.SELECT.getPrivs().toString(), 
InfoSchemaDb.DATABASE_NAME);
         }
 
         if (detail != null && !detail.equalsIgnoreCase("disks")) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/BackendsAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/BackendsAction.java
index cef898326b9..81e44421500 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/BackendsAction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/BackendsAction.java
@@ -18,7 +18,10 @@
 package org.apache.doris.httpv2.rest;
 
 import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.httpv2.entity.ResponseEntityBuilder;
+import org.apache.doris.mysql.privilege.PrivPredicate;
+import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.system.Backend;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -66,12 +69,8 @@ public class BackendsAction extends RestBaseController {
 
     @RequestMapping(path = "/api/backends", method = {RequestMethod.GET})
     public Object getBackends(HttpServletRequest request, HttpServletResponse 
response) {
-        /**
-         * As required, the interface should require user have 
GlobalAuth-PrivPredicate.ADMIN permission.
-         * However, a user who uses 
spark-doris-connector/flink-doris-connector does not have corresponding 
permission.
-         * To ensure that the connector works properly, we do not verify the 
permission of the interface.
-         */
         executeCheckPassword(request, response);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         boolean needAlive = false;
         String isAlive = request.getParameter(IS_ALIVE);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java
index 4658f936db5..36620c36e92 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/manager/NodeAction.java
@@ -18,6 +18,7 @@
 package org.apache.doris.httpv2.rest.manager;
 
 import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.ConfigBase;
 import org.apache.doris.common.MarkedCountDownLatch;
@@ -108,7 +109,7 @@ public class NodeAction extends RestBaseController {
     @RequestMapping(path = "/frontends", method = RequestMethod.GET)
     public Object frontends_info(HttpServletRequest request, 
HttpServletResponse response) throws Exception {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         return fetchNodeInfo(request, response, "/frontends");
     }
@@ -117,7 +118,7 @@ public class NodeAction extends RestBaseController {
     @RequestMapping(path = "/backends", method = RequestMethod.GET)
     public Object backends_info(HttpServletRequest request, 
HttpServletResponse response) throws Exception {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         return fetchNodeInfo(request, response, "/backends");
     }
@@ -126,7 +127,7 @@ public class NodeAction extends RestBaseController {
     @RequestMapping(path = "/brokers", method = RequestMethod.GET)
     public Object brokers_info(HttpServletRequest request, HttpServletResponse 
response) throws Exception {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         return fetchNodeInfo(request, response, "/brokers");
     }
@@ -181,7 +182,7 @@ public class NodeAction extends RestBaseController {
     @RequestMapping(path = "/configuration_name", method = RequestMethod.GET)
     public Object configurationName(HttpServletRequest request, 
HttpServletResponse response) {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         Map<String, List<String>> result = Maps.newHashMap();
         try {
@@ -220,7 +221,7 @@ public class NodeAction extends RestBaseController {
     @RequestMapping(path = "/node_list", method = RequestMethod.GET)
     public Object nodeList(HttpServletRequest request, HttpServletResponse 
response) {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         Map<String, List<String>> result = Maps.newHashMap();
         result.put("frontend", getFeList());
@@ -247,7 +248,7 @@ public class NodeAction extends RestBaseController {
     @RequestMapping(path = "/config", method = RequestMethod.GET)
     public Object config(HttpServletRequest request, HttpServletResponse 
response) {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkDbAuth(ConnectContext.get().getCurrentUserIdentity(), 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT);
 
         List<List<String>> configs = ConfigBase.getConfigInfo(null);
         // Sort all configs by config key.
@@ -308,7 +309,7 @@ public class NodeAction extends RestBaseController {
             @RequestParam(value = "type") String type,
             @RequestBody(required = false) ConfigInfoRequestBody requestBody) {
         executeCheckPassword(request, response);
-        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN);
+        checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), 
PrivPredicate.ADMIN_OR_NODE);
 
         initHttpExecutor();
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 179ad443ec2..c2330cb84d7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -2263,8 +2263,13 @@ public class ShowExecutor {
         resultSet = new ShowResultSet(showExportStmt.getMetaData(), infos);
     }
 
-    private void handleShowBackends() {
+    private void handleShowBackends() throws AnalysisException {
         final ShowBackendsStmt showStmt = (ShowBackendsStmt) stmt;
+        try {
+            showStmt.analyze(null);
+        } catch (Exception e) {
+            throw (AnalysisException) e;
+        }
         List<List<String>> backendInfos = BackendsProcDir.getBackendInfos();
 
         backendInfos.sort(new Comparator<List<String>>() {
@@ -2277,8 +2282,13 @@ public class ShowExecutor {
         resultSet = new ShowResultSet(showStmt.getMetaData(), backendInfos);
     }
 
-    private void handleShowFrontends() {
+    private void handleShowFrontends() throws AnalysisException {
         final ShowFrontendsStmt showStmt = (ShowFrontendsStmt) stmt;
+        try {
+            showStmt.analyze(null);
+        } catch (Exception e) {
+            throw (AnalysisException) e;
+        }
 
         List<List<String>> infos = Lists.newArrayList();
         FrontendsProcNode.getFrontendsInfo(Env.getCurrentEnv(), 
showStmt.getDetailType(), infos);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/BackendsTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/BackendsTableValuedFunction.java
index 04ea7d01eae..a40ec67c0dc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/BackendsTableValuedFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/BackendsTableValuedFunction.java
@@ -18,9 +18,15 @@
 package org.apache.doris.tablefunction;
 
 import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.datasource.InternalCatalog;
+import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.thrift.TBackendsMetadataParams;
 import org.apache.doris.thrift.TMetaScanRange;
 import org.apache.doris.thrift.TMetadataType;
@@ -83,6 +89,12 @@ public class BackendsTableValuedFunction extends 
MetadataTableValuedFunction {
         if (params.size() != 0) {
             throw new AnalysisException("backends table-valued-function does 
not support any params");
         }
+        if 
(!Env.getCurrentEnv().getAccessManager().checkDbPriv(ConnectContext.get(),
+                InternalCatalog.INTERNAL_CATALOG_NAME, 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT)) {
+            String message = 
ErrorCode.ERR_DB_ACCESS_DENIED_ERROR.formatErrorMsg(
+                    PrivPredicate.SELECT.getPrivs().toString(), 
InfoSchemaDb.DATABASE_NAME);
+            throw new AnalysisException(message);
+        }
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsDisksTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsDisksTableValuedFunction.java
index cc7ff82b8fb..66ac253e88d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsDisksTableValuedFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsDisksTableValuedFunction.java
@@ -18,8 +18,14 @@
 package org.apache.doris.tablefunction;
 
 import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.datasource.InternalCatalog;
+import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.thrift.TFrontendsMetadataParams;
 import org.apache.doris.thrift.TMetaScanRange;
 import org.apache.doris.thrift.TMetadataType;
@@ -67,6 +73,12 @@ public class FrontendsDisksTableValuedFunction extends 
MetadataTableValuedFuncti
         if (params.size() != 0) {
             throw new AnalysisException("frontends_disks table-valued-function 
does not support any params");
         }
+        if 
(!Env.getCurrentEnv().getAccessManager().checkDbPriv(ConnectContext.get(),
+                InternalCatalog.INTERNAL_CATALOG_NAME, 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT)) {
+            String message = 
ErrorCode.ERR_DB_ACCESS_DENIED_ERROR.formatErrorMsg(
+                    PrivPredicate.SELECT.getPrivs().toString(), 
InfoSchemaDb.DATABASE_NAME);
+            throw new AnalysisException(message);
+        }
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsTableValuedFunction.java
index aded1076a83..06d323bc66c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsTableValuedFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/FrontendsTableValuedFunction.java
@@ -18,8 +18,14 @@
 package org.apache.doris.tablefunction;
 
 import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.InfoSchemaDb;
 import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.datasource.InternalCatalog;
+import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.thrift.TFrontendsMetadataParams;
 import org.apache.doris.thrift.TMetaScanRange;
 import org.apache.doris.thrift.TMetadataType;
@@ -76,6 +82,12 @@ public class FrontendsTableValuedFunction extends 
MetadataTableValuedFunction {
         if (params.size() != 0) {
             throw new AnalysisException("frontends table-valued-function does 
not support any params");
         }
+        if 
(!Env.getCurrentEnv().getAccessManager().checkDbPriv(ConnectContext.get(),
+                InternalCatalog.INTERNAL_CATALOG_NAME, 
InfoSchemaDb.DATABASE_NAME, PrivPredicate.SELECT)) {
+            String message = 
ErrorCode.ERR_DB_ACCESS_DENIED_ERROR.formatErrorMsg(
+                    PrivPredicate.SELECT.getPrivs().toString(), 
InfoSchemaDb.DATABASE_NAME);
+            throw new AnalysisException(message);
+        }
     }
 
     @Override
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java
index aeb19ef73ef..c46c6428b96 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java
@@ -55,7 +55,7 @@ public class ShowBackendsStmtTest {
         AtomicBoolean privilege = new AtomicBoolean(false);
         new MockUp<AccessControllerManager>() {
             @Mock
-            public boolean checkGlobalPriv(ConnectContext ctx, PrivPredicate 
wanted) {
+            public boolean checkDbPriv(UserIdentity currentUser, String ctl, 
String db, PrivPredicate wanted) {
                 return privilege.get();
             }
         };
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowFrontendsStmtTest.java
similarity index 68%
copy from 
fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java
copy to 
fe/fe-core/src/test/java/org/apache/doris/analysis/ShowFrontendsStmtTest.java
index aeb19ef73ef..ebbe555d8cb 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackendsStmtTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowFrontendsStmtTest.java
@@ -17,13 +17,11 @@
 
 package org.apache.doris.analysis;
 
-import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.mysql.privilege.AccessControllerManager;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.SessionVariable;
-import org.apache.doris.qe.ShowResultSetMetaData;
 
 import mockit.Mock;
 import mockit.MockUp;
@@ -34,7 +32,7 @@ import org.junit.jupiter.api.Assertions;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
-public class ShowBackendsStmtTest {
+public class ShowFrontendsStmtTest {
     private Analyzer analyzer;
     private ConnectContext ctx = new ConnectContext();
 
@@ -55,32 +53,16 @@ public class ShowBackendsStmtTest {
         AtomicBoolean privilege = new AtomicBoolean(false);
         new MockUp<AccessControllerManager>() {
             @Mock
-            public boolean checkGlobalPriv(ConnectContext ctx, PrivPredicate 
wanted) {
+            public boolean checkDbPriv(UserIdentity currentUser, String ctl, 
String db, PrivPredicate wanted) {
                 return privilege.get();
             }
         };
 
-        ShowBackendsStmt stmt = new ShowBackendsStmt();
+        ShowFrontendsStmt stmt = new ShowFrontendsStmt();
         Assertions.assertThrows(AnalysisException.class, () -> 
stmt.analyze(analyzer));
 
         privilege.set(true);
         stmt.analyze(analyzer);
     }
 
-    @Test
-    public void getMetaData() {
-        ShowBackendsStmt stmt = new ShowBackendsStmt();
-        ShowResultSetMetaData result = stmt.getMetaData();
-        Assertions.assertEquals(result.getColumnCount(), 27);
-        result.getColumns().forEach(col -> 
Assertions.assertEquals(col.getType(), ScalarType.createVarchar(30)));
-    }
-
-    @Test
-    public void getRedirectStatus() {
-        ShowBackendsStmt stmt = new ShowBackendsStmt();
-        Assertions.assertEquals(RedirectStatus.FORWARD_NO_SYNC, 
stmt.getRedirectStatus());
-
-        ctx.getSessionVariable().forwardToMaster = false;
-        Assertions.assertEquals(RedirectStatus.NO_FORWARD, 
stmt.getRedirectStatus());
-    }
 }
diff --git a/regression-test/suites/auth_call/test_show_backend_auth.groovy 
b/regression-test/suites/auth_call/test_show_backend_auth.groovy
index 13e1fa4fbe4..627e28c57d1 100644
--- a/regression-test/suites/auth_call/test_show_backend_auth.groovy
+++ b/regression-test/suites/auth_call/test_show_backend_auth.groovy
@@ -32,14 +32,26 @@ suite("test_show_backend_auth","p0,auth_call") {
     try_sql("DROP USER ${user}")
     sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
     sql """grant select_priv on regression_test to ${user}"""
+    sql """grant select_priv on internal.information_schema.* to ${user}"""
+    def show_grants_result = sql """show grants for ${user}"""
+    logger.info("show grants result: " + show_grants_result)
+    sql """revoke select_priv on internal.information_schema.* from ${user}"""
 
     connect(user, "${pwd}", context.config.jdbcUrl) {
+        
+        try {
+            def show_result = sql """SHOW BACKENDS"""
+            logger.info("show_result: " + show_result)
+        } catch (Exception e) {
+            logger.info("show_result: " + e)
+            e.printStackTrace()
+        }
         test {
             sql """SHOW BACKENDS"""
             exception "denied"
         }
     }
-    sql """grant node_priv on *.*.* to ${user}"""
+    sql """grant select_priv on internal.information_schema.* to ${user}"""
     connect(user, "${pwd}", context.config.jdbcUrl) {
         def res = sql """SHOW BACKENDS"""
         assertTrue(res.size() > 0)
diff --git a/regression-test/suites/auth_call/test_show_frontend_auth.groovy 
b/regression-test/suites/auth_call/test_show_frontend_auth.groovy
index 87f8e9c7c09..12069803970 100644
--- a/regression-test/suites/auth_call/test_show_frontend_auth.groovy
+++ b/regression-test/suites/auth_call/test_show_frontend_auth.groovy
@@ -32,8 +32,19 @@ suite("test_show_frontend_auth","p0,auth_call") {
     try_sql("DROP USER ${user}")
     sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
     sql """grant select_priv on regression_test to ${user}"""
+    sql """grant select_priv on internal.information_schema.* to ${user}"""
+    def show_grants_result = sql """show grants for ${user}"""
+    logger.info("show grants result: " + show_grants_result)
+    sql """revoke select_priv on internal.information_schema.* from ${user}"""
 
     connect(user, "${pwd}", context.config.jdbcUrl) {
+        try {
+            def show_result = sql """SHOW frontends"""
+            logger.info("show_result: " + show_result)
+        } catch (Exception e) {
+            logger.info("show_result: " + e)
+            e.printStackTrace()
+        }
         test {
             sql """SHOW frontends"""
             exception "denied"
@@ -43,7 +54,7 @@ suite("test_show_frontend_auth","p0,auth_call") {
             exception "denied"
         }
     }
-    sql """grant node_priv on *.*.* to ${user}"""
+    sql """grant select_priv on internal.information_schema.* to ${user}"""
     connect(user, "${pwd}", context.config.jdbcUrl) {
         def res = sql """SHOW frontends"""
         assertTrue(res.size() > 0)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to