私は比較的簡単なタスクを実行しようとしています:Herokuデータベースに接続したいです。データベースを作成し、Herokuサイトから資格情報を発行しました。ただし、ターミナル「heroku」コマンドラインクライアントのほかにanythingを使用してこのデータベースに接続しようとすると、致命的なエラーが発生するか、エラーを接続できません。
Herokuターミナルアプリケーションの外部と接続しようとした2つのツールは、NavicatとIntelliJです。
データベースに接続しようとするとNavicatで表示されるエラーは次のとおりです。
could not connect to server: Host is down
Is the server running on Host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting
TCP/IP connections on port 5432?
私の接続設定は次のとおりです。
接続名 Heroku Devテスト
ホスト名/ IPアドレス ec2-107-21-112-215.compute-1.amazonaws.com
ポート 5432
Navicatはそのホスト名への接続を試みていないようです。
完全な資格情報を使用してIntelliJに接続しようとすると、次のエラーが表示されます。
Java.sql.SQLException: FATAL: no pg_hba.conf entry for Host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off
繰り返しになりますが、私はHerokuアプリケーションがWebサイトのデータベースにアクセスするときに提供する資格情報を使用しています。
以前にこのHeroku接続の問題に遭遇した人はいますか?
Herokuは、外部ソースから接続するために次の情報を提供します。
https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress
2番目のエラーメッセージは、PostgreSQLが作成しようとしている接続を受け入れるように構成されていないことを示しています。 Herokuが提供する情報を考えると、SSLで接続しているのではないでしょう。接続でそれを有効にしてみてください。
NavicatでSSLを使用する手順は次のとおりです。 http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html 。
これは、SSLを使用するようにIntellijを構成するのに役立つ場合があります。 https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-Java#connecting-to-a-database -リモート 。
FATAL: no pg_hba.conf entry for Host
エラーメッセージの問題もありました。
JDBC文字列に&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
を追加して、Heroku Postgresデータベースへの接続の問題を解決しました。
例
jdbc:postgresql://Host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
SSLオプションが必要になるのは、Postgresデータベース(デフォルト)でSSLが有効になっている場合のみです。
ヒント
データベース接続プロパティを確認する場合は、 Heroku Toolbelt を指定して次のコマンドを実行するだけです:heroku pg:info --app your-heroko-appname
(端末でこのコマンドを実行するためにPostgresがインストールされていることを確認してください)
pg:info
コマンドは、sslmode
がrequire
に設定されていることも通知します。
データベース接続をテストするには、ソリューションを確認するために使用していたツールである SQL Power Architect をお勧めします。
これに遭遇するかもしれない他の人を助けたかった。コマンドラインではなく個別のフィールドにユーザー名とパスワードを指定する場合は、?を使用する必要があります。データベース名とssl = trueの間で、最初の&
jdbc:postgresql://Host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
これが、最終的にSQL Power Architectを使用してPostgreSQLデータベースに接続できるコマンドラインです
Spring Bootを使用しており、 DATABASE_URL 環境プロパティ(システムプロパティではない)を通じて構成を提供している場合は、プロパティにサフィックスを追加できます。
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
config beanにわずかな変更を加えてパススルーしました。
@Bean
public BasicDataSource dataSource() throws URISyntaxException {
URI dbUri = new URI(System.getenv("DATABASE_URL"));
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
StringBuilder dbUrl = new StringBuilder(128);
dbUrl.append("jdbc:postgresql://")
.append(dbUri.getHost()).append(":")
.append(dbUri.getPort())
.append(dbUri.getPath());
String query = dbUri.getQuery();
if (null != query && !query.isEmpty()) {
dbUrl.append("?").append(query);
}
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(dbUrl.toString());
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
return basicDataSource;
}
環境設定変数 'PGSSLMODE'をHerokuのWebインターフェイスまたはCLIを介して 'require'に設定することを検討できます。
ケース:Postgres dBはHerokuアドオンとして設定され、Heroku Dynoのアプリに添付されています。
Herokuの instructions は、デフォルトでStandard-0で始まる任意のdB層に必要ですが、残念ながらSSLをアクティブにする方法については言及していません。
Herokuの指示にあるすべてのpg-copyまたはpg-upgradeステップ(推奨されるアプローチはPostgresのバージョンによって異なります)に従ってください。ただし、古いデータベースを廃止する前に(該当する場合)-PGSSLMODE環境変数を追加します。
指示は、新しいデータベースを昇格する方法を十分にカバーしているため(したがって、DATABASE_URLを設定します)、それらへの変更/修正は必要ありません。
Postgresql.confファイルで次の行を追加または編集します。
listen_addresses = '*'
Pg_hba.confの最初の行として次の行を追加します。暗号化されたパスワードを使用して、すべてのユーザーのすべてのデータベースにアクセスできます。
TYPE DATABASE USER CIDR-ADDRESS METHOD
Host all all 0.0.0.0/0 md5
Postgresqlサービスを再起動します。
net stop postgresql-9.0 & net start postgresql-9.0
(バージョンはインストールに基づいている必要があります)-Windowsの場合(管理者としてcmdを実行します)。
Sudo service start postgresql -- On linux (or according to your linux distribution.)
Node.jsを使用していて、Herokuアプリのknex移行を実行しようとしていました。接続URLに?sslmode=require
を追加しようとしましたが、機能しませんでした。代わりに?ssl=true
を追加しましたが、今では完全に機能します。
動作するHeroku PostgreSQL接続URLの例を次に示します。
postgres://user:[email protected]:port/databasename?ssl=true