59 lines
2.4 KiB
Bash
Executable file
59 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"
|