Як налаштувати postgresql вперше?


197

Щойно я встановив postgresql, і я вказав пароль x під час встановлення. Коли я намагаюся зробити createdbі вказати будь-який пароль, я отримую повідомлення:

createdb: не вдалося підключитися до постгресів бази даних: FATAL: не вдалося встановити автентифікацію пароля для користувача

Те саме для createuser.

З чого слід почати? Чи можу я додати себе як користувач до бази даних?



4
Це дуже те саме, що це питання, яке було задано через рік. Але, я вважаю, на це є небезпечна первинна відповідь. Ви не повинні налаштовувати postgresкористувача. Це SUPostgreSQL, і він відкриває вас для атак на вхід проти нього. Створіть іншого суперкористувача та зарезервуйте заблоковані postgresдля адміністраторів UNIX з root.
Еван Керролл

Відповіді:


329

Інші відповіді мене не задовольняли повністю. Ось що працювало для postgresql-9.1 на Xubuntu 12.04.1 LTS.

  1. Підключіться до бази даних за замовчуванням за допомогою postgres користувачів:

    sudo -u postgres psql template1

  2. Встановіть пароль для postgres користувача, а потім вийдіть з psql (Ctrl-D):

    АЛЬТЕР КОРИСТУВАЧІ postgres із зашифрованим паролем 'xxxxxxx';

  3. Відредагуйте pg_hba.confфайл:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    і змініть "peer" на "md5" у рядку, що стосується postgres:

    локальні всі      postgres      peer md5

    Щоб знати, яку версію postgresql ви виконуєте, знайдіть папку версій під /etc/postgresql. Також ви можете використовувати Nano або інший редактор замість VIM.

  4. Перезавантажте базу даних:

    sudo /etc/init.d/postgresql перезапуск

    (Тут ви можете перевірити, чи це працювало psql -U postgres).

  5. Створіть користувача, який має те саме ім’я, що і ви (щоб знайти його, ви можете ввести whoami):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    Параметри повідомляють postgresql, щоб створити користувача, який може входити в систему, створювати бази даних, створювати нові ролі, є суперрусером і матиме зашифрований пароль. Дійсно важливими з них є -P -E, щоб вам було запропоновано ввести пароль, який буде зашифрований, і -d, щоб ви могли зробити createdb.

    Остерігайтеся паролів : він спочатку запитає у вас двічі новий пароль (для нового користувача), повторний, а потім один раз пароль після пошти (той, що вказаний на кроці 2).

  6. Знову відредагуйте pg_hba.confфайл (див. Крок 3 вище) та змініть "peer" на "md5" у рядку, що стосується "всіх" інших користувачів:

    локальні всі      всі      однолітки md5

  7. Перезапустіть (як на кроці 4) і переконайтеся, що ви можете увійти без -U postgres:

    psql шаблон1

    Зауважте, що якщо зробити це просто psql, це не вдасться, оскільки він спробує підключити вас до бази даних за замовчуванням, що має те саме ім’я, що і ви (тобто whoami). template1 - це база даних адміністратора, яка знаходиться тут із самого початку.

  8. Тепер createdb <dbname>слід працювати.


Ця процедура чудово працювала і на Ubuntu 13.10. Просто пам’ятайте судо на кроці 5 під час створення користувача.
Девід ден Харінг


2
як примітка, рядок у pg_hba.confповинен бути першим рядком, інакше його можна ігнорувати через інші правила (pgsql 9.3.5 у F21). Щоб зрозуміти це, мені знадобилося певний час, що коментувати та змінювати вже коментовані лінії для користувача postgresql не вийде просто.
тире

Я думаю, що це змінилося в PG 9.4, оскільки я маю лише local all all peerв пункті 3, в який я змінився md5. Гаразд?
Лео Леопольд Герц 준영

1
Будь ласка, оновіть відповідь до 2017 року! PostgreSQL 9.6 та UBUNTU 16 LTS ... Не простий спосіб ??
Пітер Краус

55

У Linux PostgresQL зазвичай налаштовано так, щоб дозволити користувачу root користувачеві ввійти як суперпользователь postgres postgresз оболонки (консолі або ssh).

$ psql -U postgres

Тоді ви просто створите нову базу даних, як завжди:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

Це повинно працювати, не торкаючись pg_hba.conf. Якщо ви хочете зробити це за допомогою якогось інструменту GUI по мережі - тоді вам доведеться возитися pg_hba.conf.


Я працюю над Windows, я побіг initdb для свого каталогу і маю файли конфігурації. Тепер створенийb працює, але коли я тестую psql, я отримую повідомлення ПОПЕРЕДЖЕННЯ: Кодова сторінка консолі (437) відрізняється від кодової сторінки Windows (1252) 8-бітні символи можуть працювати неправильно. Для детальної інформації див. Довідкову сторінку psql "Примітки для користувачів Windows". і жодна з команд не працює.
Rohit Banga

