Чем объясняются разные инструкции по установке пароля для postgres?

Я слежу за этим сообщением в блоге http://hendrelouw73.wordpress.com/2012/11/14/how-to-install-postgresql-9-1-on-ubuntu-12-10-linux/ чтобы установить postgres на Ubuntu, Это шаги два и три.

STEP 2: INSTALL POSTGRESQL ON YOUR SYSTEM


sudo apt-get update
sudo apt-get install postgresql-9.1

STEP 3: CONFIGURE YOUR POSTGRESQL PASSWORD

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

Тем не менее, я также смотрю на RailsCast, который устанавливает postgres на Ubuntu. Во-первых, Райан Бейтс делает это

root@li349-144:~# apt-get install postgresql libpq-dev

а затем он устанавливает пароль, подобный этому корню @li349-144:~# sudo -u postgres psql

terminal
postgres=# \password
Enter new password: 
Enter it again:

Итак, одно большое отличие заключается в том, как настроен пароль, в том, что Railscast не затрагивает то, что называется template описано в шаге 3 поста блога

Глядя на инструкции по установке postgres на ubuntu https://help.ubuntu.com/community/PostgreSQL, он похож на Railscasts в том, что в нем нет этой ссылки на template создать пользователя

Можете ли вы объяснить разницу и стоит ли мне делать этот шаг? ШАГ 3: НАСТРОЙТЕ ПАРОЛЬ POSTGRESQL

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

2 ответа

Решение

Между этими двумя методами нет реальной разницы. Роли пользователя / логина и пароли хранятся на всем сервере, а не на всей базе данных. Другими словами, пароль предназначен для подключения к серверу, поэтому не имеет значения, к какой базе данных вы подключаетесь. Команда

sudo -u postgres psql template1 (Спасибо Даниэлю Верите за комментарий)

по сути, говорит системе переключаться на пользовательские postgres и запускать клиент CLI (psql) для подключения к серверу и использования базы данных "template1". Если имя пользователя и / или базы данных не указано, то psql пытается подключиться как текущий пользователь и "использовать" базу данных с тем же именем, что и текущий пользователь (в данном случае postgres - что делает параметр "template" излишним)

Это то, что вышеуказанная команда делает шаг за шагом:

sudo -u postgres Это переключается на пользователя postgres. Обратите внимание на отсутствие параметра -p в sudo. Это важно, потому что "пользователь user postgres" (у которого нет пароля, и его единственная цель - владеть запущенными процессами сервера) отличается от "пользователя базы данных postgres" (который является пользователем root или, скорее, администратором базы данных и абсолютно нужен пароль.)

psql --username=postgres --database=template1 Это подключается к localhost, используя имя пользователя базы данных postgres и базу данных template1.

Для вашей цели эта строка может быть сокращена до

sudo -u postgres psql

ALTER USER postgres with encrypted password 'your_password';

Это изменится на пользователя postgres и подключится к localhost как пользователь postgres к базе данных с именем postgres, а затем установит пароль.

Если вам нужны дополнительные разъяснения, пожалуйста, спросите. Я буду рад помочь.

Краткое примечание по шаблонным базам данных. При создании новой базы данных postgres использует шаблон с именем template1, Это что-то вроде файла скелета, используемого для установки пользовательских настроек по умолчанию при создании учетных записей пользователей в Linux. Как правило, dba изменяет его, чтобы убедиться, что определенные инструменты и поведение применяются на всем сервере. Но почему 1 Вы можете спросить. Ну, есть еще одна база данных шаблонов с именем template0 и это защищенная копия "чистого листа" template1 на всякий случай с этим что-то идет на юг. Вот вики-страница, описывающая такой сценарий.

Не делайте этого..

terminal
postgres=# \password
Enter new password: 
Enter it again:

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

Настройка PostgreSQL

Это копия моего оригинального поста здесь

Существует два способа настройки. Оба требуют создания пользователя и базы данных.

  1. Используя createuser и creatb,

    $ sudo -u postgres createuser -s $USER
    $ createdb mydatabase
    $ psql -d mydatabase
    
  2. Использование команд администрирования SQL и соединение с паролем через TCP

    $ sudo -u postgres psql postgres
    

    И затем в оболочке PSQL

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;
    

    Тогда вы можете войти,

    $ psql -h localhost -d mydatabase -U myuser -p <port>
    

    Если вы не знаете порт, вы всегда можете получить его, выполнив следующую команду, так как postgres пользователь,

    SHOW port;
    

    Или же,


    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Sidenote: postgres пользователь

Я предлагаю НЕ изменять postgres пользователь.

  1. Обычно он заблокирован от ОС. Никто не должен "входить" в операционную систему как postgres, Вы должны иметь root для аутентификации как postgres,
  2. Обычно он не защищен паролем и делегируется операционной системе хоста. Это хорошая вещь. Это обычно означает для того, чтобы войти как postgres который является PostgreSQL эквивалентом SQL Server SAВы должны иметь доступ на запись к основным файлам данных. И это означает, что вы все равно можете разрушить хаос.
  3. Если этот параметр отключен, вы устраняете риск атаки методом грубой силы через именованного суперпользователя. Сокрытие и скрытие имени суперпользователя имеет свои преимущества.
Другие вопросы по тегам