#!/bin/bash # Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0 # Importer les fonctions communes source "$(dirname "$0")/../common/common_utils.sh" # Vérifier si le script est exécuté en root check_root set -e # Demande interactive si le rôle n’est pas passé en paramètre if [[ -n "$1" ]]; then ROLE_NAME="$1" else read -p "👤 Entrez le nom du rôle PostgreSQL à créer : " ROLE_NAME fi if [[ -z "$ROLE_NAME" ]]; then echo "❌ Le nom du rôle est obligatoire." exit 1 fi # Demander le mot de passe de l'utilisateur 'postgres' read -s -p "🔑 Entrez le mot de passe de l'utilisateur 'postgres' : " POSTGRES_PASSWORD echo "" export PGPASSWORD="${POSTGRES_PASSWORD}" echo "🔎 Vérification de l'existence du rôle PostgreSQL '$ROLE_NAME'..." ROLE_EXISTS=$(psql -U postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${ROLE_NAME}'") if [[ "$ROLE_EXISTS" == "1" ]]; then echo "⚠️ Le rôle '$ROLE_NAME' existe déjà." else echo "🔐 Génération d'un mot de passe fort pour le rôle '$ROLE_NAME'..." ROLE_PASSWORD=$(generate_token 20) echo "🛠 Création du rôle '$ROLE_NAME' avec LOGIN et mot de passe..." psql -U postgres -c "CREATE ROLE ${ROLE_NAME} WITH LOGIN PASSWORD '${ROLE_PASSWORD}';" echo "" echo "✅ Rôle '$ROLE_NAME' créé avec succès." echo "-------------------------------------------" echo " Nom du rôle : ${ROLE_NAME}" echo " Mot de passe : ${ROLE_PASSWORD}" echo "-------------------------------------------" # Proposer d'enregistrer dans .pgpass read -p "💾 Voulez-vous enregistrer ces identifiants dans ~/.pgpass ? (y/n) " SAVE_PASS if [[ "$SAVE_PASS" =~ ^[Yy]$ ]]; then PGPASS_FILE="${HOME}/.pgpass" echo "*:*:*:${ROLE_NAME}:${ROLE_PASSWORD}" >> "$PGPASS_FILE" chmod 600 "$PGPASS_FILE" echo "✅ Identifiants sauvegardés dans $PGPASS_FILE" fi echo "⚠️ Pensez à sauvegarder ces informations si vous ne les enregistrez pas." fi unset PGPASSWORD unset POSTGRES_PASSWORD echo "🎉 Opération terminée."