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

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


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 0b41c927e3c branch-2.1: [case](auth)Add case for auth #45478 (#45819)
0b41c927e3c is described below

commit 0b41c927e3ca376f1195efa9ed54288bf2a35f12
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Dec 24 21:41:48 2024 +0800

    branch-2.1: [case](auth)Add case for auth #45478 (#45819)
    
    Cherry-picked from #45478
    
    Co-authored-by: zhangdong <zhangd...@selectdb.com>
---
 ...st_system_user.groovy => test_system_db.groovy} |  45 ++++++----
 ..._system_user.groovy => test_system_role.groovy} |  36 ++++++--
 .../suites/account_p0/test_system_user.groovy      |  28 +++++-
 .../suites/auth_p0/test_catalogs_auth.groovy       |  68 ++++++++++++++
 .../suites/auth_p0/test_mtmv_auth.groovy           | 100 +++++++++++++++++++++
 .../auth_p0/test_partition_values_tvf_auth.groovy  |  69 ++++++++++++++
 .../suites/auth_p0/test_partitions_auth.groovy     |  84 +++++++++++++++++
 .../suites/auth_p0/test_query_tvf_auth.groovy      |  74 +++++++++++++++
 .../suites/auth_p0/test_select_count_auth.groovy   |  93 +++++++++++++++++++
 .../external_table_p2/tvf/test_iceberg_meta.groovy |  34 ++++++-
 10 files changed, 603 insertions(+), 28 deletions(-)

diff --git a/regression-test/suites/account_p0/test_system_user.groovy 
b/regression-test/suites/account_p0/test_system_db.groovy
similarity index 52%
copy from regression-test/suites/account_p0/test_system_user.groovy
copy to regression-test/suites/account_p0/test_system_db.groovy
index 1805f1669ea..11b9d6d492b 100644
--- a/regression-test/suites/account_p0/test_system_user.groovy
+++ b/regression-test/suites/account_p0/test_system_db.groovy
@@ -17,23 +17,30 @@
 
 import org.junit.Assert;
 
