This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 42b680d33b3 branch-3.0: [fix](auth)Fix the compatibility issue with 
show_view_priv when replaying editLog #45949 (#46038)
42b680d33b3 is described below

commit 42b680d33b3c6a6c7c026f1f313c54c1952c73f6
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Jan 2 16:11:51 2025 +0800

    branch-3.0: [fix](auth)Fix the compatibility issue with show_view_priv when 
replaying editLog #45949 (#46038)
    
    Cherry-picked from #45949
    
    Co-authored-by: zhangdong <[email protected]>
---
 .../org/apache/doris/mysql/privilege/Auth.java     | 16 ++--
 .../org/apache/doris/mysql/privilege/Role.java     | 87 +++++++++++++---------
 2 files changed, 62 insertions(+), 41 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Auth.java 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Auth.java
index 7f78f321e43..1c53287267b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Auth.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Auth.java
@@ -654,17 +654,19 @@ public class Auth implements Writable {
 
     public void replayGrant(PrivInfo privInfo) {
         try {
+            PrivBitSet privs = privInfo.getPrivs();
+            Role.compatibilityAuthIndexChange(privs);
             if (privInfo.getTblPattern() != null) {
                 grantInternal(privInfo.getUserIdent(), privInfo.getRole(),
-                        privInfo.getTblPattern(), privInfo.getPrivs(), 
privInfo.getColPrivileges(),
+                        privInfo.getTblPattern(), privs, 
privInfo.getColPrivileges(),
                         true /* err on non exist */, true /* is replay */);
             } else if (privInfo.getResourcePattern() != null) {
                 grantInternal(privInfo.getUserIdent(), privInfo.getRole(),
-                        privInfo.getResourcePattern(), privInfo.getPrivs(),
+                        privInfo.getResourcePattern(), privs,
                         true /* err on non exist */, true /* is replay */);
             } else if (privInfo.getWorkloadGroupPattern() != null) {
                 grantInternal(privInfo.getUserIdent(), privInfo.getRole(),
-                        privInfo.getWorkloadGroupPattern(), 
privInfo.getPrivs(),
+                        privInfo.getWorkloadGroupPattern(), privs,
                         true /* err on non exist */, true /* is replay */);
             } else {
                 grantInternal(privInfo.getUserIdent(), privInfo.getRoles(), 
true);
@@ -839,14 +841,16 @@ public class Auth implements Writable {
 
     public void replayRevoke(PrivInfo info) {
         try {
+            PrivBitSet privs = info.getPrivs();
+            Role.compatibilityAuthIndexChange(privs);
             if (info.getTblPattern() != null) {
-                revokeInternal(info.getUserIdent(), info.getRole(), 
info.getTblPattern(), info.getPrivs(),
+                revokeInternal(info.getUserIdent(), info.getRole(), 
info.getTblPattern(), privs,
                         info.getColPrivileges(), true /* err on non exist */, 
true /* is replay */);
             } else if (info.getResourcePattern() != null) {
-                revokeInternal(info.getUserIdent(), info.getRole(), 
info.getResourcePattern(), info.getPrivs(),
+                revokeInternal(info.getUserIdent(), info.getRole(), 
info.getResourcePattern(), privs,
                         true /* err on non exist */, true /* is replay */);
             } else if (info.getWorkloadGroupPattern() != null) {
-                revokeInternal(info.getUserIdent(), info.getRole(), 
info.getWorkloadGroupPattern(), info.getPrivs(),
+                revokeInternal(info.getUserIdent(), info.getRole(), 
info.getWorkloadGroupPattern(), privs,
                         true /* err on non exist */, true /* is replay */);
             } else {
                 revokeInternal(info.getUserIdent(), info.getRoles(), true /* 
is replay */);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java 
b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java
index edd964c555a..56e6b09641f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mysql/privilege/Role.java
@@ -1116,53 +1116,70 @@ public class Role implements Writable, 
GsonPostProcessable {
 
         LOG.info("auth into compatibility logic, currentVersion={}", 
currentVersion);
         if (Config.isNotCloudMode() && currentVersion >= 
FeMetaVersion.VERSION_129) {
-            // not cloud mode,
-            // For versions greater than VERSION_123,
-            // the community requires versions above VERSION_129 to follow 
compatibility logic.
-
-            // SHOW_VIEW_PRIV_DEPRECATED -> SHOW_VIEW_PRIV (9 -> 14)
             tblPatternToPrivs.values().forEach(privBitSet -> {
-                if 
(privBitSet.containsPrivs(Privilege.SHOW_VIEW_PRIV_DEPRECATED)) {
-                    // remove SHOW_VIEW_PRIV_DEPRECATED
-                    
privBitSet.unset(Privilege.SHOW_VIEW_PRIV_DEPRECATED.getIdx());
-                    // add SHOW_VIEW_PRIV
-                    privBitSet.set(Privilege.SHOW_VIEW_PRIV.getIdx());
-                }
+                compatibilityAuthIndexChange(privBitSet);
             });
         } else if (Config.isCloudMode()) {
-            // cloud mode
-            // For versions greater than VERSION_123, the cloud requires 
compatibility logic.
-
-            // CLUSTER_USAGE_PRIV_DEPRECATED -> CLUSTER_USAGE_PRIV (9 -> 12)
             clusterPatternToPrivs.values().forEach(privBitSet -> {
-                if 
(privBitSet.containsPrivs(Privilege.CLUSTER_USAGE_PRIV_DEPRECATED)) {
-                    // remove CLUSTER_USAGE_PRIV_DEPRECATED
-                    
privBitSet.unset(Privilege.CLUSTER_USAGE_PRIV_DEPRECATED.getIdx());
-                    // add CLUSTER_USAGE_PRIV
-                    privBitSet.set(Privilege.CLUSTER_USAGE_PRIV.getIdx());
-                }
+                compatibilityAuthIndexChange(privBitSet);
             });
-            // STAGE_USAGE_PRIV_DEPRECATED -> STAGE_USAGE_PRIV (10 -> 13)
             stagePatternToPrivs.values().forEach(privBitSet -> {
-                if 
(privBitSet.containsPrivs(Privilege.STAGE_USAGE_PRIV_DEPRECATED)) {
-                    // remove CLUSTER_USAGE_PRIV_DEPRECATED
-                    
privBitSet.unset(Privilege.STAGE_USAGE_PRIV_DEPRECATED.getIdx());
-                    // add CLUSTER_USAGE_PRIV
-                    privBitSet.set(Privilege.STAGE_USAGE_PRIV.getIdx());
-                }
+                compatibilityAuthIndexChange(privBitSet);
             });
-            // SHOW_VIEW_PRIV_CLOUD_DEPRECATED -> SHOW_VIEW_PRIV (11 -> 14)
             tblPatternToPrivs.values().forEach(privBitSet -> {
-                if 
(privBitSet.containsPrivs(Privilege.SHOW_VIEW_PRIV_CLOUD_DEPRECATED)) {
-                    // remove SHOW_VIEW_PRIV_CLOUD_DEPRECATED
-                    
privBitSet.unset(Privilege.SHOW_VIEW_PRIV_CLOUD_DEPRECATED.getIdx());
-                    // add SHOW_VIEW_PRIV
-                    privBitSet.set(Privilege.SHOW_VIEW_PRIV.getIdx());
-                }
+                compatibilityAuthIndexChange(privBitSet);
             });
         }
     }
 
+    public static void compatibilityAuthIndexChange(PrivBitSet privBitSet) {
+        if (privBitSet == null) {
+            return;
+        }
+        int currentVersion = Env.getCurrentEnvJournalVersion();
+        // not cloud mode,
+        // For versions greater than VERSION_123,
+        // the community requires versions above VERSION_129 to follow 
compatibility logic.
+
+        // SHOW_VIEW_PRIV_DEPRECATED -> SHOW_VIEW_PRIV (9 -> 14)
+        if (Config.isNotCloudMode() && currentVersion >= 
FeMetaVersion.VERSION_129) {
+            if (privBitSet.containsPrivs(Privilege.SHOW_VIEW_PRIV_DEPRECATED)) 
{
+                // remove SHOW_VIEW_PRIV_DEPRECATED
+                privBitSet.unset(Privilege.SHOW_VIEW_PRIV_DEPRECATED.getIdx());
+                // add SHOW_VIEW_PRIV
+                privBitSet.set(Privilege.SHOW_VIEW_PRIV.getIdx());
+            }
+        } else if (Config.isCloudMode()) {
+            // cloud mode
+            // For versions greater than VERSION_123, the cloud requires 
compatibility logic.
+
+            // CLUSTER_USAGE_PRIV_DEPRECATED -> CLUSTER_USAGE_PRIV (9 -> 12)
+
+            if 
(privBitSet.containsPrivs(Privilege.CLUSTER_USAGE_PRIV_DEPRECATED)) {
+                // remove CLUSTER_USAGE_PRIV_DEPRECATED
+                
privBitSet.unset(Privilege.CLUSTER_USAGE_PRIV_DEPRECATED.getIdx());
+                // add CLUSTER_USAGE_PRIV
+                privBitSet.set(Privilege.CLUSTER_USAGE_PRIV.getIdx());
+            }
+
+            // STAGE_USAGE_PRIV_DEPRECATED -> STAGE_USAGE_PRIV (10 -> 13)
+            if 
(privBitSet.containsPrivs(Privilege.STAGE_USAGE_PRIV_DEPRECATED)) {
+                // remove CLUSTER_USAGE_PRIV_DEPRECATED
+                
privBitSet.unset(Privilege.STAGE_USAGE_PRIV_DEPRECATED.getIdx());
+                // add CLUSTER_USAGE_PRIV
+                privBitSet.set(Privilege.STAGE_USAGE_PRIV.getIdx());
+            }
+
+            // SHOW_VIEW_PRIV_CLOUD_DEPRECATED -> SHOW_VIEW_PRIV (11 -> 14)
+            if 
(privBitSet.containsPrivs(Privilege.SHOW_VIEW_PRIV_CLOUD_DEPRECATED)) {
+                // remove SHOW_VIEW_PRIV_CLOUD_DEPRECATED
+                
privBitSet.unset(Privilege.SHOW_VIEW_PRIV_CLOUD_DEPRECATED.getIdx());
+                // add SHOW_VIEW_PRIV
+                privBitSet.set(Privilege.SHOW_VIEW_PRIV.getIdx());
+            }
+        }
+    }
+
     private void rebuildPrivTables() {
         globalPrivTable = new GlobalPrivTable();
         catalogPrivTable = new CatalogPrivTable();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to