Pokud se po instalaci PostgreSQL pokusíte přihlásit pomocí psql, dostanete pravděpodobně chybu Peer authentication failed for user „postgres“
psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
Oprava: Zkoušel jsem instalaci PostgreSQL verze 10 na Linux Mint a bylo možné se přihlási uživatelem postgres tímto způsobem:
sudo su – postgres (přepnutí na uživatel postgres)
psql -U postgres
V Ubuntu je ve výchozím nastavení vypnuto přihlašování pro uživatele postgres. Do psql se můžeme připojit pomocí příkazu sudo
sudo -u postgres psql postgres
Vytvoříme nového uživatele (roli) s heslem password a schopností vytvářet databáze.
create user myuser password 'password' createdb;
A pomocí příkazu \q vyskočíme z psql. Přihlášení zkusíme znovu, nyní pro uživatele myuser.
psql -U myuser psql: FATAL: Peer authentication failed for user "myuser"
Peer authentication funguje dle dokumentace následovně. Z operačního systému se získá uživatelské jméno a to se považuje za povoleného databázové uživatele. V operačním systému musí existovat uživatel stejného jména jako v databázi a musíme být pod daným uživatelem přihlášeni. V tomto případě ale nemáme v systému uživatele myuser. Takže ho vytvoříme.
sudo adduser myuser Adding user `myuser' ... Adding new group `myuser' (1001) ... Adding new user `myuser' (1001) with group `myuser' ... Creating home directory `/home/myuser' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for myuser Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Přihlásím se jako uživate myuser
su - myuser Password:
Nyní již přihlášení funguje (připojuji se k databázi postgres)
psql -U myuser -d postgres
Nevýhodou je, že kdokoliv se přihlásí jako myuser, bude mít rovnou přístup do databáze. Mnohem bezpečnější je mít účet jen pro přihlášení k databázi, ale bez možnosti přihlášení pod tímto účtem. Daný účet lze zamknout
sudo passwd -l myuser
Nyní se k danému účtu nelze přihlásit, ale dá se do něj přeponout pomocí
sudo su - myuser
Pokud se do něj přepnete, funguje přihlášení do databáze
psql -U myuser -d postgres
Dalším řešením je přidání hesla uživateli postgres a změna konfiguračního souboru pg_hba.conf (/etc/postgresql/9.5/main/).
Změna hesla
sudo -u postgres psql postgres psql (9.5.12) Type "help" for help. postgres=# alter user postgres with encrypted password 'password'; ALTER ROLE postgres=# \q
Změna konfiguračního souboru (peer změnit na md5)
local all postgres md5
Restart postresql
sudo service postgresql
Nyní již přihlášení funguje
psql -U postgres -d postgres Password for user postgres: psql (9.5.12) Type "help" for help. postgres=#