ansible-roles/mysql-oracle/files/my-add.sh

161 lines
3.6 KiB
Bash
Executable File

#!/bin/sh
usage() {
echo "Usage: $0 [ -d <database> -u <user> [-p <password>] [-f] ]"
}
interactive() {
echo "Add an account / database in MySQL"
echo "Enter the name of the new database"
read db
if ( is_db $db ); then
echo "Database $db already exist !" >&2
exit 1
fi
echo "Enter account with all right on this new database"
echo "(you can use existant account)"
read user
if ( is_user $user ); then
echo "Warning, account already exists, update password ? [N/y]"
read confirm
if [ "${confirm}" = "y" ] || [ "${confirm}" = "Y" ]; then
echo -n "Enter new password for existant MySQL account (empty for random): "
read password
if [ -z "${password}" ]; then
password=$(apg -n1)
fi
fi
else
echo -n "Enter new password for new MySQL account (empty for random): "
read password
if [ -z "${password}" ]; then
password=$(apg -n1)
fi
fi
mysql_add $db $user $password
}
cli() {
while getopts ":d:u:p:f" opt; do
case "$opt" in
d)
db=$OPTARG
;;
u)
user=$OPTARG
;;
p)
password=$OPTARG
;;
f)
force="true"
;;
*)
usage
exit 1
;;
esac
done
shift $((OPTIND-1))
if [ -z "${db}" ]; then
usage
exit 1
fi
if [ -z "${user}" ]; then
usage
exit 1
fi
if ( is_db $db ); then
echo "Database $db already exist !" >&2
exit 1
fi
if ( is_user $user ); then
if [ -z "${force}" ]; then
if [ -n "${password}" ]; then
echo "User $user already exist, update password with -f !" >&2
exit 1
fi
else
if [ -z "${password}" ]; then
password=$(apg -n1)
fi
fi
else
if [ -z "${password}" ]; then
password=$(apg -n1)
fi
fi
mysql_add $db $user $password >/dev/null
}
is_db() {
db=$1
mysql mysql -Ne "SHOW DATABASES;"|grep -q "^${db}$"
exit $?
}
is_user() {
user=$1
nb_user=$(mysql mysql -Ne "SELECT COUNT(User) from user WHERE User='${user}';")
if [ $nb_user -gt 0 ]; then
exit 0
else
exit 1
fi
}
mysql_add() {
db=$1
user=$2
password=$3
echo -n "Create '${db}' database ..."
mysql -e "CREATE DATABASE ${db};"
if [ $? -eq 0 ]; then
echo "OK"
else
echo "KO"
exit 1
fi
if [ -z "${password}" ]; then
password=$(mysql mysql -Ne "SELECT Password FROM user WHERE User='${user}' AND Host='localhost';")
echo -n "Grant '${user}' to '${db}' database ..."
mysql -e "GRANT ALL PRIVILEGES ON ${db}.* TO ${user}@localhost IDENTIFIED BY PASSWORD '${password}';"
grant=$?
else
echo -n "Grant '${user}' to '${db}' database with password '${password}' ..."
mysql -e "GRANT ALL PRIVILEGES ON ${db}.* TO ${user}@localhost IDENTIFIED BY '${password}';"
grant=$?
fi
if [ $grant -eq 0 ]; then
echo "OK"
else
echo "KO"
exit 1
fi
echo -n "Flush Mysql privileges ..."
mysql -e "FLUSH PRIVILEGES;"
if [ $? -eq 0 ]; then
echo "OK"
else
echo "KO"
exit 1
fi
}
main() {
if [ $# = 0 ]; then
interactive
else
cli $@
fi
}
main $@