2017-03-29 29 views
1

になったときにRedshiftへのJDBC接続で問題が発生しました。ドキュメントに示されている例を使用すると、ユーザーにプレーンパスワードがあるときにRedshiftクラスタに簡単に接続できますが、#文字のパスワードがあるユーザーは認証に失敗します。私は両方の資格情報を使用してSQL Workbench/Jを使用してクラスタに接続できます。私が以下を使用すると、接続に問題はありません。Redshift JDBC接続で、#文字のユーザーパスワードが

 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); 

私はSQLワークベンチ/ Jを使用して、両方のアカウントでクラスタにログオンしますが、いくつかのためにできる認証エラー

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"; 

を取得なぜ私のアプリケーションを介して接続することはできません。私が間違っていることに関するアイデアは?

+0

パスワードを変数に割り当ててから、そのパスワードをsetpropertyに渡すことはできますか。 –

+0

はい、私はそれをして、同じ結果を得ました。 #(おそらく推測)httpでの使用のために、おそらく#が何らかの問題を引き起こしていると考えて、URLEncoder.encode(パスワード、 "UTF8")を変更しました。 – user2843144

+0

申し訳ありませんが、私は正確な解決策を持っていない、私はjavaに知らされていない、ちょうど推測を取って、何が助けて、右ですか? CHR(35)を使ってみましたか? –

答えて

0

コメントするにはポイントが足りません。これがあなたの問題を解決するかどうかは分かりません。しかし、これを試してください:

props.setProperty( "パスワード"、 "superDouble #シークレット");

「&」と「#35;」の間にスペースを入れないと、

あるいは

props.setProperty( "パスワード"、 "superDouble%23Secret")。

+0

私は様々なエンコーディングとエスケープを試みましたが、それは何の効果もありませんでした。牛の上で私もあなたも試しましたが、悲しいことにそれは何の違いもありませんでした。私はそれがドライバの依存関係にあると考え始めている。私は#でパスワードがうまく使用できるアプリケーションと他のアプリケーションとの間の依存関係の違いを調べるつもりです。 – user2843144

+0

バマーが動作しませんでした。 :) –

0

姿を行く...これは本当に奇妙ですが、私は自分のアプリケーション

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) 

してJava 8の年の古いバージョンを使用する場合、問題が消えます。