[fix](auth) Fix no auth,but can select count(*) (#35465)

when select count(*),cols is empty, should check table priv
This commit is contained in:
zhangdong
2024-05-29 11:57:00 +08:00
committed by yiguolei
parent f076fe8624
commit 8c0c05b9c6
2 changed files with 26 additions and 2 deletions

View File

@ -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);
}
}
}