Comment configurer postgresql pour la première fois?

197

Je viens d'installer postgresql et j'ai spécifié le mot de passe x lors de l'installation. Lorsque j'essaie de faire createdbet de spécifier un mot de passe, je reçois le message:

createdb: impossible de se connecter à la base de données postgres: FATAL: échec de l'authentification par mot de passe pour l'utilisateur

Pareil pour createuser.

Comment dois-je commencer? Puis-je m'ajouter en tant qu'utilisateur à la base de données?

Rohit Banga
la source
4
C'est à peu près la même chose que cette question qui a été posée un an plus tard. Mais, je crois que celui-ci a une réponse principale dangereuse . Vous ne devez pas configurer l' postgresutilisateur. C'est le SUprincipe de PostgreSQL, et il vous ouvre pour des attaques de connexion contre lui. Créez un autre super-utilisateur et réservez le verrouillé postgresaux administrateurs UNIX avec root.
Evan Carroll du

Réponses:

329

Les autres réponses ne m'ont pas complètement satisfait. Voici ce qui a fonctionné pour postgresql-9.1 sur Xubuntu 12.04.1 LTS.

  1. Connectez-vous à la base de données par défaut avec les postgres utilisateur:

    sudo -u postgres psql template1

  2. Définissez le mot de passe pour les postgres utilisateur, puis quittez psql (Ctrl-D):

    ALTER USER postgres avec mot de passe crypté 'xxxxxxx';

  3. Modifiez le pg_hba.conffichier:

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

    et changez "peer" en "md5" sur la ligne concernant les postgres:

    local tous les      pairs postgres      md5

    Pour savoir quelle version de postgresql vous exécutez, recherchez le dossier de version sous /etc/postgresql. Vous pouvez également utiliser Nano ou un autre éditeur au lieu de VIM.

  4. Redémarrez la base de données:

    sudo /etc/init.d/postgresql restart

    (Ici, vous pouvez vérifier si cela a fonctionné psql -U postgres).

  5. Créez un utilisateur portant le même nom que vous (pour le trouver, vous pouvez taper whoami):

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

    Les options indiquent à postgresql de créer un utilisateur qui peut se connecter, créer des bases de données, créer de nouveaux rôles, est un superutilisateur et aura un mot de passe crypté. Les plus importants sont -P -E, de sorte qu'on vous demande de taper le mot de passe qui sera crypté, et -d pour que vous puissiez faire un createdb.

    Méfiez-vous des mots de passe : il vous demandera d'abord deux fois le nouveau mot de passe (pour le nouvel utilisateur), répété, puis une fois le mot de passe postgres (celui spécifié à l'étape 2).

  6. Encore une fois, modifiez le pg_hba.conffichier (voir l'étape 3 ci-dessus), et remplacez «homologue» par «md5» sur la ligne concernant «tous» les autres utilisateurs:

    local tout      tout      pair md5

  7. Redémarrez (comme à l'étape 4) et vérifiez que vous pouvez vous connecter sans postgres -U:

    psql template1

    Notez que si vous faites un simple psql, cela échouera car il essaiera de vous connecter à une base de données par défaut portant le même nom que vous (c'est-à-dire whoami). template1 est la base de données d'administration qui est là depuis le début.

  8. Maintenant, ça createdb <dbname>devrait marcher.

Manur
la source
Cette procédure fonctionnait également très bien sur Ubuntu 13.10. N'oubliez pas sudo à l'étape 5 lors de la création d'un utilisateur.
David den Haring
2
A très bien fonctionné sur Ubuntu 14.04 LTS
ilhnctn
2
tout comme une note, la ligne pg_hba.confdoit être la première ligne, sinon elle pourrait être ignorée à cause d'autres règles (pgsql 9.3.5 sur F21). Il m'a fallu un certain temps pour comprendre cela, que les lignes non commentées et changeantes déjà commentées pour l'utilisateur postgresql ne suffiront pas simplement.
Dashesy
Je pense que cela a changé dans PG 9.4, car je n'ai plus que local all all peerle point 3 vers lequel je suis devenu md5. D'accord?
Léo Léopold Hertz 준영
1
Veuillez mettre à jour la réponse à 2017! PostgreSQL 9.6 et UBUNTU 16 LTS ... Pas de manière simple ??
Peter Krauss
55

Sous Linux PostgresQL est généralement configuré pour permettre à l'utilisateur root de se connecter en tant que superutilisateur postgres à postgrespartir du shell (console ou ssh).

$ psql -U postgres

Ensuite, vous créez simplement une nouvelle base de données comme d'habitude:

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

Cela devrait fonctionner sans toucher pg_hba.conf. Si vous voulez être en mesure de le faire en utilisant un outil GUI sur le réseau - alors vous devrez jouer avec pg_hba.conf.

Oliver Weichhold
la source
je travaille sur windows j'ai exécuté initdb pour mon répertoire et j'ai les fichiers de configuration présents. nowb fonctionne mais quand je fais un test psql, j'obtiens le message AVERTISSEMENT: la page de codes de la console (437) diffère de la page de codes de Windows (1252) les caractères 8 bits peuvent ne pas fonctionner correctement. Voir la page de référence psql "Notes pour les utilisateurs de Windows" pour plus de détails. et aucune des commandes ne fonctionne.
Rohit Banga
7
psql: FATAL: Peer authentication failed for user "postgres"même avec sudo.
Peter Krauss
Réponse parfaite, je ne voulais pas toucher aux fichiers de configuration et cela fonctionnait parfaitement sur PostgreSQL 10.10 sur Ubuntu. Vous devriez pouvoir vous connecter par la suite avec psql -d mydatatabase -U myuser.
ranu
21

Voici ma solution:

su root
su postgres
psql
Admdebian
la source
4
Cela fonctionnera dans de nombreux cas car de nombreux sites demanderont à pg_hba.conf d'authentifier l'utilisateur db postgres par rapport au compte système postgres (méthode homologue). Une connexion réussie dépendra finalement du contenu de pg_hba.conf pour un site particulier.
Reed Sandberg
1
A travaillé pour moi. J'ai remplacé la première ligne par sudo bash.
eje211
je ne comprends pas comment cela aide, .. d'après ma compréhension, cela se connecte à root et postgres, et exécute psql. Que se passe-t-il exactement? Merci!
olleh
20

Il existe deux méthodes que vous pouvez utiliser. Les deux nécessitent la création d'un utilisateur et d' une base de données.

  1. En utilisant createuser et createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Utilisation des commandes d'administration SQL et connexion avec un mot de passe via TCP

    $ sudo -u postgres psql postgres

    Et puis dans le shell psql

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

    Ensuite, vous pouvez vous connecter,

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

    Si vous ne connaissez pas le port, vous pouvez toujours l'obtenir en exécutant ce qui suit, en tant postgresqu'utilisateur,

    SHOW port;

    Ou,

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

Sidenote: l' postgresutilisateur

Je suggère de ne PAS modifier l' postgresutilisateur.

  1. Il est normalement verrouillé depuis le système d'exploitation. Personne n'est censé "se connecter" au système d'exploitation en tant que postgres. Vous êtes censé avoir root pour vous authentifier postgres.
  2. Il n'est normalement pas protégé par mot de passe et délègue au système d'exploitation hôte. C’est une bonne chose . Cela signifie normalement que pour vous connecter en tant postgresqu'équivalent PostgreSQL de SQL Server SA, vous devez avoir un accès en écriture aux fichiers de données sous-jacents. Et, cela signifie que vous pourriez normalement faire des ravages de toute façon.
  3. En gardant cette option désactivée, vous supprimez le risque d'une attaque par force brute via un super-utilisateur nommé. Cacher et masquer le nom du superutilisateur présente des avantages.
Evan Carroll
la source
Avec la première méthode, l'utilisateur se retrouve sans privilèges. J'ai fini par utiliser ceci à la place de la première commande:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert
@FabienSnauwaert le -sfait de l'utilisateur un superutilisateur.
Evan Carroll
16

EDIT: Attention: Veuillez lire la réponse publiée par Evan Carroll . Il semble que cette solution ne soit pas sûre et déconseillée.

Cela a fonctionné pour moi dans l' installation standard d' Ubuntu 14.04 64 bits .

J'ai suivi les instructions, avec de petites modifications, que j'ai trouvées dans http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Installez postgreSQL (si ce n'est pas déjà fait sur votre machine):

sudo apt-get install postgresql

  1. Exécutez psql en utilisant l'utilisateur postgres

sudo –u postgres psql postgres

  1. Définissez un nouveau mot de passe pour l'utilisateur postgres:

\password postgres

  1. Quitter psql

\q

  1. Modifiez /etc/postgresql/9.3/main/pg_hba.conf et changez:

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

À:

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

  1. Redémarrez postgreSQL:

sudo service postgresql restart

  1. Créer une nouvelle base de données

sudo –u postgres createdb mytestdb

  1. Exécutez à nouveau psql avec l'utilisateur postgres:

psql –U postgres –W

  1. Énumérez les bases de données existantes (votre nouvelle base de données devrait être là maintenant):

\l

Robert
la source
1
J'ai voté contre parce que je pense qu'activer l' postgresutilisateur est une mauvaise idée. 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`
Suman Astani
la source
3

Vous devrez probablement mettre à jour votre pg_hba.conffichier. Ce fichier contrôle les utilisateurs qui peuvent se connecter à partir de quelles adresses IP. Je pense que l'utilisateur postgres est assez verrouillé par défaut.

Neall
la source
2
Pour RHEL6.4 et postgres 8.4, le fichier se trouvait dans /var/lib/pgsql/data/pg_hba.conf. Passez identà trustfor host(et localsi vous utilisez ssh).
DavidG
3

Si vous utilisez macOS comme je le suis, vous ne disposez peut-être pas de l'utilisateur postgres.

En essayant de courir, sudo -u postgres psqlj'obtenais l'erreursudo: unknown user: postgres

Heureusement, il existe des exécutables fournis par postgres.

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

Ensuite, j'ai pu accéder psqlsans problèmes.

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

nick=#

Si vous créez une nouvelle instance postgres à partir de zéro, voici les étapes que j'ai suivies. J'ai utilisé un port autre que celui par défaut pour pouvoir exécuter deux instances.

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

Ensuite, j'ai édité /var/postgres/var-10-local/postgresql.confavec mon port préféré, 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

Terminé!

Nick Woodhams
la source
2

Sous MacOS, j'ai suivi les étapes ci-dessous pour le faire fonctionner.

Pour la première fois, après l'installation, obtenez le nom d'utilisateur du système.

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

Maintenant que vous êtes connecté au système et que vous pouvez créer la base de données.

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
SuperNova
la source
0

Parcourez simplement le répertoire de votre installation et exécutez ce fichier "pg_env.bat", donc après allez dans le dossier bin et exécutez pgAdmin.exe. Cela doit fonctionner sans aucun doute!

Wellington Ribeiro
la source