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

jerryshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 1a615397a0 [#13124] fix(catalogs): return jdbc-user in plaintext for 
Iceberg and Paimon (#13125)
1a615397a0 is described below

commit 1a615397a0d46e5e71c0be879da4c100f0bad905
Author: MaSai <[email protected]>
AuthorDate: Mon Sep 14 17:00:31 2026 +0800

    [#13124] fix(catalogs): return jdbc-user in plaintext for Iceberg and 
Paimon (#13125)
    
    ### What changes were proposed in this pull request?
    
    Mark `jdbc-user` as not hidden in Iceberg and Paimon catalog properties
    metadata, matching JDBC catalogs after #12750. Update unit tests and
    docs.
    
    ### Why are the changes needed?
    
    #12750 treated `jdbc-user` as an account identifier (plaintext) for
    JDBC,
    but Iceberg/Paimon still masked it as `******`, causing cross-catalog
    inconsistency.
    
    Fix: #13124
    
    ### Does this PR introduce _any_ user-facing change?
    
    Yes. `GET .../catalogs/{catalog}` for lakehouse-iceberg /
    lakehouse-paimon
    now returns `jdbc-user` in plaintext. `jdbc-password` remains masked.
    
    ### How was this patch tested?
    
    - `TestIcebergCatalogPropertiesMetadata`
    - `TestPaimonCatalogPropertiesMetadata`
    
    ---------
    
    Co-authored-by: Cursor <[email protected]>
---
 .../lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java       | 2 +-
 .../lakehouse/iceberg/TestIcebergCatalogPropertiesMetadata.java   | 8 ++++++++
 .../catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java | 2 +-
 .../lakehouse/paimon/TestPaimonCatalogPropertiesMetadata.java     | 3 ++-
 core/src/main/java/org/apache/gravitino/Configs.java              | 2 +-
 docs/gravitino-server-config.md                                   | 2 +-
 docs/lakehouse-iceberg-catalog.md                                 | 2 +-
 7 files changed, 15 insertions(+), 6 deletions(-)

diff --git 
a/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
index bf6246a738..8defa29fbd 100644
--- 
a/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-iceberg/src/main/java/org/apache/gravitino/catalog/lakehouse/iceberg/IcebergCatalogPropertiesMetadata.java
@@ -91,7 +91,7 @@ public class IcebergCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetad
                 "JDBC user for Iceberg JDBC backend",
                 false /* immutable */,
                 null /* defaultValue */,
-                true /* hidden */),
+                false /* hidden */),
             stringOptionalPropertyEntry(
                 GRAVITINO_JDBC_PASSWORD,
                 "JDBC password for Iceberg JDBC backend",
diff --git 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/TestIcebergCatalogPropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/TestIcebergCatalogPropertiesMetadata.java
index 0faf851030..8ca4c3d85a 100644
--- 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/TestIcebergCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/TestIcebergCatalogPropertiesMetadata.java
@@ -35,6 +35,14 @@ public class TestIcebergCatalogPropertiesMetadata {
     metadata = new IcebergCatalogPropertiesMetadata();
   }
 
+  @Test
+  void testJdbcUserIsVisibleAndPasswordIsHidden() {
+    Assertions.assertFalse(
+        
metadata.isHiddenProperty(IcebergCatalogPropertiesMetadata.GRAVITINO_JDBC_USER));
+    Assertions.assertTrue(
+        
metadata.isHiddenProperty(IcebergCatalogPropertiesMetadata.GRAVITINO_JDBC_PASSWORD));
+  }
+
   @Test
   void testTableMetadataCacheImplDefaultValue() {
     Assertions.assertEquals(
diff --git 
a/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
index 5a7d124e88..deeb86d1da 100644
--- 
a/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/PaimonCatalogPropertiesMetadata.java
@@ -199,7 +199,7 @@ public class PaimonCatalogPropertiesMetadata extends 
BaseCatalogPropertiesMetada
                 "Gravitino Paimon catalog jdbc user",
                 false /* immutable */,
                 null /* defaultValue */,
-                true /* hidden */),
+                false /* hidden */),
             stringOptionalPropertyEntry(
                 GRAVITINO_JDBC_PASSWORD,
                 "Gravitino Paimon catalog jdbc password",
diff --git 
a/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestPaimonCatalogPropertiesMetadata.java
 
b/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestPaimonCatalogPropertiesMetadata.java
index ead7541c40..433ece5279 100644
--- 
a/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestPaimonCatalogPropertiesMetadata.java
+++ 
b/catalogs/catalog-lakehouse-paimon/src/test/java/org/apache/gravitino/catalog/lakehouse/paimon/TestPaimonCatalogPropertiesMetadata.java
@@ -33,7 +33,6 @@ public class TestPaimonCatalogPropertiesMetadata {
 
   @Test
   void testSensitivePropertiesAreHidden() {
-    
assertTrue(metadata.isHiddenProperty(PaimonCatalogPropertiesMetadata.GRAVITINO_JDBC_USER));
     
assertTrue(metadata.isHiddenProperty(PaimonCatalogPropertiesMetadata.GRAVITINO_JDBC_PASSWORD));
     
assertTrue(metadata.isHiddenProperty(S3Properties.GRAVITINO_S3_ACCESS_KEY_ID));
     
assertTrue(metadata.isHiddenProperty(S3Properties.GRAVITINO_S3_SECRET_ACCESS_KEY));
@@ -51,6 +50,8 @@ public class TestPaimonCatalogPropertiesMetadata {
   void testNonSensitivePropertiesAreNotHidden() {
     
assertFalse(metadata.isHiddenProperty(PaimonCatalogPropertiesMetadata.WAREHOUSE));
     
assertFalse(metadata.isHiddenProperty(PaimonCatalogPropertiesMetadata.URI));
+    // jdbc-user identifies the account rather than a secret — align with JDBC 
catalogs.
+    
assertFalse(metadata.isHiddenProperty(PaimonCatalogPropertiesMetadata.GRAVITINO_JDBC_USER));
     
assertFalse(metadata.isHiddenProperty(AzureProperties.GRAVITINO_AZURE_STORAGE_ACCOUNT_NAME));
     
assertFalse(metadata.isHiddenProperty(GCSProperties.GRAVITINO_GCS_SERVICE_ACCOUNT_FILE));
     // DLF token metadata (provider type, path, loader) is not a credential — 
stays visible.
diff --git a/core/src/main/java/org/apache/gravitino/Configs.java 
b/core/src/main/java/org/apache/gravitino/Configs.java
index c638288c39..863492abf7 100644
--- a/core/src/main/java/org/apache/gravitino/Configs.java
+++ b/core/src/main/java/org/apache/gravitino/Configs.java
@@ -618,7 +618,7 @@ public class Configs {
   public static final ConfigEntry<Boolean> 
CATALOG_CREDENTIAL_BACKFILL_TO_PROPERTIES =
       new ConfigBuilder("gravitino.catalog.credential.backfillToProperties")
           .doc(
-              "If true, the server exposes hidden catalog credentials (such as 
jdbc-user and "
+              "If true, the server exposes hidden catalog credentials (such as 
"
                   + "jdbc-password) in the catalog properties response. Enable 
only during a "
                   + "rolling upgrade while old connectors that do not support 
credential vending "
                   + "are still in use. Enabling this is a security risk 
because credentials "
diff --git a/docs/gravitino-server-config.md b/docs/gravitino-server-config.md
index 7da4f85cfe..9a39b1a613 100644
--- a/docs/gravitino-server-config.md
+++ b/docs/gravitino-server-config.md
@@ -345,7 +345,7 @@ vended credentials; the mechanism it opts out of is 
described in
 | `gravitino.catalog.cache.evictionIntervalMs`        | Interval in 
milliseconds before an idle catalog is evicted from the catalog cache.          
                                                                                
                                                                                
                                           | `3600000`     |
 | `gravitino.catalog.classloader.isolated`            | Whether to load each 
catalog's libraries and configuration in an isolated classloader rather than 
the application classloader.                                                    
                                                                                
                                     | `true`        |
 | `gravitino.catalog.classloader.sharing.enabled`     | Whether catalogs whose 
isolation-relevant properties match may share one classloader. Sharing reduces 
Metaspace usage; disabling it gives every catalog its own.                      
                                                                                
                                 | `true`        |
-| `gravitino.catalog.credential.backfillToProperties` | Whether to return 
hidden catalog credentials such as `jdbc-user` and `jdbc-password` in the 
catalog properties response, for connectors that cannot consume vended 
credentials. Anyone who can read catalog properties can then read those 
credentials. Turn it off once your connectors are upgraded. | `false`       |
+| `gravitino.catalog.credential.backfillToProperties` | Whether to return 
hidden catalog credentials such as `jdbc-password` in the catalog properties 
response, for connectors that cannot consume vended credentials. Anyone who can 
read catalog properties can then read those credentials. Turn it off once your 
connectors are upgraded.                 | `false`       |
 
 ### Securing the Server
 
diff --git a/docs/lakehouse-iceberg-catalog.md 
b/docs/lakehouse-iceberg-catalog.md
index 6f4741f15f..5ebe5bbcbb 100644
--- a/docs/lakehouse-iceberg-catalog.md
+++ b/docs/lakehouse-iceberg-catalog.md
@@ -258,7 +258,7 @@ Gravitino provides the build-in 
`org.apache.gravitino.iceberg.common.cache.Local
 Refer to [Manage Catalogs and 
Schemas](./manage-catalogs-and-schemas.md#catalog-operations) for more details.
 
 :::note
-Sensitive catalog properties such as credential-vending keys are hidden from 
the default load catalog response. Retrieve secret-manager-backed properties 
(including keys that overlap with credential vending) via `getSecrets` / `GET 
.../objects/{type}/{fullName}/secrets`. The [credential vending 
API](security/credential-vending.md) remains available for typed credential 
delivery.
+Sensitive catalog properties such as `jdbc-password` and cloud credential keys 
are hidden from the default load catalog response (`jdbc-user` is returned in 
plaintext). Retrieve secret-manager-backed properties (including keys that 
overlap with credential vending) via `getSecrets` / `GET 
.../objects/{type}/{fullName}/secrets`. The [credential vending 
API](security/credential-vending.md) remains available for typed credential 
delivery.
 :::
 
 ## Schema

Reply via email to