PostgreSQL, souvent connu simplement sous le nom de Postgres, est un système de gestion de base de données relationnelle objet à usage général open source. Il dispose de nombreuses fonctionnalités puissantes telles que les sauvegardes en ligne, la récupération à un instant donné, les transactions imbriquées, les requêtes SQL et JSON, le contrôle de la concurrence multiversion (MVCC), la réplication asynchrone, etc.
Ce didacticiel vous guide à travers les étapes d'installation du serveur de base de données PostgreSQL sur Debian 10. Nous explorerons également les principes fondamentaux de l'administration de base de données de base.
Installation de PostgreSQL #
Au moment de la rédaction de cet article, la dernière version de PostgreSQL disponible dans les référentiels Debian par défaut est PostgreSQL version 11.5.
Pour installer PostgreSQL sur votre serveur Debian, effectuez les étapes suivantes en tant que root ou utilisateur avec les privilèges sudo :
-
Commencez par mettre à jour l'index du package APT :
sudo apt update
-
Installez le serveur PostgreSQL et le package contrib qui fournit des fonctionnalités supplémentaires pour la base de données PostgreSQL :
sudo apt install postgresql postgresql-contrib
-
Une fois l'installation terminée, le service PostgreSQL démarrera. Pour vérifier l'installation, utilisez le
psql
outil pour imprimer la version du serveur :sudo -u postgres psql -c "SELECT version();"
Le résultat devrait ressembler à ceci :
PostgreSQL 11.5 (Debian 11.5-1+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
psql
est un programme de terminal interactif qui vous permet d'interagir avec le serveur PostgreSQL. Rôles PostgreSQL et méthodes d'authentification #
PostgreSQL gère les autorisations d'accès à la base de données en utilisant le concept de rôles. Selon la façon dont vous configurez le rôle, il peut représenter un utilisateur de base de données ou un groupe d'utilisateurs de base de données.
PostgreSQL prend en charge plusieurs méthodes d'authentification. Les méthodes les plus fréquemment utilisées sont :
- Confiance - Un rôle peut se connecter sans mot de passe, tant que les critères définis dans le
pg_hba.conf
sont remplies. - Mot de passe :un rôle peut se connecter en fournissant un mot de passe. Les mots de passe peuvent être stockés sous la forme
scram-sha-256
md5
etpassword
(texte clair) - Ident :uniquement pris en charge pour les connexions TCP/IP. Il fonctionne en obtenant le nom d'utilisateur du système d'exploitation du client, avec un mappage de nom d'utilisateur facultatif.
- Peer :identique à Ident, mais il n'est pris en charge que sur les connexions locales.
L'authentification du client PostgreSQL est définie dans le fichier de configuration nommé pg_hba.conf
. Pour les connexions locales, PostgreSQL est configuré pour utiliser la méthode d'authentification par les pairs.
L'utilisateur « postgres » est automatiquement créé lors de l'installation de PostgreSQL. Cet utilisateur est le superutilisateur de l'instance PostgreSQL, et il équivaut à l'utilisateur racine MySQL.
Pour vous connecter au serveur PostgreSQL en tant que "postgres", passez à l'utilisateur postgres et accédez à une invite PostgreSQL à l'aide de psql
utilitaire :
sudo su - postgres
psql
De là, vous pouvez interagir avec le serveur PostgreSQL. Pour quitter le shell PostgreSQL, tapez :
\q
Vous pouvez utiliser le sudo
commande pour accéder à l'invite PostgreSQL sans changer d'utilisateur :
sudo -u postgres psql
Le postgres
user est généralement utilisé uniquement à partir de l'hôte local.
Création du rôle et de la base de données PostgreSQL #
Le createuser
La commande vous permet de créer de nouveaux rôles à partir de la ligne de commande. Seuls les super-utilisateurs et les rôles avec CREATEROLE
privilège peut créer de nouveaux rôles.
Dans l'exemple suivant, nous allons créer un nouveau rôle nommé kylo
, une base de données nommée kylodb
et accordez des privilèges sur la base de données au rôle.
-
Commencez par créer le rôle en exécutant la commande suivante :
sudo su - postgres -c "createuser kylo"
-
Ensuite, créez la base de données en utilisant le
createdb
commande :sudo su - postgres -c "createdb kylodb"
-
Pour accorder des autorisations à l'utilisateur sur la base de données, connectez-vous au shell PostgreSQL :
sudo -u postgres psql
Exécutez la requête suivante :
GRANT ALL PRIVILEGES ON DATABASE kylodb TO kylo;
Activer l'accès à distance au serveur PostgreSQL #
Par défaut, le serveur PostgreSQL n'écoute que sur l'interface locale 127.0.0.1
.
Si vous souhaitez vous connecter au serveur PostgreSQL à partir d'emplacements distants, vous devez configurer le serveur pour écouter sur l'interface publique et modifier la configuration pour accepter les connexions à distance.
Ouvrez le fichier de configuration postgresql.conf
et ajoutez listen_addresses = '*'
dans le CONNECTIONS AND AUTHENTICATION
section. Cela indique au serveur d'écouter sur toutes les interfaces réseau.
sudo nano /etc/postgresql/11/main/postgresql.conf
/etc/postgresql/11/main/postgresql.conf#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Enregistrez le fichier et redémarrez le service PostgreSQL pour que les modifications prennent effet :
sudo service postgresql restart
Vérifiez les modifications avec le ss
utilitaire :
ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*
La sortie doit montrer que le serveur PostgreSQL écoute toutes les interfaces (0.0.0.0).
La dernière étape consiste à configurer le serveur pour qu'il accepte les connexions à distance en modifiant le pg_hba.conf
fichier.
Voici quelques exemples montrant différents cas d'utilisation :
/etc/postgresql/11/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane will be able to access all databases from all locations using an md5 password
host all jane 0.0.0.0/0 md5
# The user jane will be able to access only the janedb from all locations using an md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane will be able to access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust