Соединение Redshift JDBC не проходит аутентификацию, когда пароль пользователя содержит символ #
Я столкнулся с проблемой подключений JDBC к Redshift, которую не могу решить. Используя пример, приведенный в документации, я могу легко подключиться к кластеру Redshift, когда у пользователя есть простой пароль, но когда у пользователя есть пароль с символом #, я получаю ошибку аутентификации. Я могу подключиться к кластеру, используя SQL Workbench/J, используя оба набора учетных данных. Когда я использую следующее, нет проблем с подключением.
DriverManager.setLoginTimeout(60);
Properties props = new Properties();
props.setProperty("user", "johndoe");
props.setProperty("password", "superSecret");
props.setProperty("tcpKeepAlive", "true");
Connection connection = DriverManager.getConnection("jdbc:redshift://xxxxxxx.us-east-1.redshift.amazonaws.com:5439/dev", props);
Когда я использую следующее,
DriverManager.setLoginTimeout(60);
Properties props = new Properties();
props.setProperty("user", "johndoehash");
props.setProperty("password", "superDouble#Secret");
props.setProperty("tcpKeepAlive", "true");
Connection connection = DriverManager.getConnection("jdbc:redshift://xxxxxxx.us-east-1.redshift.amazonaws.com:5439/dev", props);
Я получаю ошибку аутентификации
java.sql.SQLException: [Amazon](500310) Invalid operation: password authentication failed for user "johndoehash";
at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(ErrorResponse.java:1830)
at com.amazon.redshift.client.InboundDataHandler.read(InboundDataHandler.java:454)
at com.amazon.support.channels.AbstractSocketChannel.readCallback(Unknown Source)
at com.amazon.support.channels.PlainSocketChannel.read(Unknown Source)
Caused by: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: password authentication failed for user "johndoehash";
Я могу войти в кластер с обеими учетными записями, используя SQL Workbench/J, но по какой-то причине я не могу подключиться через свое приложение. Есть идеи, что я делаю не так?
2 ответа
Это действительно странно, но если я использую годичную версию Java 8 с моим приложением
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
Проблема уходит... Иди разберись.
У меня недостаточно очков, чтобы комментировать. Я не знаю, решит ли это вашу проблему или нет. Но попробуйте это:
props.setProperty("пароль", "superDouble& #35; Секрет");
Без пробела между "&" и "#35;"
альтернативно
props.setProperty("пароль", "superDouble%23Secret");