Ruby on Rails | Postgresql игнорирует мой пароль в database.yml - PullRequest
5 голосов
/ 05 апреля 2011

Начинаю разрабатывать мое первое приложение Ruby on Rails с postgresql в Ubuntu. Я создал пользователя postgresql с паролем. В файле database.yml я добавляю имя пользователя и пароль postgresql.

Всякий раз, когда я запускаю rake db: migrate, он выполняется без ошибок, независимо от того, на какой пароль я изменяю в database.yml - даже если поле пароля пустое. Если я изменяю имя пользователя, я получаю ошибку аутентификации.

Как заставить базу данных Ruby on Rails использовать пароль?

ТИА

Ответы [ 2 ]

14 голосов
/ 05 апреля 2011

Вы, вероятно, используете ident или даже trust аутентификацию.Краткий обзор самых распространенных методов аутентификации:

  • trust - Вы можете войти в систему, несмотря ни на что.
  • ident - Вы можете войти в систему, если ваше имя пользователя UNIXсовпадает с именем пользователя PostgreSQL.
  • md5 - Вы можете войти в систему, если ваш пароль (зашифрованный с помощью md5) правильный.

Редактировать: В PostgreSQL 9.0 появился метод аутентификации peer.Исходя из того, что я понял, ident и peer имеют одну и ту же цель - ваш логин определяется именем пользователя вашей операционной системы, но ident обращается к идент-серверу, прослушивающему порт 113, в то время как peer ищет ваши учетные данныесистемный вызов.См. http://www.postgresql.org/docs/9.1/static/auth-methods.html#AUTH-IDENT

Найдите файл pg_hba.conf и посмотрите, сможете ли вы найти что-то похожее на это:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

Когда вы попытаетесь подключиться,PostgreSQL проходит через эту строку построчно.Если тип соединения (например, local, host), база данных, пользователь (пользователь базы данных, а не системный пользователь) и адрес совпадают, будет использоваться указанный метод аутентификации.

Если вы хотитечтобы запросить пароль для доступа к вашему собственному пользователю PostgreSQL, вы могли бы добавить такую ​​строку в top перед строкой local all all ident:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   mydbname    myusername                        md5

Обязательно перезапустите PostgreSQL после того, какменяется pg_hba.conf.

1 голос
/ 05 апреля 2011

Я только использовал PostgreSQL, но знаю, что у него есть функция sameuser.Если имя пользователя системы совпадает с именем пользователя базы данных, пароль не требуется.Итак, если я вошел на этот компьютер с именем пользователя «matchu» и в PostgreSQL есть пользователь с именем «matchu», я мог бы войти в систему этого пользователя базы данных без дополнительной аутентификации.здесь?

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