diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java index dad7dc4601..9f371fbd03 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java @@ -278,16 +278,17 @@ public class NativeInsertStmt extends InsertStmt { } String dbName = tblName.getDb(); String tableName = tblName.getTbl(); + String ctlName = tblName.getCtl(); // check exist DatabaseIf db = analyzer.getEnv().getCatalogMgr().getCatalog(tblName.getCtl()).getDbOrAnalysisException(dbName); TableIf table = db.getTableOrAnalysisException(tblName.getTbl()); // check access if (!Env.getCurrentEnv().getAccessManager() - .checkTblPriv(ConnectContext.get(), dbName, tableName, PrivPredicate.LOAD)) { + .checkTblPriv(ConnectContext.get(), ctlName, dbName, tableName, PrivPredicate.LOAD)) { ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, "LOAD", ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), - dbName + ": " + tableName); + ctlName + ": " + dbName + ": " + tableName); } tableMap.put(table.getId(), table); @@ -334,11 +335,13 @@ public class NativeInsertStmt extends InsertStmt { } // Check privilege - if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), tblName.getDb(), - tblName.getTbl(), PrivPredicate.LOAD)) { + if (!Env.getCurrentEnv().getAccessManager() + .checkTblPriv(ConnectContext.get(), tblName.getCtl(), tblName.getDb(), + tblName.getTbl(), PrivPredicate.LOAD)) { ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, "LOAD", ConnectContext.get().getQualifiedUser(), - ConnectContext.get().getRemoteIP(), tblName.getDb() + ": " + tblName.getTbl()); + ConnectContext.get().getRemoteIP(), + tblName.getCtl() + ": " + tblName.getDb() + ": " + tblName.getTbl()); } // check partition diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy index cc72f0e614..d004d39237 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy @@ -24,6 +24,10 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc 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'; + def tokens = context.config.jdbcUrl.split('/') + def url = tokens[0] + "//" + tokens[2] + "/" + "information_schema" + "?" String catalog_name = "mysql_jdbc_catalog"; String internal_db_name = "regression_test_jdbc_catalog_p0"; String ex_db_name = "doris_test"; @@ -56,6 +60,9 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc String dt = "dt"; String dt_null = "dt_null"; + try_sql("DROP USER ${user}") + sql """CREATE USER '${user}' IDENTIFIED BY '${pwd}'""" + sql """create database if not exists ${internal_db_name}; """ sql """drop catalog if exists ${catalog_name} """ @@ -115,7 +122,25 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc // test insert String uuid1 = UUID.randomUUID().toString(); - sql """ insert into ${test_insert} values ('${uuid1}', 'doris1', 18) """ + connect(user=user, password="${pwd}", url=url) { + try { + sql """ insert into ${catalog_name}.${ex_db_name}.${test_insert} values ('${uuid1}', 'doris1', 18) """ + fail() + } catch (Exception e) { + log.info(e.getMessage()) + } + } + + sql """GRANT LOAD_PRIV ON ${catalog_name}.${ex_db_name}.${test_insert} TO ${user}""" + + connect(user=user, password="${pwd}", url=url) { + try { + sql """ insert into ${catalog_name}.${ex_db_name}.${test_insert} values ('${uuid1}', 'doris1', 18) """ + } catch (Exception e) { + fail(); + } + } + order_qt_test_insert1 """ select name, age from ${test_insert} where id = '${uuid1}' order by age """ String uuid2 = UUID.randomUUID().toString();