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
commit 1c449d320494cd576e2cc4085ee7a509f7a1db01 Author: Pxl <[email protected]> AuthorDate: Fri Jan 26 15:04:32 2024 +0800 [Improvement](priv) move check priv out of analyze (#30403) move check priv out of analyze --- .../apache/doris/analysis/AlterColumnStatsStmt.java | 18 ++++++++++-------- .../org/apache/doris/analysis/AlterTableStatsStmt.java | 17 ++++++++++------- .../doris/analysis/CreateMaterializedViewStmt.java | 9 +++++---- .../java/org/apache/doris/analysis/StatementBase.java | 3 +++ .../main/java/org/apache/doris/qe/StmtExecutor.java | 1 + 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java index 8b3786b2a00..7780f7833f7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java @@ -126,14 +126,6 @@ public class AlterColumnStatsStmt extends DdlStmt { throw new AnalysisException(optional.get() + " is invalid statistics"); } - // check auth - if (!Env.getCurrentEnv().getAccessManager() - .checkTblPriv(ConnectContext.get(), tableName.getDb(), tableName.getTbl(), PrivPredicate.ALTER)) { - ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, "ALTER COLUMN STATS", - ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), - tableName.getDb() + ": " + tableName.getTbl()); - } - // get statsTypeToValue properties.forEach((key, value) -> { StatsType statsType = StatsType.fromString(key); @@ -141,6 +133,16 @@ public class AlterColumnStatsStmt extends DdlStmt { }); } + @Override + public void checkPriv() throws AnalysisException { + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), tableName.getDb(), + tableName.getTbl(), PrivPredicate.ALTER)) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, "ALTER COLUMN STATS", + ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), + tableName.getDb() + ": " + tableName.getTbl()); + } + } + private void checkPartitionAndColumn() throws AnalysisException { CatalogIf catalog = analyzer.getEnv().getCatalogMgr().getCatalog(tableName.getCtl()); DatabaseIf db = catalog.getDbOrAnalysisException(tableName.getDb()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterTableStatsStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterTableStatsStmt.java index b56140ee099..0129e6b27d3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterTableStatsStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterTableStatsStmt.java @@ -85,13 +85,6 @@ public class AlterTableStatsStmt extends DdlStmt { throw new AnalysisException(optional.get() + " is invalid statistics"); } - if (!Env.getCurrentEnv().getAccessManager() - .checkTblPriv(ConnectContext.get(), tableName.getDb(), tableName.getTbl(), PrivPredicate.ALTER)) { - ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, "ALTER COLUMN STATS", - ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), - tableName.getDb() + ": " + tableName.getTbl()); - } - properties.forEach((key, value) -> { StatsType statsType = StatsType.fromString(key); statsTypeToValue.put(statsType, value); @@ -102,6 +95,16 @@ public class AlterTableStatsStmt extends DdlStmt { tableId = table.getId(); } + @Override + public void checkPriv() throws AnalysisException { + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), tableName.getDb(), + tableName.getTbl(), PrivPredicate.ALTER)) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, "ALTER COLUMN STATS", + ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(), + tableName.getDb() + ": " + tableName.getTbl()); + } + } + public long getTableId() { return tableId; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java index 2631f7c4e1a..c6a3db45b96 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java @@ -232,11 +232,12 @@ public class CreateMaterializedViewStmt extends DdlStmt { throw new AnalysisException("The limit clause is not supported in add materialized view clause, expr:" + " limit " + selectStmt.getLimit()); } + } - // check access - if (!isReplay && ConnectContext.get() != null && !Env.getCurrentEnv().getAccessManager() - .checkTblPriv(ConnectContext.get(), dbName, - baseIndexName, PrivPredicate.ALTER)) { + @Override + public void checkPriv() throws AnalysisException { + if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), dbName, baseIndexName, + PrivPredicate.ALTER)) { ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, "ALTER"); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StatementBase.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StatementBase.java index 712043b2afa..ca6501409e3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StatementBase.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StatementBase.java @@ -85,6 +85,9 @@ public abstract class StatementBase implements ParseNode { } } + public void checkPriv() throws AnalysisException { + } + public Analyzer getAnalyzer() { return analyzer; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 8b72ce3eb2e..250375c4549 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -750,6 +750,7 @@ public class StmtExecutor { } else { analyzer = new Analyzer(context.getEnv(), context); parsedStmt.analyze(analyzer); + parsedStmt.checkPriv(); } if (prepareStmt instanceof PrepareStmt && !isExecuteStmt) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
