Адаптер рельсов Postgres поддерживает SSL? - PullRequest
9 голосов
/ 05 января 2010

Я пытаюсь настроить приложение rails для удаленного подключения к базе данных postgres. Я заметил, что адаптеры подключения для mysql имеют параметры, которые задают необходимую информацию для настройки подключения ssl, но нет эквивалентных параметров для адаптера postgres / pg.

после поисков, я тоже ничего не смог найти (только подключение через ssh туннель).

так просто, пытается заставить адаптер rag postgres подключаться через ssl в тупик?

спасибо. любая помощь или направление приветствуется.

-h

Ответы [ 5 ]

3 голосов
/ 14 ноября 2012

В конце 2012 года, похоже, все изменилось. Хотя документация по-прежнему недостаточна, кажется, что гем pg автоматически согласовывает SSL, а драйверы jdbc можно принудительно использовать SSL.

Мое приложение представляет собой гибридное приложение MRI-jRuby, которое обращается к heroku-postgres, облачному серверу postgresql, для которого требуется SSL.

# Gemfile.lock
pg (0.14.1)

activerecord-jdbc-adapter (1.2.2.1)
activerecord-jdbcpostgresql-adapter (1.2.2.1)
jdbc-postgres (9.1.901)

Похоже, что pg gem автоматически согласовывает SSL. Однако адаптер JDBC этого не сделал. МРТ связана с типичным database.yml (без упоминания о ssl), но JDBC скинул:

(FATAL: no pg_hba.conf entry for host "xx.xx.xx.xx", user "username", database "database", SSL off)

В конце концов я попытался указать детали соединения в формате JDBC-URL, и соединение установилось успешно:

# jruby database.yml
production:
  adapter: jdbcpostgresql
  url: jdbc:postgresql://host/database?user=user&password=password&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

(sslfactory может не понадобиться для всех настроек)

2 голосов
/ 09 апреля 2014

Ответ для Rails 4 с использованием JRuby

Я использую Rails 4 с JRuby 1.7.8 (1.9.3p392) и activerecord-jdbcpostgresql-адаптер 1.3.4

Это решение позволит вашему приложению Rails подключаться к серверу PostgreSQL с использованием SSL. В этом решении я использую NonValidatingFactory, которая должна использоваться только для тестирования. Для безопасной настройки производства вам необходимо настроить trustStore, который пока выходит за рамки моего опыта.

Шаги по настройке Postgres SSL

Добавить драгоценный камень в gemfile

    gem 'activerecord-jdbcpostgresql-adapter', platform: :jruby 

Добавить параметры в ваш database.yml (для разработки)

    sslmode: require
    properties: { sslfactory: 'org.postgresql.ssl.NonValidatingFactory' }

Для производства вам необходимо создать хранилище и удалить «NonValidatingFactor» (кратко описано в connection_methods.rb)

    # JRuby/JVM needs to be started with :
    #  -Djavax.net.ssl.trustStore=mystore -Djavax.net.ssl.trustStorePassword=...
    # or a non-validating connection might be used (for testing) :
    #  :sslfactory = 'org.postgresql.ssl.NonValidatingFactory'

Справочная информация

Адаптер Postgres построен на JDBC. Самой полезной информацией, которую я нашел, был интерфейс между Ruby и Java и действующая документация JDBC.

Интерфейс Ruby to Java в адаптере: https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql/connection_methods.rb

Страница подключения JDBC Postgres: http://jdbc.postgresql.org/documentation/80/connect.html

Пример базы данных.yml

development:

    adapter: postgresql
    encoding: unicode
    database: SSL_Test
    pool: 5
    timeout: 5000
    username: postgres
    password: YourPassword!
    sslmode: require
    properties: { sslfactory: 'org.postgresql.ssl.NonValidatingFactory' }
    host: www.example.com
    port: 5432

Предостережения

Это может работать с другими конфигурациями и версиями. Если у вас все получится, добавьте комментарий, чтобы другие знали, что это работает в вашей конкретной конфигурации. Спасибо.

1 голос
/ 15 марта 2014

Я пришел к этому после изучения того же вопроса, что и OP, и не был полностью удовлетворен ни одним из ответов, потому что я также использую гем pg, и он единственный, который достаточно поддерживается для Rails 2.X.

После некоторого исследования моим коллегой он понял следующее:

В Rails 4 вы можете просто указать хеш переменных для этого (http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter.html), но он не существует в Rails 2 (http://api.rubyonrails.org/v2.3.8/classes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter.html)

)

Из-за этого мы можем просто удалить типичный конфиг, добавить все в аргумент базы данных и назвать его днем ​​(так же, как оригинальный ответ whitehat101, опубликованный с адаптером jdbc)

Ниже приведена реализация, которую вы использовали бы для подключения к удаленному серверу и использования требуемого sslmode.

development:
    adapter: postgresql
    database: "host=db-serv dbname=admin_production user=XX password=XX sslmode=verify-ca"
1 голос
/ 16 января 2010

читая API rubyonrails PostgreSQLAdapter, я бы просто ответил на ваш вопрос НЕТ http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter.html

но: существует три разных гема postgresql:

  1. postgres (написано на C, прекращено)
  2. pg (написано на C, лучше поддерживается)
  3. postgres-pr (реализация в чистом ruby, поддерживается активно)

Похоже, что гем "pg" разрешает SSL-соединение (по крайней мере, при взгляде на источники). кажется, что это нигде не задокументировано, но похоже, что это работает (Redmine подтверждает это здесь: http://www.redmine.org/wiki/1/RedmineInstall).

поэтому я предлагаю вам взглянуть на то, как database.yml сконфигурирован с MYSQL, а также попробовать это с гемом pg. также убедитесь, что вы скомпилировали postgresql с поддержкой SSL. см http://www.williambharding.com/blog/rails/guide-to-setup-rails-with-mysql-ssl/

Если все это не работает, возможно, вы можете попытаться «пропатчить» соединение с базой данных через rails и добавить connection_parameters в соединение ssl. Вот информация из источника от ruby-pg:

<var>sslmode=mode</var> : how to treat SSL(string) (one of disable, allow, prefer, require)

пожалуйста, взгляните также на другое обсуждение stackoverflow по этой теме: Может ли ActiveRecord подключаться к PostgreSQL удаленно и защищать пароль БД?

0 голосов
/ 13 августа 2016

Rails <3.2 на самом деле не передаст конфиг database.yml ssl в гем PG. Я надеюсь, что моя боль спасет вас от часов отладки. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...