1
0
Fork 0
scripts-admin-quickndirty-p.../oldies/script_multi-pg-deuxieme-utilisateur.sh

60 lines
2.4 KiB
Bash
Executable file

#!/bin/sh
# Ce script génère juste du SQL permettant, à partir
# du résultat du script multi-pg, de renommer l'utilisateur
# de l'instance en instance_admin et de lui donner les
# droits nécessaires au bon fonctionnement de phppgadmin,
# et de créer un utilisateur instance avec des droits
# encore plus limités (pas de modif de la structure, seulement
# select,insert,update,delete et gestion des séquences)
#
# TODO: message d'aide pour les arguments:
# script.sh nom_instance ancien_mot_de_passe
# TODO 2: essayer d'éviter le mot de passe dans la ligne de commande :-(
set -e
# Arguments:
# $1 : Nom de la bdd / de l'utilisateur
# $2 : mot de passe de l'utilisateur
# $3 : nom de l'utilisateur dédié à la réplication
# $4 : mot de passe dudit utilisateur
generate_script_postgresql_creation_db_et_user() {
local NOM_INSTANCE POSTGRESQL_PASSWORD ADMIN_PASSWORD
test -n "$1" && test -n "$2" && test -n "$3" || exit 1
NOM_INSTANCE="$1"
POSTGRESQL_PASSWORD="$2"
ADMIN_PASSWORD="$3"
ADMIN_USERNAME="$NOM_INSTANCE""_admin"
cat <<EOF
ALTER USER $NOM_INSTANCE RENAME TO $ADMIN_USERNAME;
ALTER USER $ADMIN_USERNAME WITH PASSWORD '$ADMIN_PASSWORD';
-- Re-création de l'utilisateur normal
CREATE USER $NOM_INSTANCE WITH PASSWORD '$POSTGRESQL_PASSWORD' CONNECTION LIMIT 50;
GRANT CONNECT ON DATABASE $NOM_INSTANCE TO $NOM_INSTANCE;
\c $NOM_INSTANCE
GRANT USAGE ON SCHEMA public TO $NOM_INSTANCE;
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO $NOM_INSTANCE;
ALTER DEFAULT PRIVILEGES FOR ROLE $ADMIN_USERNAME IN SCHEMA public GRANT select,insert,update,delete ON TABLES TO $NOM_INSTANCE;
ALTER DEFAULT PRIVILEGES FOR ROLE $ADMIN_USERNAME IN SCHEMA public GRANT USAGE,UPDATE ON SEQUENCES TO $NOM_INSTANCE;
-- Ce passage-là est plus parano, mais à étudier avant suppression
GRANT SELECT ON pg_user TO $ADMIN_USERNAME;
GRANT SELECT ON pg_roles TO $ADMIN_USERNAME;
GRANT SELECT ON pg_group TO $ADMIN_USERNAME;
GRANT SELECT ON pg_authid TO $ADMIN_USERNAME;
GRANT SELECT ON pg_auth_members TO $ADMIN_USERNAME;
GRANT SELECT ON pg_database TO $ADMIN_USERNAME;
GRANT SELECT ON pg_tablespace TO $ADMIN_USERNAME;
GRANT SELECT ON pg_settings TO $ADMIN_USERNAME;
EOF
}
NOM_INSTANCE="$1"
POSTGRESQL_PASSWORD="$2"
ADMIN_PASSWORD=$( dd if=/dev/random 2>/dev/null bs=1 count=10 status=noxfer | base64 | sed 's#[/=]##g' )
generate_script_postgresql_creation_db_et_user "$NOM_INSTANCE" "$POSTGRESQL_PASSWORD" "$ADMIN_PASSWORD"