Come configurare postgresql per la prima volta?


197

Ho appena installato postgresql e ho specificato la password x durante l'installazione. Quando provo a fare createdbe specificare una password ricevo il messaggio:

createb: impossibile connettersi al database postgres: FATAL: autenticazione password non riuscita per l'utente

Lo stesso per createuser.

Come dovrei iniziare? Posso aggiungermi come utente al database?



4
Questo è molto simile a questa domanda che è stata posta un anno dopo. Ma credo che questo abbia una risposta primaria pericolosa . Si dovrebbe non essere la creazione di l' postgresutente. È SUdi PostgreSQL e ti apre agli attacchi di accesso contro di esso. Crea un altro superutente e riserva il blocco postgresper gli amministratori UNIX con root.
Evan Carroll,

Risposte:


329

Le altre risposte non mi soddisfacevano completamente. Ecco cosa ha funzionato per postgresql-9.1 su Xubuntu 12.04.1 LTS.

  1. Connettiti al database predefinito con postgres utente:

    sudo -u postgres psql template1

  2. Imposta la password per postgres utente, quindi esci da psql (Ctrl-D):

    Postgres ALTER USER con password crittografata 'xxxxxxx';

  3. Modifica il pg_hba.conffile:

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

    e cambia "peer" in "md5" sulla riga relativa a postgres:

    locale tutti i      postgres      peer md5

    Per sapere quale versione di postgresql stai utilizzando, cerca la cartella delle versioni in /etc/postgresql. Inoltre, puoi utilizzare Nano o altri editor invece di VIM.

  4. Riavvia il database:

    sudo /etc/init.d/postgresql restart

    (Qui puoi verificare se ha funzionato psql -U postgres).

  5. Crea un utente con lo stesso nome (per trovarlo, puoi digitare whoami):

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

    Le opzioni dicono a postgresql di creare un utente che può accedere, creare database, creare nuovi ruoli, è un superutente e avrà una password crittografata. Quelli veramente importanti sono -P -E, quindi ti viene chiesto di digitare la password che sarà crittografata, e -d in modo da poter fare un createdb.

    Attenzione alle password : ti chiederà prima due volte la nuova password (per il nuovo utente), ripetuta, quindi una volta la password postgres (quella specificata al passaggio 2).

  6. Ancora una volta, modifica il pg_hba.conffile (vedi il passaggio 3 sopra) e cambia "peer" in "md5" sulla riga relativa a "tutti" gli altri utenti:

    locale tutto      tutto      peer md5

  7. Riavvia (come nel passaggio 4) e verifica di poter accedere senza -U postgres:

    modello psql 1

    Nota che se fai un semplice psql, fallirà poiché proverà a connetterti a un database predefinito con lo stesso nome di te (es whoami.). template1 è il database di amministrazione che è qui dall'inizio.

  8. Ora createdb <dbname>dovrebbe funzionare.


Questa procedura ha funzionato benissimo anche su Ubuntu 13.10. Ricorda solo sudo nel passaggio 5 durante la creazione di un utente.
David den Haring,

2
Ha funzionato benissimo anche su Ubuntu 14.04 LTS
ilhnctn il

2
proprio come una nota, la riga in pg_hba.confdeve essere la prima riga, altrimenti potrebbe essere ignorata a causa di altre regole (pgsql 9.3.5 su F21). Mi ci è voluto del tempo per capirlo, che le righe già commentate e modificate per l'utente di postgresql non lo faranno semplicemente.
breve

Penso che questo sia cambiato in PG 9.4, dal momento che ho solo local all all peernel punto 3 che ora ho cambiato md5. Ok?
Léo Léopold Hertz 준영

1
Aggiorna la risposta al 2017! PostgreSQL 9.6 e UBUNTU 16 LTS ... Nessun modo semplice ??
Peter Krauss,

55

In Linux PostgresQL è generalmente configurato per consentire all'utente root di accedere come superutente postgres postgresdalla shell (console o ssh).

$ psql -U postgres

Quindi dovresti semplicemente creare un nuovo database come al solito:

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

Questo dovrebbe funzionare senza toccare pg_hba.conf. Se vuoi essere in grado di farlo usando alcuni strumenti della GUI sulla rete, allora dovresti fare confusione pg_hba.conf.


sto lavorando su Windows ho eseguito initdb per la mia directory e ho i file di configurazione presenti. ora creatob funziona ma quando eseguo il test psql ricevo il messaggio ATTENZIONE: la tabella codici console (437) differisce dalla tabella codici Windows (1252) i caratteri a 8 bit potrebbero non funzionare correttamente. Vedere la pagina di riferimento psql "Note per utenti Windows" per i dettagli. e nessuno dei comandi funziona.
Rohit Banga,

7
psql: FATAL: Peer authentication failed for user "postgres"anche con sudo.
Peter Krauss,

Risposta perfetta, non volevo toccare i file di configurazione e questo ha funzionato perfettamente su PostgreSQL 10.10 su Ubuntu. Dovresti essere in grado di connetterti in seguito con psql -d mydatatabase -U myuser.
ranu,

