Як мені ввійти в систему та автентифікуватись у Postgresql після нової інсталяції?


82

Зробив нову установку postgres 8.4 на монетний двір ubuntu. Як створити користувача для postgres та входу за допомогою psql?

Коли я набираю psql, це просто повідомляє мені

psql: FATAL: Ident authentication failed for user "my-ubuntu-username"

Перевірте цю публікацію в блозі .

Відповіді:


128

Є два методи, якими ви можете скористатися. Для обох потрібно створити користувача та базу даних.

За замовчуванням psql підключається до бази даних з тим самим іменем, що і користувач. Отже, існує домовленість, що це "база даних користувача" . І немає жодної причини порушувати цю умову, якщо вашому користувачеві потрібна лише одна база даних. Ми будемо використовувати mydatabaseяк приклад назви бази даних.

  1. Використовуючи createuser та createdb , ми можемо чітко вказати ім'я бази даних,

    $ sudo -u postgres createuser -s $USER
    $ createdb mydatabase
    $ psql -d mydatabase
    

    Можливо, вам слід це повністю пропустити і замість цього дозволити всім командам за замовчуванням ім’я користувача.

    $ sudo -u postgres createuser -s $USER
    $ createdb
    $ psql
    
  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. Зберігаючи цю функцію вимкненою, ви усуваєте ризик атаки грубої сили через названого суперкористувача. Приховування та затемнення імені суперкористувача має переваги.

Я розумію, що проблеми не виникають при використанні суперкористувача (-ів) БД замість не-суперкористувача. Наступним питанням для мене буде: що можна зробити, щоб це працювало, навіть користувач БД не є суперкористувачем.
Хартмут П.

У моєму випадку, після створення користувача за допомогою: $ sudo -u postgres createuser -s $ USER, мені потрібно було налаштувати пароль за допомогою: ALTER USER myuser WITH PASSWORD 'mypass'; (після входу в postgres за допомогою: sudo -u postgres psql)
negrotico19,

Як я повинен розуміти команду sudo -u postgres psql postgres? Я розумію, sudoозначає привілей root, -u postgresозначає увійти як користувач postgres, psqlце команда для підключення postgresql, але що postgresробить останнє ?
yuqli

42

за замовчуванням вам потрібно буде використовувати користувача postgres:

sudo -u postgres psql postgres

1
Або якщо ви не можете використовувати sudo, зробіть це: "su postgres", а потім "psql"
Даніель Кац

23

Помилка, яку ви отримуєте, пов’язана з тим, що ваш-ubuntu-username не є дійсним користувачем Postgres.

Вам потрібно сказати psql, яке ім’я користувача бази даних використовувати

psql -U postgres

Вам також може знадобитися вказати базу даних для підключення

psql -U postgres -d <dbname>

1
Я спробував "psql -U postgres", отримав ту ж помилку. Я ще не створив жодної бази даних, просто зробив нову установку.
user61734

psql -U myuser -d mydbпрацює ідеально, хоча psql -U myuserнамагається використовувати авторизований аналог, дякую!
inf3rno

5

Ви також можете підключитися до бази даних як "звичайний" користувач (не postgres):

postgres=# \connect opensim Opensim_Tester localhost;

Password for user Opensim_Tester:    

You are now connected to database "opensim" as user "Opensim_Tester" on host "localhost" at port "5432"

3

Якщо ваш клієнт бази даних з'єднується з TCP / IP, і ви встановили ідентифікацію ident у вашому pg_hba.conf, перевірте, чи встановлено та запущено identd. Це обов’язково, навіть якщо у вас є лише місцеві клієнти, які підключаються до "localhost".

Також майте на увазі, що в даний час для idd6 може бути ввімкнено IPv6 для Postgresql, щоб приймати клієнтів, які підключаються до localhost.


3

Основна різниця між входом в систему з користувачем postgres або будь-яким іншим користувачем, створеним нами, полягає в тому, що при використанні користувача postgres НЕ потрібно вказувати хоста за допомогою -h, а замість цього для іншого користувача if.

Увійти з користувачем postgres

$ psql -U postgres 

Створення та вхід з іншим користувачем

# CREATE ROLE usertest LOGIN PASSWORD 'pwtest';
# CREATE DATABASE dbtest WITH OWNER = usertest;
# SHOW port;
# \q

$ psql -h localhost -d dbtest -U usertest -p 5432

GL

Джерело

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