Le altre risposte non sono state del tutto soddisfacenti per me. Ecco cosa ha funzionato per postgresql-9.1 su Xubuntu 12.04.1 LTS.
-
Connettiti al database predefinito con l'utente postgres:
sudo -u postgres psql template1
-
Imposta la password per l'utente postgres, quindi esci da psql (Ctrl-D):
ALTER USER postgres con password cifrata 'xxxxxxx';
-
Modifica il
pg_hba.conf
file:sudo vim /etc/postgresql/9.1/main/pg_hba.conf
e cambia "peer" in "md5" nella riga relativa a postgres:
local tutti postgres
peermd5Per sapere quale versione di postgresql stai utilizzando, cerca la cartella della versione in
/etc/postgresql
. Inoltre, puoi usare Nano o un altro editor invece di VIM. -
Riavvia il database :
sudo /etc/init.d/postgresql restart
(Qui puoi controllare se ha funzionato con
psql -U postgres
). -
Crea un utente con il tuo 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, in modo che ti venga chiesto di digitare la password che verrà crittografata, e -d in modo che tu possa fare un
createdb
.Attenti alle password :ti chiederà prima due volte la nuova password (per il nuovo utente), ripetuta, e poi una volta la password postgres (quella specificata al punto 2).
-
Di nuovo, modifica il
pg_hba.conf
file (vedi il passaggio 3 sopra) e cambia "peer" in "md5" nella riga relativa a "tutti" gli altri utenti:local tutti tutti
peermd5 -
Riavvia (come nel passaggio 4) e verifica di poter accedere senza -U postgres:
modello psql1
Nota che se fai un semplice
psql
, fallirà poiché proverà a connetterti a un database predefinito con il tuo stesso nome (ad esempiowhoami
). template1 è il database di amministrazione presente fin dall'inizio. -
Ora
createdb <dbname>
dovrebbe funzionare.
Sotto Linux PostgresQL è solitamente configurato per consentire all'utente root di accedere come superutente postgres postgres
dalla 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;
Dovrebbe funzionare senza toccare pg_hba.conf
. Se vuoi essere in grado di farlo utilizzando uno strumento GUI sulla rete, allora dovresti fare confusione con pg_hba.conf
.
Ci sono due metodi che puoi usare. Entrambi richiedono la creazione di un utente e un database.
-
Utilizzando createuser e createdb ,
$ sudo -u postgres createuser --superuser $USER $ createdb mydatabase $ psql -d mydatabase
-
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
postgres
utente,SHOW port;
Oppure,
$ grep "port =" /etc/postgresql/*/main/postgresql.conf
Nota a margine:il postgres
utente
Suggerisco NON modificando il postgres
utente.
- Normalmente è bloccato dal sistema operativo. Nessuno dovrebbe "accedere" al sistema operativo come
postgres
. Dovresti avere root per autenticarti comepostgres
. - Normalmente non è protetto da password e delega al sistema operativo host. Questa è una buona cosa . Questo normalmente significa per accedere come
postgres
che è l'equivalente PostgreSQL diSA
di SQL Server , devi disporre dell'accesso in scrittura ai file di dati sottostanti. E ciò significa che normalmente potresti comunque creare scompiglio. - Mantenendo questa opzione disabilitata, elimini il rischio di un attacco di forza bruta tramite un super utente con nome. Nascondere e oscurare il nome del superutente ha dei vantaggi.