21

Questa è la mia soluzione:

su root
su postgres
psql

4
Questo funzionerà in molti casi perché molti siti avranno pg_hba.conf autenticare l'utente db postgres rispetto all'account di sistema postgres (metodo peer). L'accesso riuscito, tuttavia, dipenderà in definitiva dal contenuto di pg_hba.conf per qualsiasi sito specifico.
Reed Sandberg,

1
Ha funzionato per me. Ho sostituito la prima riga con sudo bash.
eje211

non capisco come questo aiuti, .. dalla mia comprensione, questo accede a root e postgres ed esegue psql. Cosa sta succedendo esattamente? Grazie!
Olleh

20

Esistono due metodi che è possibile utilizzare. Entrambi richiedono la creazione di un utente e un database.

  1. Utilizzando createuser e Createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Utilizzo dei comandi di amministrazione SQL e connessione con una password su TCP

    $ sudo -u postgres psql postgres

    E poi nella shell psql

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

    Quindi puoi accedere,

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

    Se non conosci la porta, puoi sempre ottenerla eseguendo quanto segue, come postgresutente,

    SHOW port;

    O,

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

Sidenote: l' postgresutente

Suggerisco di NON modificare l' postgresutente.

  1. Normalmente è bloccato dal sistema operativo. Nessuno dovrebbe "accedere" al sistema operativo come postgres. Dovresti avere root per autenticarti come postgres.
  2. Normalmente non è protetto da password e viene delegato al sistema operativo host. Questa è una buona cosa . Ciò significa normalmente per accedere come postgresequivalente PostgreSQL di SQL ServerSA , devi avere accesso in scrittura ai file di dati sottostanti. E ciò significa che potresti normalmente rovinare il caos comunque.
  3. Tenendolo disabilitato, si rimuove il rischio di un attacco di forza bruta attraverso un superutente nominato. Nascondere e oscurare il nome del superutente ha dei vantaggi.

Con il primo metodo, l'utente finisce senza privilegi. Ho finito per usare questo invece del primo comando:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert il

@FabienSnauwaert -srende l'utente un superutente.
Evan Carroll,

16

EDIT: Attenzione: per favore, leggi la risposta pubblicata da Evan Carroll . Sembra che questa soluzione non sia sicura e non consigliata.

Questo ha funzionato per me con Ubuntu 14.04 64 bit standard nell'installazione .

Ho seguito le istruzioni, con piccole modifiche, che ho trovato in http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Installa postgreSQL (se non già nel tuo computer):

sudo apt-get install postgresql

  1. Esegui psql usando l'utente postgres

sudo –u postgres psql postgres

  1. Imposta una nuova password per l'utente postgres:

\password postgres

  1. Esci da psql

\q

  1. Modifica /etc/postgresql/9.3/main/pg_hba.conf e modifica:

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

Per:

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

  1. Riavvia postgreSQL:

sudo service postgresql restart

  1. Crea un nuovo database

sudo –u postgres createdb mytestdb

  1. Esegui di nuovo psql con l'utente postgres:

psql –U postgres –W

  1. Elenca i database esistenti (il tuo nuovo database dovrebbe essere lì ora):

\l


1
Ho annullato il voto perché penso che l'attivazione postgresdell'utente sia una cattiva idea. stackoverflow.com/a/41604969/124486
Evan Carroll

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

Probabilmente dovrai aggiornare il tuo pg_hba.conffile. Questo file controlla quali utenti possono accedere da quali indirizzi IP. Penso che l'utente di Postgres sia piuttosto bloccato per impostazione predefinita.


2
Per RHEL6.4 e postgres 8.4 il file si trovava in /var/lib/pgsql/data/pg_hba.conf. Passare identa trustper host(e localse si utilizza ssh).
DavidG,

3

Se stai eseguendo macOS come me, potresti non avere l'utente postgres.

Quando si tenta di correre sudo -u postgres psql stavo ricevendo l'erroresudo: unknown user: postgres

Fortunatamente ci sono eseguibili forniti da Postgres.

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

Quindi sono stato in grado di accedere psqlsenza problemi.

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

nick=#

Se stai creando una nuova istanza di Postgres da zero, ecco i passaggi che ho seguito. Ho usato una porta non predefinita in modo da poter eseguire due istanze.

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

Quindi ho modificato /var/postgres/var-10-local/postgresql.confcon la mia porta preferita, 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

Fatto!


2

In MacOS, ho seguito i passaggi seguenti per farlo funzionare.

Per la prima volta, dopo l'installazione, ottieni il nome utente del sistema.

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

Ora che hai effettuato l'accesso al sistema e puoi creare il DB.

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

Basta passare alla directory dell'installazione ed eseguire questo file "pg_env.bat", quindi dopo andare alla cartella bin ed eseguire pgAdmin.exe. Questo deve funzionare senza dubbio!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.