Может ли ActiveRecord подключаться к PostgreSQL удаленно и защищать пароль БД? - PullRequest
4 голосов
/ 16 апреля 2009

У меня есть PostgreSQL DB на удаленном VPS-сервере (CentOS 5), и я хотел бы подключиться, чтобы к нему подключилось приложение Rails с моего локального ноутбука Mac. На моем ноутбуке установлен адаптер ActiveRecord PostgreSQL - postgres (0.7.9.2008.01.28).

Я прочитал в PostgreSQL документах :

Методы аутентификации на основе пароля: md5, crypt и password. Эти методы работают аналогично, за исключением того, что пароль передается по соединению: соответственно, MD5-хэширование, шифрование и шифрование.

[...]

Если вас вообще беспокоят атаки с "перехватом" пароля, тогда предпочтительнее использовать md5 ... Следует избегать простого пароля, особенно для соединений через открытый Интернет (если только вы не используете SSL, SSH или другую оболочку безопасности связи вокруг соединения ).

В стандартном Rails database.yml будет иметь что-то подобное для локального соединения ...

development:
  adapter: postgresql
  database: journalapp_development
  username: xxx
  password: yyy
  host: localhost

Но там нет ничего о методе аутентификации, который обсуждается в документации PostgreSQL. Есть ли вариант иметь что-то вроде "auth_method: md5"?

Ответы [ 3 ]

8 голосов
/ 16 апреля 2009

Независимо от того, разрешает ли Postgres эту функцию, вы можете включить безопасное соединение с удаленной базой данных с помощью SSH-туннелирования. Вот бесплатная вставка из переполнения стека из веб-документов:

Сначала убедитесь, что сервер SSH работает правильно на той же машине в качестве сервера PostgreSQL и что вы можете войти используя ssh от имени пользователя. Тогда вы можете установить безопасный туннель с такой командой из клиентская машина:

ssh -L 3333: foo.com: 5432 joe@foo.com Первое число в аргументе -L, 3333, номер порта вашего конца туннеля; это можно выбрать свободно. Второе число, 5432, является удаленный конец туннеля: порт номер вашего сервера. Имя или IP-адрес между номерами портов хост с сервером базы данных Вы собираетесь подключиться к. С целью подключиться к серверу базы данных используя этот туннель, вы подключаетесь к порту 3333 на локальной машине:

psql -h localhost -p 3333 postgres To сервер базы данных будет выглядеть как будто вы действительно пользователь joe@foo.com и он будет использовать все процедура аутентификации была настроен для подключения от этого пользователь и хост. Обратите внимание, что сервер не будет думать, что связь SSL-шифруется, так как на самом деле это не так зашифрован между сервером SSH и сервер PostgreSQL. Это не должно создавать дополнительный риск для безопасности так как они на одной машине.

В случае, если вам нужно больше, вы можете найти его в Интернете, выполнив поиск «туннель SSL» или «туннель SSL postgres». Вот сайт Postgres, где я получил вышеупомянутое:

http://www.postgresql.org/docs/current/static/ssh-tunnels.html

Чтобы подвести итог для Rails, вы должны сделать следующее:

1) В окне терминала выполните первую команду ssh, указанную выше, чтобы установить туннель.

2) Установите реквизиты базы данных так:

development:
  adapter: postgresql
  database: journalapp_development
  username: xxx
  password: yyy
  host: localhost
  port: 3333
1 голос
/ 16 апреля 2009

Я посмотрел онлайн, и, похоже, нет варианта для того, что вы ищете, и на самом деле клиентская библиотека, libpq тоже не упоминает об этом.

Я предполагаю, что об этом договариваются от вашего имени в libpq. В любом случае, md5, вероятно, будет методом аутентификации по умолчанию.

0 голосов
/ 16 апреля 2009

Если вы подключаетесь к серверу PostgreSQL по небезопасному каналу, вам необходимо для шифрования связи с помощью SSL или (как объяснил runako) SSH Tunneling .

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