-suite("test_system_user") {
-    test {
-          sql """
-              create user `root`;
-          """
-          exception "root"
-    }
-    test {
-          sql """
-              drop user `root`;
-          """
-          exception "system"
-    }
-    test {
-          sql """
-              drop user `admin`;
-          """
-          exception "system"
-    }
+suite("test_system_db","p0,auth") {
+    String suiteName = "test_system_db"
+    String user = "${suiteName}_user"
+    String pwd = 'C123_567p'
+    try_sql("DROP USER ${user}")
+    sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+
+    sql """
+        grant select_priv on __internal_schema.* to `${user}`;
+    """
+    sql """
+        grant select_priv on information_schema.* to `${user}`;
+    """
+    sql """
+        grant select_priv on mysql.* to `${user}`;
+    """
+    sql """
+        revoke select_priv on __internal_schema.* from `${user}`;
+    """
+    sql """
+        revoke select_priv on information_schema.* from `${user}`;
+    """
+    sql """
+        revoke select_priv on mysql.* from `${user}`;
+    """
+    try_sql("DROP USER ${user}")
 }
diff --git a/regression-test/suites/account_p0/test_system_user.groovy 
b/regression-test/suites/account_p0/test_system_role.groovy
similarity index 57%
copy from regression-test/suites/account_p0/test_system_user.groovy
copy to regression-test/suites/account_p0/test_system_role.groovy
index 1805f1669ea..64c0f122fa2 100644
--- a/regression-test/suites/account_p0/test_system_user.groovy
+++ b/regression-test/suites/account_p0/test_system_role.groovy
@@ -17,23 +17,45 @@
 
 import org.junit.Assert;
 
-suite("test_system_user") {
+suite("test_system_role","p0,auth") {
     test {
           sql """
-              create user `root`;
+              drop role operator;
           """
-          exception "root"
+          exception "Can not drop role"
+    }
+
+    test {
+          sql """
+              drop role `admin`;
+          """
+          exception "Can not drop role"
+    }
+
+    test {
+          sql """
+              grant select_priv on *.*.* to role "operator";
+          """
+          exception "Can not grant"
+    }
+    test {
+          sql """
+              grant select_priv on *.*.* to role "admin";
+          """
+          exception "Can not grant"
     }
     test {
           sql """
-              drop user `root`;
+              revoke Node_priv on *.*.* from role 'operator';
           """
-          exception "system"
+          exception "Can not revoke"
     }
+
     test {
           sql """
-              drop user `admin`;
+              revoke Admin_priv on *.*.* from role 'admin';
           """
-          exception "system"
+          exception "Can not revoke"
     }
+
 }
diff --git a/regression-test/suites/account_p0/test_system_user.groovy 
b/regression-test/suites/account_p0/test_system_user.groovy
index 1805f1669ea..5993e1d238b 100644
--- a/regression-test/suites/account_p0/test_system_user.groovy
+++ b/regression-test/suites/account_p0/test_system_user.groovy
@@ -17,7 +17,7 @@
 
 import org.junit.Assert;
 
-suite("test_system_user") {
+suite("test_system_user","p0,auth") {
     test {
           sql """
               create user `root`;
@@ -36,4 +36,30 @@ suite("test_system_user") {
           """
           exception "system"
     }
+    test {
+          sql """
+              revoke "operator" from root;
+          """
+          exception "Can not revoke role"
+    }
+    test {
+          sql """
+              revoke 'admin' from `admin`;
+          """
+          exception "Unsupported operation"
+    }
+
+    sql """
+        grant select_priv on *.*.* to  `root`;
+    """
+    sql """
+        revoke select_priv on *.*.* from  `root`;
+    """
+    sql """
+        grant select_priv on *.*.* to  `admin`;
+    """
+    sql """
+        revoke select_priv on *.*.* from  `admin`;
+    """
+
 }
diff --git a/regression-test/suites/auth_p0/test_catalogs_auth.groovy 
b/regression-test/suites/auth_p0/test_catalogs_auth.groovy
new file mode 100644
index 00000000000..96ebcef7cf8
--- /dev/null
+++ b/regression-test/suites/auth_p0/test_catalogs_auth.groovy
@@ -0,0 +1,68 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.junit.Assert;
+
+suite("test_catalogs_auth","p0,auth") {
+    String suiteName = "test_catalogs_auth"
+    String catalogName = "${suiteName}_catalog"
+    String user = "${suiteName}_user"
+    String pwd = 'C123_567p'
+    try_sql("DROP USER ${user}")
+    sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+
+   sql """drop catalog if exists ${catalogName}"""
+    sql """CREATE CATALOG ${catalogName} PROPERTIES (
+            "type"="es",
+            "hosts"="http://8.8.8.8:9200";
+        );"""
+
+    //cloud-mode
+    if (isCloudMode()) {
+        def clusters = sql " SHOW CLUSTERS; "
+        assertTrue(!clusters.isEmpty())
+        def validCluster = clusters[0][0]
+        sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO ${user}""";
+    }
+
+    sql """grant select_priv on regression_test to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        def showRes = sql """show catalogs;"""
+        logger.info("showRes: " + showRes.toString())
+        assertFalse(showRes.toString().contains("${catalogName}"))
+
+        def tvfRes = sql """select * from catalogs();"""
+        logger.info("tvfRes: " + tvfRes.toString())
+        assertFalse(tvfRes.toString().contains("${catalogName}"))
+    }
+
+    sql """grant select_priv on ${catalogName}.*.* to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        def showRes = sql """show catalogs;"""
+        logger.info("showRes: " + showRes.toString())
+        assertTrue(showRes.toString().contains("${catalogName}"))
+
+        def tvfRes = sql """select * from catalogs();"""
+        logger.info("tvfRes: " + tvfRes.toString())
+        assertTrue(tvfRes.toString().contains("${catalogName}"))
+    }
+
+    try_sql("DROP USER ${user}")
+    sql """drop catalog if exists ${catalogName}"""
+}
diff --git a/regression-test/suites/auth_p0/test_mtmv_auth.groovy 
b/regression-test/suites/auth_p0/test_mtmv_auth.groovy
new file mode 100644
index 00000000000..52ecbebb70b
--- /dev/null
+++ b/regression-test/suites/auth_p0/test_mtmv_auth.groovy
@@ -0,0 +1,100 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.junit.Assert;
+
+suite("test_mtmv_auth","p0,auth") {
+    String suiteName = "test_mtmv_auth"
+    String dbName = context.config.getDbNameByFile(context.file)
+    String tableName = "${suiteName}_table"
+    String mvName = "${suiteName}_mv"
+    String user = "${suiteName}_user"
+    String pwd = 'C123_567p'
+    try_sql("DROP USER ${user}")
+    sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+
+   sql """DROP MATERIALIZED VIEW IF EXISTS ${mvName};"""
+   sql """drop table if exists `${tableName}`"""
+    sql """
+        CREATE TABLE `${tableName}` (
+          `user_id` LARGEINT NOT NULL COMMENT '\"用户id\"',
+          `date` DATE NOT NULL COMMENT '\"数据灌入日期时间\"',
+          `num` SMALLINT NOT NULL COMMENT '\"数量\"'
+        ) ENGINE=OLAP
+        DUPLICATE KEY(`user_id`, `date`, `num`)
+        COMMENT 'OLAP'
+        DISTRIBUTED BY HASH(`user_id`) BUCKETS 2
+        PROPERTIES ('replication_num' = '1') ;
+        """
+
+    sql """
+        CREATE MATERIALIZED VIEW ${mvName}
+            BUILD DEFERRED REFRESH AUTO ON MANUAL
+            DISTRIBUTED BY RANDOM BUCKETS 2
+            PROPERTIES ('replication_num' = '1')
+            AS
+            select * from ${tableName};
+        """
+
+    sql """refresh MATERIALIZED VIEW ${mvName} auto"""
+    waitingMTMVTaskFinishedByMvName(mvName)
+
+    //cloud-mode
+    if (isCloudMode()) {
+        def clusters = sql " SHOW CLUSTERS; "
+        assertTrue(!clusters.isEmpty())
+        def validCluster = clusters[0][0]
+        sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO ${user}""";
+    }
+
+    sql """grant select_priv on regression_test to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        def mvsRes = sql """select * from mv_infos("database"="${dbName}");"""
+        logger.info("mvsRes: " + mvsRes.toString())
+        assertFalse(mvsRes.toString().contains("${mvName}"))
+
+        def jobsRes = sql """select * from jobs("type"="mv");"""
+        logger.info("jobsRes: " + jobsRes.toString())
+        assertFalse(jobsRes.toString().contains("${mvName}"))
+
+        def tasksRes = sql """select * from tasks("type"="mv");"""
+        logger.info("tasksRes: " + tasksRes.toString())
+        assertFalse(tasksRes.toString().contains("${mvName}"))
+
+    }
+
+    sql """grant select_priv on ${dbName}.${mvName} to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+       def mvsRes = sql """select * from mv_infos("database"="${dbName}");"""
+       logger.info("mvsRes: " + mvsRes.toString())
+       assertTrue(mvsRes.toString().contains("${mvName}"))
+
+       def jobsRes = sql """select * from jobs("type"="mv");"""
+       logger.info("jobsRes: " + jobsRes.toString())
+       assertTrue(jobsRes.toString().contains("${mvName}"))
+
+       def tasksRes = sql """select * from tasks("type"="mv");"""
+       logger.info("tasksRes: " + tasksRes.toString())
+       assertTrue(tasksRes.toString().contains("${mvName}"))
+    }
+
+    try_sql("DROP USER ${user}")
+    sql """DROP MATERIALIZED VIEW IF EXISTS ${mvName};"""
+    sql """drop table if exists `${tableName}`"""
+}
diff --git 
a/regression-test/suites/auth_p0/test_partition_values_tvf_auth.groovy 
b/regression-test/suites/auth_p0/test_partition_values_tvf_auth.groovy
new file mode 100644
index 00000000000..3f0ae7ea8d5
--- /dev/null
+++ b/regression-test/suites/auth_p0/test_partition_values_tvf_auth.groovy
@@ -0,0 +1,69 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_partition_values_tvf_auth","p0,auth") {
+    String suiteName = "test_partition_values_tvf_auth"
+     String enabled = context.config.otherConfigs.get("enableHiveTest")
+     if (enabled == null || !enabled.equalsIgnoreCase("true")) {
+        logger.info("disable Hive test.")
+        return;
+     }
+
+     for (String hivePrefix : ["hive3"]) {
+             String extHiveHmsHost = 
context.config.otherConfigs.get("externalEnvIp")
+             String extHiveHmsPort = 
context.config.otherConfigs.get(hivePrefix + "HmsPort")
+             String catalog_name = 
"${hivePrefix}_test_external_catalog_hive_partition"
+
+             sql """drop catalog if exists ${catalog_name};"""
+             sql """
+                 create catalog if not exists ${catalog_name} properties (
+                     'type'='hms',
+                     'hive.metastore.uris' = 
'thrift://${extHiveHmsHost}:${extHiveHmsPort}'
+                 );
+             """
+            String user = "${suiteName}_user"
+            String pwd = 'C123_567p'
+            try_sql("DROP USER ${user}")
+            sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+            //cloud-mode
+            if (isCloudMode()) {
+                def clusters = sql " SHOW CLUSTERS; "
+                assertTrue(!clusters.isEmpty())
+                def validCluster = clusters[0][0]
+                sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO 
${user}""";
+            }
+
+            sql """grant select_priv on regression_test to ${user}"""
+             connect(user=user, password="${pwd}", url=context.config.jdbcUrl) 
{
+                 test {
+                       sql """
+                          select * from partition_values("catalog" = 
"${catalog_name}", "database" = "multi_catalog", "table" = 
"orc_partitioned_columns") order by t_int, t_float;
+                       """
+                       exception "denied"
+                 }
+             }
+            sql """grant select_priv on 
${catalog_name}.multi_catalog.orc_partitioned_columns to ${user}"""
+            connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+               sql """
+                  select * from partition_values("catalog" = 
"${catalog_name}", "database" = "multi_catalog", "table" = 
"orc_partitioned_columns") order by t_int, t_float;
+               """
+             }
+             try_sql("DROP USER ${user}")
+             sql """drop catalog if exists ${catalog_name}"""
+         }
+}
+
diff --git a/regression-test/suites/auth_p0/test_partitions_auth.groovy 
b/regression-test/suites/auth_p0/test_partitions_auth.groovy
new file mode 100644
index 00000000000..0b769f11567
--- /dev/null
+++ b/regression-test/suites/auth_p0/test_partitions_auth.groovy
@@ -0,0 +1,84 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.junit.Assert;
+
+suite("test_partitions_auth","p0,auth") {
+    String suiteName = "test_partitions_auth"
+    String dbName = context.config.getDbNameByFile(context.file)
+    String tableName = "${suiteName}_table"
+    String user = "${suiteName}_user"
+    String pwd = 'C123_567p'
+    try_sql("DROP USER ${user}")
+    sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+
+   sql """drop table if exists `${tableName}`"""
+    sql """
+        CREATE TABLE `${tableName}` (
+          `user_id` LARGEINT NOT NULL COMMENT '\"用户id\"',
+          `date` DATE NOT NULL COMMENT '\"数据灌入日期时间\"',
+          `num` SMALLINT NOT NULL COMMENT '\"数量\"'
+        ) ENGINE=OLAP
+        DUPLICATE KEY(`user_id`, `date`, `num`)
+        COMMENT 'OLAP'
+        PARTITION BY RANGE(`date`)
+        (PARTITION p201701_1000 VALUES [('0000-01-01'), ('2017-02-01')),
+        PARTITION p201702_2000 VALUES [('2017-02-01'), ('2017-03-01')),
+        PARTITION p201703_all VALUES [('2017-03-01'), ('2017-04-01')))
+        DISTRIBUTED BY HASH(`user_id`) BUCKETS 2
+        PROPERTIES ('replication_num' = '1') ;
+        """
+
+    //cloud-mode
+    if (isCloudMode()) {
+        def clusters = sql " SHOW CLUSTERS; "
+        assertTrue(!clusters.isEmpty())
+        def validCluster = clusters[0][0]
+        sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO ${user}""";
+    }
+
+    sql """grant select_priv on regression_test to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        test {
+              sql """
+                 show partitions from ${dbName}.${tableName};
+              """
+              exception "denied"
+        }
+        test {
+              sql """
+                 select * from 
partitions('catalog'='internal',"database"="${dbName}","table"="${tableName}");
+              """
+              exception "denied"
+        }
+    }
+
+    sql """grant select_priv on ${dbName}.${tableName} to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        sql """
+             show partitions from ${dbName}.${tableName};
+          """
+        sql """
+             select * from 
partitions('catalog'='internal',"database"="${dbName}","table"="${tableName}");
+          """
+    }
+
+    try_sql("DROP USER ${user}")
+    sql """drop table if exists `${tableName}`"""
+}
diff --git a/regression-test/suites/auth_p0/test_query_tvf_auth.groovy 
b/regression-test/suites/auth_p0/test_query_tvf_auth.groovy
new file mode 100644
index 00000000000..05c274077d9
--- /dev/null
+++ b/regression-test/suites/auth_p0/test_query_tvf_auth.groovy
@@ -0,0 +1,74 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_jdbc_query_tvf","p0,auth") {
+    String suiteName = "test_jdbc_query_tvf"
+    String enabled = context.config.otherConfigs.get("enableJdbcTest")
+    String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
+    String s3_endpoint = getS3Endpoint()
+    String bucket = getS3BucketName()
+    String driver_url = 
"https://${bucket}.${s3_endpoint}/regression/jdbc_driver/mysql-connector-java-8.0.25.jar";
+    if (enabled != null && enabled.equalsIgnoreCase("true")) {
+        String user = "test_jdbc_user";
+        String pwd = '123456';
+        String catalog_name = "${suiteName}_catalog"
+        String mysql_port = context.config.otherConfigs.get("mysql_57_port");
+
+        sql """drop catalog if exists ${catalog_name} """
+
+        sql """create catalog if not exists ${catalog_name} properties(
+            "type"="jdbc",
+            "user"="root",
+            "password"="123456",
+            "jdbc_url" = 
"jdbc:mysql://${externalEnvIp}:${mysql_port}/doris_test",
+            "driver_url" = "${driver_url}",
+            "driver_class" = "com.mysql.cj.jdbc.Driver"
+        );"""
+
+        String dorisuser = "${suiteName}_user"
+        String dorispwd = 'C123_567p'
+        try_sql("DROP USER ${dorisuser}")
+        sql """CREATE USER '${dorisuser}' IDENTIFIED BY '${dorispwd}'"""
+        //cloud-mode
+        if (isCloudMode()) {
+            def clusters = sql " SHOW CLUSTERS; "
+            assertTrue(!clusters.isEmpty())
+            def validCluster = clusters[0][0]
+            sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO 
${dorisuser}""";
+        }
+
+        sql """grant select_priv on regression_test to ${dorisuser}"""
+
+        connect(user=dorisuser, password="${dorispwd}", 
url=context.config.jdbcUrl) {
+            test {
+                  sql """
+                     select * from query('catalog' = '${catalog_name}', 
'query' = 'select * from doris_test.all_types');
+                  """
+                  exception "denied"
+            }
+        }
+        sql """grant select_priv on ${catalog_name}.*.* to ${dorisuser}"""
+        connect(user=dorisuser, password="${dorispwd}", 
url=context.config.jdbcUrl) {
+          sql """
+             select * from query('catalog' = '${catalog_name}', 'query' = 
'select * from doris_test.all_types');
+          """
+        }
+        try_sql("DROP USER ${dorisuser}")
+        sql """drop catalog if exists ${catalog_name} """
+    }
+}
+
diff --git a/regression-test/suites/auth_p0/test_select_count_auth.groovy 
b/regression-test/suites/auth_p0/test_select_count_auth.groovy
new file mode 100644
index 00000000000..ccea1a4a580
--- /dev/null
+++ b/regression-test/suites/auth_p0/test_select_count_auth.groovy
@@ -0,0 +1,93 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import org.junit.Assert;
+
+suite("test_select_count_auth","p0,auth") {
+    String suiteName = "test_select_count_auth"
+    String user = "${suiteName}_user"
+    String pwd = 'C123_567p'
+    try_sql("DROP USER ${user}")
+    sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+
+    //cloud-mode
+    if (isCloudMode()) {
+        def clusters = sql " SHOW CLUSTERS; "
+        assertTrue(!clusters.isEmpty())
+        def validCluster = clusters[0][0]
+        sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO ${user}""";
+    }
+
+    sql """grant select_priv on regression_test to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        test {
+              sql """
+                  select count(*) from __internal_schema.audit_log;
+              """
+              exception "denied"
+        }
+        test {
+              sql """
+                  select count(1) from __internal_schema.audit_log;
+              """
+              exception "denied"
+        }
+        test {
+              sql """
+                  select count(query_id) from __internal_schema.audit_log;
+              """
+              exception "denied"
+        }
+    }
+
+    sql """grant select_priv(query_id) on __internal_schema.audit_log to 
${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        test {
+              sql """
+                  select count(*) from __internal_schema.audit_log;
+              """
+              exception "denied"
+        }
+        test {
+              sql """
+                  select count(1) from __internal_schema.audit_log;
+              """
+              exception "denied"
+        }
+      sql """
+          select count(query_id) from __internal_schema.audit_log;
+      """
+    }
+
+    sql """grant select_priv on __internal_schema.audit_log to ${user}"""
+
+    connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+        sql """
+              select count(*) from __internal_schema.audit_log;
+          """
+        sql """
+              select count(1) from __internal_schema.audit_log;
+          """
+          sql """
+              select count(query_id) from __internal_schema.audit_log;
+          """
+    }
+
+    try_sql("DROP USER ${user}")
+}
diff --git 
a/regression-test/suites/external_table_p2/tvf/test_iceberg_meta.groovy 
b/regression-test/suites/external_table_p2/tvf/test_iceberg_meta.groovy
index 047b4a36fe2..557eaf5b061 100644
--- a/regression-test/suites/external_table_p2/tvf/test_iceberg_meta.groovy
+++ b/regression-test/suites/external_table_p2/tvf/test_iceberg_meta.groovy
@@ -16,7 +16,7 @@
 // under the License.
 
 suite("test_iceberg_meta", 
"p2,external,iceberg,external_remote,external_remote_iceberg") {
-
+    String suiteName = "test_iceberg_meta"
     Boolean ignoreP2 = true;
     if (ignoreP2) {
         logger.info("disable p2 test");
@@ -54,5 +54,37 @@ suite("test_iceberg_meta", 
"p2,external,iceberg,external_remote,external_remote_
                             "query_type" = "snapshots")
                             where snapshot_id = 7235593032487457798;
                         """
+         String user = "${suiteName}_user"
+         String pwd = 'C123_567p'
+         try_sql("DROP USER ${user}")
+         sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'"""
+         //cloud-mode
+         if (isCloudMode()) {
+             def clusters = sql " SHOW CLUSTERS; "
+             assertTrue(!clusters.isEmpty())
+             def validCluster = clusters[0][0]
+             sql """GRANT USAGE_PRIV ON CLUSTER ${validCluster} TO ${user}""";
+         }
+
+         sql """grant select_priv on regression_test to ${user}"""
+         connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+             test {
+                   sql """
+                      select committed_at, snapshot_id, parent_id, operation 
from iceberg_meta(
+                                                  "table" = 
"${iceberg_catalog_name}.${db}.multi_partition",
+                                                  "query_type" = "snapshots");
+                   """
+                   exception "denied"
+             }
+         }
+         sql """grant select_priv on 
${iceberg_catalog_name}.${db}.multi_partition to ${user}"""
+         connect(user=user, password="${pwd}", url=context.config.jdbcUrl) {
+           sql """
+              select committed_at, snapshot_id, parent_id, operation from 
iceberg_meta(
+                                          "table" = 
"${iceberg_catalog_name}.${db}.multi_partition",
+                                          "query_type" = "snapshots");
+           """
+         }
+         try_sql("DROP USER ${user}")
     }
 }


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

Reply via email to