diff --git a/src/main/java/net/snowflake/client/jdbc/SnowflakeBasicDataSource.java b/src/main/java/net/snowflake/client/jdbc/SnowflakeBasicDataSource.java index 57e53614d..68c759ed5 100644 --- a/src/main/java/net/snowflake/client/jdbc/SnowflakeBasicDataSource.java +++ b/src/main/java/net/snowflake/client/jdbc/SnowflakeBasicDataSource.java @@ -94,12 +94,20 @@ public Connection getConnection() throws SQLException { public Connection getConnection(String username, String password) throws SQLException { if (!AUTHENTICATOR_OAUTH.equalsIgnoreCase( authenticator)) { // For OAuth, no username is required + if (username == null) { + throw new SnowflakeSQLException( + "Cannot create connection because username is missing in DataSource properties."); + } properties.put(SFSessionProperty.USER.getPropertyKey(), username); } // The driver needs password for OAUTH as part of SNOW-533673 feature request. if (!AUTHENTICATOR_SNOWFLAKE_JWT.equalsIgnoreCase(authenticator) && !AUTHENTICATOR_EXTERNAL_BROWSER.equalsIgnoreCase(authenticator)) { + if (password == null) { + throw new SnowflakeSQLException( + "Cannot create connection because password is missing in DataSource properties."); + } properties.put(SFSessionProperty.PASSWORD.getPropertyKey(), password); } diff --git a/src/test/java/net/snowflake/client/jdbc/SnowflakeBasicDataSourceTest.java b/src/test/java/net/snowflake/client/jdbc/SnowflakeBasicDataSourceTest.java index a2f4638b1..1752a9273 100644 --- a/src/test/java/net/snowflake/client/jdbc/SnowflakeBasicDataSourceTest.java +++ b/src/test/java/net/snowflake/client/jdbc/SnowflakeBasicDataSourceTest.java @@ -6,6 +6,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.sql.SQLException; import java.util.Properties; @@ -112,4 +113,22 @@ public void testDataSourceSetters() { assertEquals("pwd", props.get(SFSessionProperty.PRIVATE_KEY_PWD.getPropertyKey())); assertEquals("SNOWFLAKE_JWT", props.get(SFSessionProperty.AUTHENTICATOR.getPropertyKey())); } + + @Test + public void testDataSourceWithoutUsernameOrPasswordThrowsExplicitException() { + SnowflakeBasicDataSource ds = new SnowflakeBasicDataSource(); + + ds.setAccount("testaccount"); + ds.setAuthenticator("snowflake"); + assertThrows( + SnowflakeSQLException.class, + ds::getConnection, + "Cannot create connection because username is missing in DataSource properties."); + + ds.setUser("testuser"); + assertThrows( + SnowflakeSQLException.class, + ds::getConnection, + "Cannot create connection because password is missing in DataSource properties."); + } }