From 6e9e026a8a2ecb9af50c82aacf59bfe602905f05 Mon Sep 17 00:00:00 2001 From: Kodai Doki <52027276+KodaiD@users.noreply.github.com> Date: Tue, 5 Aug 2025 10:45:08 +0900 Subject: [PATCH 1/3] Add JDBC database permission test (Part 2) (#2923) Co-authored-by: Mitsunori Komatsu Co-authored-by: Toshihiro Suzuki --- .github/workflows/permission-check.yaml | 198 ++++++++++++++++++ .../CassandraPermissionIntegrationTest.java | 2 +- .../JdbcAdminPermissionIntegrationTest.java | 44 +++- .../jdbc/JdbcPermissionIntegrationTest.java | 19 +- .../storage/jdbc/JdbcPermissionTestUtils.java | 34 +-- ...ageAdminPermissionIntegrationTestBase.java | 2 +- ...dStoragePermissionIntegrationTestBase.java | 5 +- 7 files changed, 286 insertions(+), 18 deletions(-) diff --git a/.github/workflows/permission-check.yaml b/.github/workflows/permission-check.yaml index b562b7a65b..123949765d 100644 --- a/.github/workflows/permission-check.yaml +++ b/.github/workflows/permission-check.yaml @@ -619,3 +619,201 @@ jobs: with: name: sqlserver_2022_permission_integration_test_reports path: core/build/reports/tests/integrationTestJdbcPermission + + integration-test-permission-jdbc-mariadb-10-11: + name: MariaDB 10.11 Permission Integration Test + runs-on: ubuntu-latest + + steps: + - name: Run MariaDB 10.11 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:10.11 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v4 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbcPermission' task + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mariadb_10.11_permission_integration_test_reports + path: core/build/reports/tests/integrationTestJdbcPermission + + integration-test-permission-jdbc-mariadb-11-4: + name: MariaDB 11.4 Permission Integration Test + runs-on: ubuntu-latest + + steps: + - name: Run MariaDB 11.4 + run: | + docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:11.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + + - uses: actions/checkout@v4 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbcPermission' task + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: mariadb_11.4_permission_integration_test_reports + path: core/build/reports/tests/integrationTestJdbcPermission + + integration-test-permission-jdbc-yugabytedb-2: + name: YugabyteDB 2 Permission Integration Test + runs-on: ubuntu-latest + + steps: + - name: Run YugabyteDB 2 + run: | + docker run -p 5433:5433 -e YSQL_USER=yugabyte -e YSQL_PASSWORD=yugabyte -d yugabytedb/yugabyte:2.20.4.0-b50 bin/yugabyted start --background=false --master_flag="ysql_enable_db_catalog_version_mode=false" --tserver_flags="ysql_enable_db_catalog_version_mode=false" + + - uses: actions/checkout@v4 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Execute Gradle 'integrationTestJdbcPermission' task + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:yugabytedb://localhost:5433/yugabyte?load-balance=any -Dscalardb.jdbc.username=yugabyte -Dscalardb.jdbc.password=yugabyte -Dscalar.db.jdbc.connection_pool.max_total=12 -Dscalar.db.jdbc.table_metadata.connection_pool.max_total=4 -Dscalar.db.jdbc.admin.connection_pool.max_total=4 + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: yugabytedb_2_permission_integration_test_reports + path: core/build/reports/tests/integrationTestJdbcPermission + + integration-test-permission-jdbc-db2-11-5: + name: Db2 11.5 Permission Integration Test + runs-on: ubuntu-latest + + services: + db2: + image: icr.io/db2_community/db2:11.5.9.0 + env: + DB2INSTANCE: db2inst1 + DB2INST1_PASSWORD: db2inst1 + DBNAME: test_db + LICENSE: accept + ports: + - 50000:50000 + options: --privileged --name db2 + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Wait for the container to be ready + timeout-minutes: 10 + run: | + while ! docker logs db2 2>&1 | grep -q "Setup has completed" + do + echo "Container is not yet ready" + sleep 5s + done + echo "Container is ready" + + - name: Create OS user for Db2 + run: | + docker exec db2 bash -c "useradd -m -s /bin/bash test" + docker exec db2 bash -c "echo \"test:test\" | sudo chpasswd" + docker exec db2 bash -c "usermod -aG db2iadm1 test" + + - name: Execute Gradle 'integrationTestJdbcPermission' task + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: db2_11.5_permission_integration_test_reports + path: core/build/reports/tests/integrationTestJdbcPermission + + integration-test-permission-jdbc-db2-12-1: + name: Db2 12.1 Permission Integration Test + runs-on: ubuntu-latest + + services: + db2: + image: icr.io/db2_community/db2:12.1.1.0 + env: + DB2INSTANCE: db2inst1 + DB2INST1_PASSWORD: db2inst1 + DBNAME: test_db + LICENSE: accept + ports: + - 50000:50000 + options: --privileged --name db2 + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) + uses: actions/setup-java@v4 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_VENDOR }} + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Wait for the container to be ready + timeout-minutes: 10 + run: | + while ! docker logs db2 2>&1 | grep -q "Setup has completed" + do + echo "Container is not yet ready" + sleep 5s + done + echo "Container is ready" + + - name: Create OS user for Db2 + run: | + docker exec db2 bash -c "useradd -m -s /bin/bash test" + docker exec db2 bash -c "echo \"test:test\" | sudo chpasswd" + docker exec db2 bash -c "usermod -aG db2iadm1 test" + + - name: Execute Gradle 'integrationTestJdbcPermission' task + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 + + - name: Upload Gradle test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: db2_12.1_permission_integration_test_reports + path: core/build/reports/tests/integrationTestJdbcPermission diff --git a/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraPermissionIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraPermissionIntegrationTest.java index 7c599ed34a..396405bf24 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraPermissionIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraPermissionIntegrationTest.java @@ -40,7 +40,7 @@ protected Map getCreationOptions() { } @Override - protected void waitForTableCreation() { + protected void waitForDdlCompletion() { try { AdminTestUtils utils = getAdminTestUtils(TEST_NAME); int retryCount = 0; diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminPermissionIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminPermissionIntegrationTest.java index d3aa5f9392..a57e2f8dfa 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminPermissionIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminPermissionIntegrationTest.java @@ -1,15 +1,24 @@ package com.scalar.db.storage.jdbc; +import static com.scalar.db.storage.jdbc.JdbcPermissionTestUtils.DDL_WAIT_SECONDS; + +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.api.DistributedStorageAdminPermissionIntegrationTestBase; +import com.scalar.db.config.DatabaseConfig; import com.scalar.db.util.AdminTestUtils; import com.scalar.db.util.PermissionTestUtils; import java.util.Properties; +import java.util.concurrent.TimeUnit; public class JdbcAdminPermissionIntegrationTest extends DistributedStorageAdminPermissionIntegrationTestBase { + private RdbEngineStrategy rdbEngine; + @Override protected Properties getProperties(String testName) { - return JdbcEnv.getProperties(testName); + Properties properties = JdbcEnv.getProperties(testName); + rdbEngine = RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties))); + return properties; } @Override @@ -26,4 +35,37 @@ protected AdminTestUtils getAdminTestUtils(String testName) { protected PermissionTestUtils getPermissionTestUtils(String testName) { return new JdbcPermissionTestUtils(getProperties(testName)); } + + @Override + protected void waitForTableCreation() { + waitForDdlCompletion(); + } + + @Override + protected void waitForNamespaceCreation() { + waitForDdlCompletion(); + } + + @Override + protected void waitForTableDeletion() { + waitForDdlCompletion(); + } + + @Override + protected void waitForNamespaceDeletion() { + waitForDdlCompletion(); + } + + @Override + protected void sleepBetweenTests() { + // Sleep to ensure the DDL operations executed as ACT are completed before the next setup. + waitForDdlCompletion(); + } + + private void waitForDdlCompletion() { + if (JdbcTestUtils.isYugabyte(rdbEngine)) { + // This is needed to avoid schema or catalog version mismatch database errors. + Uninterruptibles.sleepUninterruptibly(DDL_WAIT_SECONDS, TimeUnit.SECONDS); + } + } } diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionIntegrationTest.java index 84d7646cbe..15b861a30d 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionIntegrationTest.java @@ -1,14 +1,23 @@ package com.scalar.db.storage.jdbc; +import static com.scalar.db.storage.jdbc.JdbcPermissionTestUtils.DDL_WAIT_SECONDS; + +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.api.DistributedStoragePermissionIntegrationTestBase; +import com.scalar.db.config.DatabaseConfig; import com.scalar.db.util.AdminTestUtils; import com.scalar.db.util.PermissionTestUtils; import java.util.Properties; +import java.util.concurrent.TimeUnit; public class JdbcPermissionIntegrationTest extends DistributedStoragePermissionIntegrationTestBase { + private RdbEngineStrategy rdbEngine; + @Override protected Properties getProperties(String testName) { - return JdbcEnv.getProperties(testName); + Properties properties = JdbcEnv.getProperties(testName); + rdbEngine = RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties))); + return properties; } @Override @@ -25,4 +34,12 @@ protected PermissionTestUtils getPermissionTestUtils(String testName) { protected AdminTestUtils getAdminTestUtils(String testName) { return new JdbcAdminTestUtils(getProperties(testName)); } + + @Override + protected void waitForDdlCompletion() { + if (JdbcTestUtils.isYugabyte(rdbEngine)) { + // This is needed to avoid schema or catalog version mismatch database errors. + Uninterruptibles.sleepUninterruptibly(DDL_WAIT_SECONDS, TimeUnit.SECONDS); + } + } } diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java index c24e1c98f5..f5e6712445 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java @@ -9,6 +9,7 @@ import org.apache.commons.dbcp2.BasicDataSource; public class JdbcPermissionTestUtils implements PermissionTestUtils { + public static final int DDL_WAIT_SECONDS = 1; private final RdbEngineStrategy rdbEngine; private final BasicDataSource dataSource; @@ -20,25 +21,29 @@ public JdbcPermissionTestUtils(Properties properties) { @Override public void createNormalUser(String userName, String password) { - try (Connection connection = dataSource.getConnection()) { - String createUserSql = getCreateUserSql(userName, password); - try (Statement statement = connection.createStatement()) { - statement.execute(createUserSql); + if (!JdbcTestUtils.isDb2(rdbEngine)) { + try (Connection connection = dataSource.getConnection()) { + String createUserSql = getCreateUserSql(userName, password); + try (Statement statement = connection.createStatement()) { + statement.execute(createUserSql); + } + } catch (SQLException e) { + throw new RuntimeException("Failed to create user: " + userName, e); } - } catch (SQLException e) { - throw new RuntimeException("Failed to create user: " + userName, e); } } @Override public void dropNormalUser(String userName) { - try (Connection connection = dataSource.getConnection()) { - String dropUserSql = getDropUserSql(userName); - try (Statement statement = connection.createStatement()) { - statement.execute(dropUserSql); + if (!JdbcTestUtils.isDb2(rdbEngine)) { + try (Connection connection = dataSource.getConnection()) { + String dropUserSql = getDropUserSql(userName); + try (Statement statement = connection.createStatement()) { + statement.execute(dropUserSql); + } + } catch (SQLException e) { + throw new RuntimeException("Failed to drop user: " + userName, e); } - } catch (SQLException e) { - throw new RuntimeException("Failed to drop user: " + userName, e); } } @@ -128,6 +133,11 @@ private String[] getGrantPermissionStatements(String userName) { String.format("ALTER ROLE [db_datareader] ADD MEMBER %s", userName), String.format("ALTER ROLE [db_datawriter] ADD MEMBER %s", userName) }; + } else if (JdbcTestUtils.isDb2(rdbEngine)) { + return new String[] { + String.format("GRANT DBADM ON DATABASE TO USER %s", userName), + String.format("GRANT DATAACCESS ON DATABASE TO USER %s", userName) + }; } else { throw new UnsupportedOperationException( "Granting permissions is not supported for " + rdbEngine); diff --git a/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminPermissionIntegrationTestBase.java b/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminPermissionIntegrationTestBase.java index 438f0cd4aa..d7fccd4754 100644 --- a/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminPermissionIntegrationTestBase.java +++ b/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminPermissionIntegrationTestBase.java @@ -38,7 +38,7 @@ public abstract class DistributedStorageAdminPermissionIntegrationTestBase { TableMetadata.newBuilder() .addColumn(COL_NAME1, DataType.INT) .addColumn(COL_NAME2, DataType.TEXT) - .addColumn(COL_NAME3, DataType.TEXT) + .addColumn(COL_NAME3, DataType.INT) .addColumn(COL_NAME4, DataType.INT) .addPartitionKey(COL_NAME1) .addClusteringKey(COL_NAME2, Scan.Ordering.Order.ASC) diff --git a/integration-test/src/main/java/com/scalar/db/api/DistributedStoragePermissionIntegrationTestBase.java b/integration-test/src/main/java/com/scalar/db/api/DistributedStoragePermissionIntegrationTestBase.java index f4be283209..660ecc052b 100644 --- a/integration-test/src/main/java/com/scalar/db/api/DistributedStoragePermissionIntegrationTestBase.java +++ b/integration-test/src/main/java/com/scalar/db/api/DistributedStoragePermissionIntegrationTestBase.java @@ -68,7 +68,7 @@ public void beforeAll() throws Exception { namespace = getNamespace(); createTable(); - waitForTableCreation(); + waitForDdlCompletion(); } catch (Exception e) { logger.error("Failed to set up the test environment", e); throw e; @@ -78,6 +78,7 @@ public void beforeAll() throws Exception { @BeforeEach public void setUp() throws Exception { truncateTable(); + waitForDdlCompletion(); } @AfterAll @@ -296,7 +297,7 @@ protected Map getCreationOptions() { return Collections.emptyMap(); } - protected void waitForTableCreation() { + protected void waitForDdlCompletion() { // Default do nothing } From afe75ec21c1dcc4d675d84db4c9892e7992bb017 Mon Sep 17 00:00:00 2001 From: Kodai Doki Date: Tue, 5 Aug 2025 11:47:29 +0900 Subject: [PATCH 2/3] Remove Db2 handling --- .github/workflows/permission-check.yaml | 108 ------------------ .../storage/jdbc/JdbcPermissionTestUtils.java | 33 ++---- 2 files changed, 12 insertions(+), 129 deletions(-) diff --git a/.github/workflows/permission-check.yaml b/.github/workflows/permission-check.yaml index 123949765d..f8b529b46f 100644 --- a/.github/workflows/permission-check.yaml +++ b/.github/workflows/permission-check.yaml @@ -709,111 +709,3 @@ jobs: with: name: yugabytedb_2_permission_integration_test_reports path: core/build/reports/tests/integrationTestJdbcPermission - - integration-test-permission-jdbc-db2-11-5: - name: Db2 11.5 Permission Integration Test - runs-on: ubuntu-latest - - services: - db2: - image: icr.io/db2_community/db2:11.5.9.0 - env: - DB2INSTANCE: db2inst1 - DB2INST1_PASSWORD: db2inst1 - DBNAME: test_db - LICENSE: accept - ports: - - 50000:50000 - options: --privileged --name db2 - - steps: - - uses: actions/checkout@v4 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v4 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Wait for the container to be ready - timeout-minutes: 10 - run: | - while ! docker logs db2 2>&1 | grep -q "Setup has completed" - do - echo "Container is not yet ready" - sleep 5s - done - echo "Container is ready" - - - name: Create OS user for Db2 - run: | - docker exec db2 bash -c "useradd -m -s /bin/bash test" - docker exec db2 bash -c "echo \"test:test\" | sudo chpasswd" - docker exec db2 bash -c "usermod -aG db2iadm1 test" - - - name: Execute Gradle 'integrationTestJdbcPermission' task - run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: db2_11.5_permission_integration_test_reports - path: core/build/reports/tests/integrationTestJdbcPermission - - integration-test-permission-jdbc-db2-12-1: - name: Db2 12.1 Permission Integration Test - runs-on: ubuntu-latest - - services: - db2: - image: icr.io/db2_community/db2:12.1.1.0 - env: - DB2INSTANCE: db2inst1 - DB2INST1_PASSWORD: db2inst1 - DBNAME: test_db - LICENSE: accept - ports: - - 50000:50000 - options: --privileged --name db2 - - steps: - - uses: actions/checkout@v4 - - - name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }}) - uses: actions/setup-java@v4 - with: - java-version: ${{ env.JAVA_VERSION }} - distribution: ${{ env.JAVA_VENDOR }} - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v4 - - - name: Wait for the container to be ready - timeout-minutes: 10 - run: | - while ! docker logs db2 2>&1 | grep -q "Setup has completed" - do - echo "Container is not yet ready" - sleep 5s - done - echo "Container is ready" - - - name: Create OS user for Db2 - run: | - docker exec db2 bash -c "useradd -m -s /bin/bash test" - docker exec db2 bash -c "echo \"test:test\" | sudo chpasswd" - docker exec db2 bash -c "usermod -aG db2iadm1 test" - - - name: Execute Gradle 'integrationTestJdbcPermission' task - run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url="jdbc:db2://localhost:50000/test_db" -Dscalardb.jdbc.username=db2inst1 -Dscalardb.jdbc.password=db2inst1 - - - name: Upload Gradle test reports - if: always() - uses: actions/upload-artifact@v4 - with: - name: db2_12.1_permission_integration_test_reports - path: core/build/reports/tests/integrationTestJdbcPermission diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java index f5e6712445..a8a01ed611 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java @@ -21,29 +21,25 @@ public JdbcPermissionTestUtils(Properties properties) { @Override public void createNormalUser(String userName, String password) { - if (!JdbcTestUtils.isDb2(rdbEngine)) { - try (Connection connection = dataSource.getConnection()) { - String createUserSql = getCreateUserSql(userName, password); - try (Statement statement = connection.createStatement()) { - statement.execute(createUserSql); - } - } catch (SQLException e) { - throw new RuntimeException("Failed to create user: " + userName, e); + try (Connection connection = dataSource.getConnection()) { + String createUserSql = getCreateUserSql(userName, password); + try (Statement statement = connection.createStatement()) { + statement.execute(createUserSql); } + } catch (SQLException e) { + throw new RuntimeException("Failed to create user: " + userName, e); } } @Override public void dropNormalUser(String userName) { - if (!JdbcTestUtils.isDb2(rdbEngine)) { - try (Connection connection = dataSource.getConnection()) { - String dropUserSql = getDropUserSql(userName); - try (Statement statement = connection.createStatement()) { - statement.execute(dropUserSql); - } - } catch (SQLException e) { - throw new RuntimeException("Failed to drop user: " + userName, e); + try (Connection connection = dataSource.getConnection()) { + String dropUserSql = getDropUserSql(userName); + try (Statement statement = connection.createStatement()) { + statement.execute(dropUserSql); } + } catch (SQLException e) { + throw new RuntimeException("Failed to drop user: " + userName, e); } } @@ -133,11 +129,6 @@ private String[] getGrantPermissionStatements(String userName) { String.format("ALTER ROLE [db_datareader] ADD MEMBER %s", userName), String.format("ALTER ROLE [db_datawriter] ADD MEMBER %s", userName) }; - } else if (JdbcTestUtils.isDb2(rdbEngine)) { - return new String[] { - String.format("GRANT DBADM ON DATABASE TO USER %s", userName), - String.format("GRANT DATAACCESS ON DATABASE TO USER %s", userName) - }; } else { throw new UnsupportedOperationException( "Granting permissions is not supported for " + rdbEngine); From 02dd5beac72ee8b9504722ccdbe59705a7d22443 Mon Sep 17 00:00:00 2001 From: Kodai Doki Date: Tue, 5 Aug 2025 16:04:23 +0900 Subject: [PATCH 3/3] Fix to specify mysql in JDBC URL when testing MariaDB --- .github/workflows/permission-check.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/permission-check.yaml b/.github/workflows/permission-check.yaml index f8b529b46f..7c74550b56 100644 --- a/.github/workflows/permission-check.yaml +++ b/.github/workflows/permission-check.yaml @@ -641,7 +641,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbcPermission' task - run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql - name: Upload Gradle test reports if: always() @@ -671,7 +671,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Execute Gradle 'integrationTestJdbcPermission' task - run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mariadb://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql + run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql - name: Upload Gradle test reports if: always()