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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new f63d5a4b2fe [fix](auth) Fix no auth,but can select count(*) (#35465)
f63d5a4b2fe is described below

commit f63d5a4b2fe7688c536400c89dd8669c188191ee
Author: zhangdong <[email protected]>
AuthorDate: Wed May 29 11:57:00 2024 +0800

    [fix](auth) Fix no auth,but can select count(*) (#35465)
    
    when select count(*),cols is empty, should check table priv
---
 .../nereids/rules/analysis/UserAuthentication.java     | 18 ++++++++++++++++--
 .../account_p0/test_nereids_authentication.groovy      | 10 ++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/UserAuthentication.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/UserAuthentication.java
index 360131f2c4f..df94a051afe 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/UserAuthentication.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/UserAuthentication.java
@@ -17,13 +17,19 @@
 
 package org.apache.doris.nereids.rules.analysis;
 
+import org.apache.doris.analysis.UserIdentity;
 import org.apache.doris.catalog.DatabaseIf;
 import org.apache.doris.catalog.TableIf;
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.common.ErrorReport;
 import org.apache.doris.common.UserException;
 import org.apache.doris.datasource.CatalogIf;
+import org.apache.doris.mysql.privilege.AccessControllerManager;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import org.apache.doris.qe.ConnectContext;
 
+import org.apache.commons.collections.CollectionUtils;
+
 import java.util.Set;
 
 /**
@@ -52,7 +58,15 @@ public class UserAuthentication {
             return;
         }
         String ctlName = catalog.getName();
-        connectContext.getEnv().getAccessManager().checkColumnsPriv(
-                connectContext.getCurrentUserIdentity(), ctlName, dbName, 
tableName, columns, PrivPredicate.SELECT);
+        AccessControllerManager accessManager = 
connectContext.getEnv().getAccessManager();
+        UserIdentity userIdentity = connectContext.getCurrentUserIdentity();
+        if (CollectionUtils.isEmpty(columns)) {
+            if (!accessManager.checkTblPriv(userIdentity, ctlName, dbName, 
tableName, PrivPredicate.SELECT)) {
+                
ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLE_ACCESS_DENIED_ERROR,
+                        PrivPredicate.SELECT.getPrivs().toString(), tableName);
+            }
+        } else {
+            accessManager.checkColumnsPriv(userIdentity, ctlName, dbName, 
tableName, columns, PrivPredicate.SELECT);
+        }
     }
 }
diff --git 
a/regression-test/suites/account_p0/test_nereids_authentication.groovy 
b/regression-test/suites/account_p0/test_nereids_authentication.groovy
index 2d30835f69a..a0d9c4b4514 100644
--- a/regression-test/suites/account_p0/test_nereids_authentication.groovy
+++ b/regression-test/suites/account_p0/test_nereids_authentication.groovy
@@ -66,6 +66,13 @@ suite("test_nereids_authentication", "query") {
         }
     }
 
+    connect(user=user, password='Doris_123456', url=url) {
+        test {
+            sql "SELECT count(*) FROM ${tableName2}"
+            exception "denied"
+        }
+    }
+
     connect(user=user, password='Doris_123456', url=url) {
         test {
             sql "SELECT * FROM ${tableName1}, ${tableName2} WHERE 
${tableName1}.`key` = ${tableName2}.`key`"
@@ -78,6 +85,9 @@ suite("test_nereids_authentication", "query") {
         sql "SELECT * FROM ${tableName2}"
     }
     assertEquals(result.size(), 0)
+    connect(user=user, password='Doris_123456', url=url) {
+        sql "SELECT count(*) FROM ${tableName2}"
+    }
     connect(user=user, password='Doris_123456', url=url) {
         sql "SELECT * FROM ${tableName1}, ${tableName2} WHERE 
${tableName1}.`key` = ${tableName2}.`key`"
     }


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

Reply via email to