You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2024/06/20 10:31:37 UTC
(doris) branch branch-2.1 updated: [fix](auth)Auth support case insensitive (#36381) (#36557)
This is an automated email from the ASF dual-hosted git repository.
morningman 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 22d37ba3fe6 [fix](auth)Auth support case insensitive (#36381) (#36557)
22d37ba3fe6 is described below
commit 22d37ba3fe64fe0d319548dcd21d771b72cdcd39
Author: zhangdong <49...@qq.com>
AuthorDate: Thu Jun 20 18:31:30 2024 +0800
[fix](auth)Auth support case insensitive (#36381) (#36557)
pick from: #36381
---
.../main/java/org/apache/doris/catalog/Env.java | 4 ++
.../doris/mysql/privilege/TablePrivEntry.java | 3 +-
.../org/apache/doris/mysql/privilege/AuthTest.java | 50 ++++++++++++++++++++++
3 files changed, 56 insertions(+), 1 deletion(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 4209eeaa532..09cb46fdf27 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -5921,6 +5921,10 @@ public class Env {
return GlobalVariable.lowerCaseTableNames == 2;
}
+ public static boolean isTableNamesCaseSensitive() {
+ return GlobalVariable.lowerCaseTableNames == 0;
+ }
+
private static void getTableMeta(OlapTable olapTable, TGetMetaDBMeta dbMeta) {
if (LOG.isDebugEnabled()) {
LOG.debug("get table meta. table: {}", olapTable.getName());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java
index c89104cde1c..27693bbf6a3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/TablePrivEntry.java
@@ -17,6 +17,7 @@
package org.apache.doris.mysql.privilege;
+import org.apache.doris.catalog.Env;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.CaseSensibility;
import org.apache.doris.common.PatternMatcher;
@@ -58,7 +59,7 @@ public class TablePrivEntry extends DbPrivEntry {
ctl, CaseSensibility.CATALOG.getCaseSensibility(), ctl.equals(ANY_CTL));
PatternMatcher tblPattern = PatternMatcher.createFlatPattern(
- tbl, CaseSensibility.TABLE.getCaseSensibility(), tbl.equals(ANY_TBL));
+ tbl, Env.isTableNamesCaseSensitive(), tbl.equals(ANY_TBL));
if (privs.containsNodePriv() || privs.containsResourcePriv()) {
throw new AnalysisException("Table privilege can not contains global or resource privileges: " + privs);
diff --git a/fe/fe-core/src/test/java/org/apache/doris/mysql/privilege/AuthTest.java b/fe/fe-core/src/test/java/org/apache/doris/mysql/privilege/AuthTest.java
index 43737066748..baedd1483d4 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/mysql/privilege/AuthTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/mysql/privilege/AuthTest.java
@@ -2373,6 +2373,56 @@ public class AuthTest {
revoke(revokeStmt);
}
+ @Test
+ public void testTableNamesCaseSensitive() throws UserException {
+ new Expectations() {
+ {
+ Env.isTableNamesCaseSensitive();
+ minTimes = 0;
+ result = true;
+ }
+ };
+ UserIdentity userIdentity = new UserIdentity("sensitiveUser", "%");
+ createUser(userIdentity);
+ // `load_priv` and `select_priv` can not `show create view`
+ GrantStmt grantStmt = new GrantStmt(userIdentity, null, new TablePattern("sensitivedb", "sensitiveTable"),
+ Lists.newArrayList(new AccessPrivilegeWithCols(AccessPrivilege.SELECT_PRIV)));
+ grant(grantStmt);
+ Assert.assertTrue(accessManager
+ .checkTblPriv(userIdentity, InternalCatalog.INTERNAL_CATALOG_NAME, "sensitivedb", "sensitiveTable",
+ PrivPredicate.SELECT));
+
+ Assert.assertFalse(accessManager
+ .checkTblPriv(userIdentity, InternalCatalog.INTERNAL_CATALOG_NAME, "sensitivedb", "sensitivetable",
+ PrivPredicate.SELECT));
+ dropUser(userIdentity);
+ }
+
+ @Test
+ public void testTableNamesCaseInsensitive() throws UserException {
+ new Expectations() {
+ {
+ Env.isTableNamesCaseSensitive();
+ minTimes = 0;
+ result = false;
+ }
+ };
+ UserIdentity userIdentity = new UserIdentity("sensitiveUser1", "%");
+ createUser(userIdentity);
+ // `load_priv` and `select_priv` can not `show create view`
+ GrantStmt grantStmt = new GrantStmt(userIdentity, null, new TablePattern("sensitivedb1", "sensitiveTable"),
+ Lists.newArrayList(new AccessPrivilegeWithCols(AccessPrivilege.SELECT_PRIV)));
+ grant(grantStmt);
+ Assert.assertTrue(accessManager
+ .checkTblPriv(userIdentity, InternalCatalog.INTERNAL_CATALOG_NAME, "sensitivedb1", "sensitiveTable",
+ PrivPredicate.SELECT));
+
+ Assert.assertTrue(accessManager
+ .checkTblPriv(userIdentity, InternalCatalog.INTERNAL_CATALOG_NAME, "sensitivedb1", "sensitivetable",
+ PrivPredicate.SELECT));
+ dropUser(userIdentity);
+ }
+
@Test
public void testSetInitialRootPassword() {
// Skip set root password if `initial_root_password` set to empty string
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org