web-dev-qa-db-ja.com

Herokuデータベース接続プロパティ

私は比較的簡単なタスクを実行しようとしています: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接続の問題に遭遇した人はいますか?

41
meoww-

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 -リモート

55
jpmc26

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コマンドは、sslmoderequireに設定されていることも通知します。

データベース接続をテストするには、ソリューションを確認するために使用していたツールである SQL Power Architect をお勧めします。

59

IntelliJ->データソースとドライバー

ホスト、データベース、およびユーザーの詳細をGeneralタブの下に構成したら、Advancedタブに切り替えて、次を追加したことを確認します。

  • ssl = true
  • sslfactory = org.postgresql.ssl.NonValidatingFactory
  • sslmode = require

enter image description here

19
user1607261

これに遭遇するかもしれない他の人を助けたかった。コマンドラインではなく個別のフィールドにユーザー名とパスワードを指定する場合は、?を使用する必要があります。データベース名とssl = trueの間で、最初の&

jdbc:postgresql://Host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

これが、最終的にSQL Power Architectを使用してPostgreSQLデータベースに接続できるコマンドラインです

11
Eric Harris

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;
}
9
Glenn

環境設定変数 '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を設定します)、それらへの変更/修正は必要ありません

9
tabish89

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.) 
1

Node.jsを使用していて、Herokuアプリのknex移行を実行しようとしていました。接続URLに?sslmode=requireを追加しようとしましたが、機能しませんでした。代わりに?ssl=trueを追加しましたが、今では完全に機能します。

動作するHeroku PostgreSQL接続URLの例を次に示します。

postgres://user:[email protected]:port/databasename?ssl=true

1
user3344977