diff --git a/scripts/server-postgres/create_pg_role.sh b/scripts/server-postgres/create_pg_role.sh index 571ed51..707c7b4 100755 --- a/scripts/server-postgres/create_pg_role.sh +++ b/scripts/server-postgres/create_pg_role.sh @@ -25,40 +25,47 @@ fi read -s -p "🔑 Entrez le mot de passe de l'utilisateur 'postgres' : " POSTGRES_PASSWORD echo "" -export PGPASSWORD="${POSTGRES_PASSWORD}" +# Générer le mot de passe du rôle +echo "🔐 Génération d'un mot de passe fort pour le rôle '$ROLE_NAME'..." +ROLE_PASSWORD=$(generate_token 20) -echo "🔎 Vérification de l'existence du rôle PostgreSQL '$ROLE_NAME'..." -ROLE_EXISTS=$(sudo -u postgres psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${ROLE_NAME}'") +# Générer un fichier SQL temporaire pour la vérification + création +SQL_FILE=$(mktemp) -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) +cat < "$SQL_FILE" +DO \$\$ +BEGIN + IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${ROLE_NAME}') THEN + RAISE NOTICE '🛠 Création du rôle "${ROLE_NAME}"...'; + CREATE ROLE ${ROLE_NAME} WITH LOGIN PASSWORD '${ROLE_PASSWORD}'; + ELSE + RAISE NOTICE '⚠️ Le rôle "${ROLE_NAME}" existe déjà.'; + END IF; +END +\$\$; +EOF - echo "🛠 Création du rôle '$ROLE_NAME' avec LOGIN et mot de passe..." - sudo -u postgres psql -c "CREATE ROLE ${ROLE_NAME} WITH LOGIN PASSWORD '${ROLE_PASSWORD}';" +# Une seule exécution de psql via sudo avec mot de passe PostgreSQL exporté +echo "🔎 Exécution des commandes SQL avec sudo..." +sudo -u postgres bash -c "PGPASSWORD='${POSTGRES_PASSWORD}' psql -v ON_ERROR_STOP=1 -f '${SQL_FILE}'" - 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 "-------------------------------------------" +rm -f "$SQL_FILE" - # 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 +# Affichage des identifiants si création +echo "" +echo "-------------------------------------------" +echo " Nom du rôle : ${ROLE_NAME}" +echo " Mot de passe : ${ROLE_PASSWORD}" +echo "-------------------------------------------" - echo "⚠️ Pensez à sauvegarder ces informations si vous ne les enregistrez pas." +# 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 -unset PGPASSWORD -unset POSTGRES_PASSWORD - +echo "⚠️ Pensez à sauvegarder ces informations si vous ne les enregistrez pas." echo "🎉 Opération terminée."