7
psql: FATAL: Peer authentication failed for user "postgres"навіть із судо.
Пітер Краус

Ідеальна відповідь, я не хотів торкатися файлів конфігурації, і це працювало бездоганно на PostgreSQL 10.10 через Ubuntu. Ви повинні мати змогу підключитися після цього psql -d mydatatabase -U myuser.
ranu

21

Це моє рішення:

su root
su postgres
psql

4
Це спрацює у багатьох випадках, оскільки на багатьох сайтах буде pg_hba.conf аутентифікувати користувача postgres db проти системного облікового запису postgres (метод peer). Однак успішний логін залежатиме від вмісту pg_hba.conf для будь-якого конкретного сайту.
Рід Сандберг

1
Працювали для мене. Я замінив перший рядок на sudo bash.
eje211

я не розумію, як це допомагає, .. з мого розуміння, це записується в root і postgres, і запускає psql. Що саме відбувається? Дякую!
olleh

20

Можна використовувати два способи. Обидва вимагають створення користувача та бази даних.

  1. Використовуючи createuser і createb ,

    $ sudo -u postgres createuser --superuser $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

Сторінка: postgresкористувач

Я пропоную НЕ змінювати postgresкористувача.

  1. Зазвичай це заблоковано з ОС. Ніхто не повинен "входити" в операційну систему як postgres. Ви повинні мати root, щоб отримати автентифікацію як postgres.
  2. Зазвичай це не захищений паролем і делегує операційній системі хосту. Це гарна річ . Зазвичай це означає, що для входу в систему, postgresщо є еквівалентом PostgreSQL SQL Server SA, ви повинні мати доступ для запису до базових файлів даних. А це означає, що ти можеш нормально завдати шкоди в будь-якому випадку.
  3. Зберігаючи цю функцію відключеною, ви знімаєте ризик грубої атаки через названого суперкористувача. Приховування та затемнення імені суперпользователя має переваги.

При першому методі користувач не має жодних пільг. Я в кінцевому підсумку скористався цією замість першої команди:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert

@FabienSnauwaert -sробить користувача суперпользователем .
Еван Керролл

16

EDIT: Увага: Будь ласка, прочитайте відповідь , відправлений Evan Carroll . Здається, що це рішення не є безпечним і не рекомендується.

Це працювало для мене в стандартній установці 64 біт Ubuntu 14.04 .

Я дотримувався вказівок із невеликими модифікаціями, які знайшов у http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Встановіть postgreSQL (якщо його ще немає у вашій машині):

sudo apt-get install postgresql

  1. Запустіть psql за допомогою користувача postgres

sudo –u postgres psql postgres

  1. Встановіть новий пароль для користувача postgres:

\password postgres

  1. Вихід psql

\q

  1. Редагувати /etc/postgresql/9.3/main/pg_hba.conf та змінити:

#Database administrative login by Unix domain socket local all postgres peer

До:

#Database administrative login by Unix domain socket local all postgres md5

  1. Перезавантажте postgreSQL:

sudo service postgresql restart

  1. Створіть нову базу даних

sudo –u postgres createdb mytestdb

  1. Запустіть psql знову з користувачем postgres:

psql –U postgres –W

  1. Перерахуйте існуючі бази даних (ваша нова база даних має бути зараз):

\l


1
Я відмовився, бо думаю, що активізувати postgresкористувача - це погана ідея. stackoverflow.com/a/41604969/124486
Еван Керролл

4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`

3

Можливо, вам потрібно буде оновити pg_hba.confфайл. Цей файл керує тим, що користувачі можуть входити з IP-адреси. Я думаю, що користувач postgres за замовчуванням досить заблокований.


2
Для RHEL6.4 та postgres 8.4 файл знаходився в /var/lib/pgsql/data/pg_hba.conf. Змініть identна trustна hostlocalякщо ви використовуєте ssh).
DavidG

3

Якщо ви працюєте з macOS таким, як я, у вас може не бути користувача postgres.

При спробі запуску sudo -u postgres psqlя отримував помилкуsudo: unknown user: postgres

На щастя, є виконувані файли, які надає postgres.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Тоді я міг отримати доступ psqlбез проблем.

psql
psql (10.2)
Type "help" for help.

nick=#

Якщо ви створюєте новий екземпляр postgres з нуля, ось кроки, які я вчинив. Я використовував порт за замовчуванням, щоб я міг запустити два екземпляри.

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Потім я відредагував /var/postgres/var-10-local/postgresql.confмій уподобаний порт, 5433.

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

Готово!


2

У MacOS я дотримувався наведених нижче кроків, щоб змусити його працювати.

Вперше після встановлення отримайте ім’я користувача системи.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Тепер, коли ви увійшли в систему, ви можете створити БД.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT

0

Просто перейдіть до каталогу вашої установки та виконайте цей файл "pg_env.bat", після чого перейдіть у папку bin та виконайте pgAdmin.exe. Це повинно працювати без сумніву!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.