Amazon EC2でデータベースを使っているプログラムがある時から動かなくなった。
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
???
なんだろう。
目次
MySQLNonTransientConnectionException: Public Key Retrieval is not allowedの発生原因
MySQLにコマンドから接続すると、何らかの接続状態が出来るらしい。
その状態で、プログラムからMySQLに接続するのは問題がない。
ただし、システムを再起動後、MySQLにコマンド接続せずに、プログラムからMySQLに接続した場合、MySQLNonTransientConnectionExceptionが発生する。
プログラムからは接続できないよって言っているんだと思う。
Public Key Retrieval is not allowed の解決策
このあたりに解決策が書いてありました。
You should add client option to your mysql-connector allowPublicKeyRetrieval=true to allow the client to automatically request the public key from the server. Note that AllowPublicKeyRetrieval=True could allow a malicious proxy to perform a MITM attack to get the plaintext password, so it is False by default and must be explicitly enabled.
・https://mysql-net.github.io/MySqlConnector/connection-options/
you could also try adding useSSL=false when you use it for testing/develop purposes
example:
jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false
なるほど、JDBCドライバのプロパティで「allowPublicKeyRetrieval」をtrue、「useSSL」をfalseにするとよいらしい。
具体的には、 データベース接続文字列に「allowPublicKeyRetrieval=true&useSSL=false」を追加します。
例として
CONNECTION_URL = jdbc:mysql://localhost:3306/db_name?allowPublicKeyRetrieval=true&useSSL=false
コメント