Как создать несистемного пользователя при установке Postgresql 8.4 с Rails 3.2.1 на Ubuntu 10.04 VM? - PullRequest
2 голосов
/ 07 февраля 2012

Сегодня я попытался установить Rails 3.2.1 с Postgresql 8.4 на мою локальную виртуальную машину Ubuntu 10.04. Я в основном следовал инструкциям http://www.mcbsys.com/techblog/2011/10/set-up-postgresql-for-rails-3-1/. Единственное, что я должен был сделать по-другому, это изменить строку в pg_hba.conf на "local postgres myapp trust", поскольку у пользователя по умолчанию postgres не было пароля, и мне пришлось создать пользователя postgresql с именем "login_name", который соответствовал бы моему Linux системное имя пользователя для входа в систему (назовем его «login_name» для примера), иначе я не смог бы использовать rake db: create для создания db.

Мой файл database.yml выглядел так:

development:
  adapter: postgresql
  encoding: unicode
  database: development_db
  pool: 5
  user: login_name
  password: some_random_password

У меня вопрос, почему я должен был создать имя пользователя, которое совпадает с моим системным логином, чтобы заставить это работать, и есть ли способ обойти это? Я, черт возьми, гуглил это и действительно не мог не нашел удовлетворительного ответа.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2012

Посмотрите на вашу конфигурацию PostgreSQL, там вы найдете два связанных файла:

  1. pg_hba.conf
  2. pg_ident.conf

pg_hba управляет механизмом обработки запроса авторизации, как правило, с такой записью:

local   all         all                          ident

идент означает, что все локальные / unix-сокет-соединения выполняются с использованием идентификатора пользователя системы.

Если у вас есть «не системный» пользователь, вам нужно создать для него карту в pg_ident.conf:

# MAP    OS-Name    DB-Name
myusers  user       user
myusers  user       dbuser

Измените файл pg_hba.conf следующим образом:

local    all      all      ident map=myusers

Аутентификация очень хорошо задокументирована в файлах конфигурации и в сети в Руководстве по администрированию PostgreSQL

0 голосов
/ 18 марта 2012

Имя, которое вы указываете в user: - это имя, используемое для входа в систему;вам не нужно, чтобы это было системным пользователем, если вы не хотите.Дело в том, что когда база данных инициализирована , ее владельцем (как правило) задается имя пользователя, которое выполнило db_init, что может варьироваться.Таким образом, имя пользователя хоста и имя пользователя в базе данных, как правило, слабо связаны.

С точки зрения безопасности рекомендуется запускать init_db от имени пользователя postgres, а затем явно GRANT разрешения или изменять владельца базы данных template1 (и пароль) набыть тем, кого вы хотите, чтобы ваши приложения использовали.Базы данных (точнее схемы) будут использовать настройки template1 при их создании.

Практически, на серверах, доступных через Интернет, мне нравится иметь (системное) имя пользователя с ограниченным доступом (мало или нет sudo), у которого то же имя , что и у пользователя базы данных.Установите имя и используйте его везде.Это упрощает копирование баз данных, настройку и т. Д.В противном случае вы получите ошибки «role foo not found».

Rails позволяет очень легко приступить к разработке, и это хорошо.Создание небезопасной производственной среды не должно быть слишком простым: -)

...