Skip to content

Commit c887fa3

Browse files
committed
[fix](auth)Fix some issues with incorrect permission verification (apache#39726)
- `show columns` do not have permission to check - `show sync job`do not have permission to check - `Show data from db.table` should be the permission to determine the table, not the admin permission - users with grant permission should not see all processes through 'SHOW PROCESS LIST' - `show tablet storage format`fix permission error prompt cases will be added uniformly in other PRs
1 parent c6771da commit c887fa3

File tree

5 files changed

+24
-6
lines changed

5 files changed

+24
-6
lines changed

fe/fe-core/src/main/java/org/apache/doris/analysis/ShowColumnStmt.java

+11
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@
1818
package org.apache.doris.analysis;
1919

2020
import org.apache.doris.catalog.Column;
21+
import org.apache.doris.catalog.Env;
2122
import org.apache.doris.catalog.InfoSchemaDb;
2223
import org.apache.doris.catalog.ScalarType;
2324
import org.apache.doris.common.AnalysisException;
25+
import org.apache.doris.common.ErrorCode;
26+
import org.apache.doris.common.ErrorReport;
27+
import org.apache.doris.mysql.privilege.PrivPredicate;
28+
import org.apache.doris.qe.ConnectContext;
2429
import org.apache.doris.qe.ShowResultSetMetaData;
2530

2631
import com.google.common.base.Strings;
@@ -103,6 +108,12 @@ public void analyze(Analyzer analyzer) throws AnalysisException {
103108
} else {
104109
metaData = META_DATA;
105110
}
111+
if (!Env.getCurrentEnv().getAccessManager()
112+
.checkTblPriv(ConnectContext.get(), tableName.getCtl(), tableName.getDb(),
113+
tableName.getTbl(), PrivPredicate.SHOW)) {
114+
ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLE_ACCESS_DENIED_ERROR,
115+
PrivPredicate.SHOW.getPrivs().toString(), tableName);
116+
}
106117
}
107118

108119
@Override

fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDataStmt.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public ShowDataStmt(TableName tableName, List<OrderByElement> orderByElements) {
115115
public void analyze(Analyzer analyzer) throws UserException {
116116
super.analyze(analyzer);
117117
dbName = analyzer.getDefaultDb();
118-
if (Strings.isNullOrEmpty(dbName)) {
118+
if (Strings.isNullOrEmpty(dbName) && tableName == null) {
119119
getAllDbStats();
120120
return;
121121
}

fe/fe-core/src/main/java/org/apache/doris/analysis/ShowSyncJobStmt.java

+9
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@
1818
package org.apache.doris.analysis;
1919

2020
import org.apache.doris.catalog.Column;
21+
import org.apache.doris.catalog.Env;
2122
import org.apache.doris.catalog.ScalarType;
2223
import org.apache.doris.common.ErrorCode;
2324
import org.apache.doris.common.ErrorReport;
2425
import org.apache.doris.common.UserException;
26+
import org.apache.doris.datasource.InternalCatalog;
27+
import org.apache.doris.mysql.privilege.PrivPredicate;
28+
import org.apache.doris.qe.ConnectContext;
2529
import org.apache.doris.qe.ShowResultSetMetaData;
2630

2731
import com.google.common.base.Strings;
@@ -60,6 +64,11 @@ public void analyze(Analyzer analyzer) throws UserException {
6064
ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_DB_ERROR);
6165
}
6266
}
67+
if (!Env.getCurrentEnv().getAccessManager()
68+
.checkDbPriv(ConnectContext.get(), InternalCatalog.INTERNAL_CATALOG_NAME, dbName, PrivPredicate.SHOW)) {
69+
ErrorReport.reportAnalysisException(ErrorCode.ERR_DB_ACCESS_DENIED_ERROR,
70+
PrivPredicate.SHOW.getPrivs().toString(), dbName);
71+
}
6372
}
6473

6574
@Override

fe/fe-core/src/main/java/org/apache/doris/analysis/ShowTabletStorageFormatStmt.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,8 @@ public ShowTabletStorageFormatStmt(boolean verbose) {
3838
public void analyze(Analyzer analyzer) throws UserException {
3939
// check access first
4040
if (!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), PrivPredicate.ADMIN)) {
41-
ErrorReport.reportAnalysisException(ErrorCode.ERR_ACCESS_DENIED_ERROR,
42-
toSql(),
43-
ConnectContext.get().getQualifiedUser(),
44-
ConnectContext.get().getRemoteIP(), "ADMIN Privilege needed.");
41+
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR,
42+
PrivPredicate.ADMIN.getPrivs().toString());
4543
}
4644

4745
super.analyze(analyzer);

fe/fe-core/src/main/java/org/apache/doris/qe/ConnectScheduler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public List<ConnectContext.ThreadInfo> listConnection(String user, boolean isFul
163163
for (ConnectContext ctx : connectionMap.values()) {
164164
// Check auth
165165
if (!ctx.getQualifiedUser().equals(user) && !Env.getCurrentEnv().getAccessManager()
166-
.checkGlobalPriv(ConnectContext.get(), PrivPredicate.GRANT)) {
166+
.checkGlobalPriv(ConnectContext.get(), PrivPredicate.ADMIN)) {
167167
continue;
168168
}
169169

0 commit comments

Comments
 (0)