it-swarm.com.ru

SSL для соединения с PostgreSQL

Я пытаюсь подключиться к моей базе данных Heroku PostgreSQL и получаю ошибку SSL. У кого-нибудь есть идеи как включить SSL в строке подключения?

postgres://user:[email protected]:port/database;

Я искал его везде, но это, кажется, не очень популярная тема ... Кстати, я использую Nodejs и модуль node-pg с его методом с подключением к соединению:

pg.connect(connString, function(err, client, done) { /// Should work. });

Комментарии очень ценятся.

28
Stefan

Вы можете достичь этого следующим образом:

postgres://user:[email protected]:port/database?ssl=true
54
Jérôme Verstrynge

Вы также можете использовать этот код ниже при создании нового клиента из node-postgres :

var pg = require("pg");

var client = new pg.Client({
  user: "yourUser",
  password: "yourPass",
  database: "yourDatabase",
  port: 5432,
  Host: "Host.com",
  ssl: true
});

client.connect();

var query = client.query('CREATE TABLE people(id SERIAL PRIMARY KEY, name VARCHAR(100) not null)');

query.on('row', function(row) {
  console.log(row.name);
});

query.on('end', client.end.bind(client));

Надеюсь это поможет!

10
felipekm

С Google Cloud PG и pg-обещанием у меня возникла аналогичная потребность. Ошибка, которую я получил (используя ?ssl=true), была connection requires a valid client certificate.

SSL-соединение не задокументировано для pg-promise, но оно построено на node-postgres . Как объясняется в ссылке, параметр конфигурации ssl может быть больше, чем просто true:

const pgp = require('pg-promise')();
const fs = require('fs');

const connectionConf = {
    Host: 'myhost.com',
    port: 5432,
    database: 'specific_db_name',
    user: 'my_App_user',
    password: 'aSecretePass',
    ssl: {
        rejectUnauthorized : false,
        ca   : fs.readFileSync("server-ca.pem").toString(),
        key  : fs.readFileSync("client-key.pem").toString(),
        cert : fs.readFileSync("client-cert.pem").toString(),
  }

};
const new_db = pgp(connectionConf);
new_db.any('SELECT * FROM interesting_table_a LIMIT 10')
    .then(res => {console.log(res);})
    .catch(err => {console.error(err);})
    .then(() => {new_db.$pool.end()});
1
amotzg