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

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 84025ad8942d5ea60df4a040124d6becc1d71700
Author: Ashin Gau <ashin...@users.noreply.github.com>
AuthorDate: Wed Dec 21 08:58:06 2022 +0800

    [fix](multi-catalog) can't show databases when creating a new user in 
external catalog (#15204)
    
    Fix bug: A new user with grants to access external catalog can't show 
databases.
---
 .../main/java/org/apache/doris/analysis/ShowDbStmt.java  |  3 ++-
 .../src/main/java/org/apache/doris/qe/ShowExecutor.java  |  3 ++-
 .../test/java/org/apache/doris/qe/ShowExecutorTest.java  | 16 ++++++++++++++++
 .../data/external_catalog_p0/hive/test_hive_other.out    |  5 +++++
 .../external_catalog_p0/hive/test_hive_other.groovy      | 11 +++++++++++
 5 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDbStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDbStmt.java
index e29605a640..f38199042e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDbStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDbStmt.java
@@ -68,6 +68,7 @@ public class ShowDbStmt extends ShowStmt {
     @Override
     public void analyze(Analyzer analyzer) throws AnalysisException, 
UserException {
         super.analyze(analyzer);
+        this.catalogName = this.catalogName == null ? 
analyzer.getDefaultCatalog() : this.catalogName;
     }
 
     @Override
@@ -102,7 +103,7 @@ public class ShowDbStmt extends ShowStmt {
         if (pattern != null) {
             sb.append(" LIKE '").append(pattern).append("'");
         }
-        if (catalogName != null) {
+        if (!InternalCatalog.INTERNAL_CATALOG_NAME.equals(catalogName)) {
             sb.append(" FROM ").append(catalogName);
         }
         return sb.toString();
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 34360271ba..3969603186 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
@@ -707,7 +707,8 @@ public class ShowExecutor {
                 continue;
             }
 
-            if 
(!Env.getCurrentEnv().getAuth().checkDbPriv(ConnectContext.get(), fullName, 
PrivPredicate.SHOW)) {
+            if 
(!Env.getCurrentEnv().getAuth().checkDbPriv(ConnectContext.get(), 
showDbStmt.getCatalogName(),
+                    fullName, PrivPredicate.SHOW)) {
                 continue;
             }
 
diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
index 2368b1b3d2..1b4a3afd5a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
@@ -34,6 +34,7 @@ import org.apache.doris.analysis.ShowTableStmt;
 import org.apache.doris.analysis.ShowVariablesStmt;
 import org.apache.doris.analysis.ShowViewStmt;
 import org.apache.doris.analysis.TableName;
+import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Env;
@@ -260,6 +261,7 @@ public class ShowExecutorTest {
         ctx.setEnv(AccessTestUtil.fetchAdminCatalog());
         ctx.setQualifiedUser("testCluster:testUser");
         ctx.setCluster("testCluster");
+        ctx.setCurrentUserIdentity(UserIdentity.ROOT);
 
         new Expectations(ctx) {
             {
@@ -272,7 +274,14 @@ public class ShowExecutorTest {
 
     @Test
     public void testShowDb() throws AnalysisException {
+        Analyzer analyzer = AccessTestUtil.fetchAdminAnalyzer(false);
         ShowDbStmt stmt = new ShowDbStmt(null);
+        try {
+            stmt.analyze(analyzer);
+        } catch (UserException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
         ShowExecutor executor = new ShowExecutor(ctx, stmt);
         ShowResultSet resultSet = executor.execute();
 
@@ -301,7 +310,14 @@ public class ShowExecutorTest {
 
     @Test
     public void testShowDbPriv() throws AnalysisException {
+        Analyzer analyzer = AccessTestUtil.fetchAdminAnalyzer(false);
         ShowDbStmt stmt = new ShowDbStmt(null);
+        try {
+            stmt.analyze(analyzer);
+        } catch (UserException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
         ShowExecutor executor = new ShowExecutor(ctx, stmt);
         ctx.setEnv(AccessTestUtil.fetchBlockCatalog());
         executor.execute();
diff --git a/regression-test/data/external_catalog_p0/hive/test_hive_other.out 
b/regression-test/data/external_catalog_p0/hive/test_hive_other.out
index 8d44514ed7..05c25b0e19 100644
--- a/regression-test/data/external_catalog_p0/hive/test_hive_other.out
+++ b/regression-test/data/external_catalog_p0/hive/test_hive_other.out
@@ -1,4 +1,9 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !ext_catalog_grants --
+default
+tpch1_orc
+tpch1_parquet
+
 -- !q24 --
 zhangsan       1
 lisi   1
diff --git 
a/regression-test/suites/external_catalog_p0/hive/test_hive_other.groovy 
b/regression-test/suites/external_catalog_p0/hive/test_hive_other.groovy
index 7f305b3714..c6b67cd70d 100644
--- a/regression-test/suites/external_catalog_p0/hive/test_hive_other.groovy
+++ b/regression-test/suites/external_catalog_p0/hive/test_hive_other.groovy
@@ -63,6 +63,17 @@ suite("test_hive_other", "p0") {
                 'hive.metastore.uris' = 'thrift://127.0.0.1:${hms_port}'
             );
             """
+
+        // test user's grants on external catalog
+        sql """drop user if exists ext_catalog_user"""
+        sql """create user ext_catalog_user identified by '12345'"""
+        sql """grant all on internal.${context.config.defaultDb}.* to 
ext_catalog_user"""
+        sql """grant all on ${catalog_name}.*.* to ext_catalog_user"""
+        connect(user = 'ext_catalog_user', password = '12345', url = 
context.config.jdbcUrl) {
+            order_qt_ext_catalog_grants """show databases from 
${catalog_name}"""
+        }
+        sql """drop user ext_catalog_user"""
+
         sql """switch ${catalog_name}"""
         sql """use `default`"""
         // order_qt_show_tables """show tables"""


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to