From 9608a58f3d0851dd87ce47041069f52622d90c43 Mon Sep 17 00:00:00 2001 From: Dennis Buchhorn Date: Sun, 23 Jan 2022 14:25:36 +0100 Subject: [PATCH] feat: create scripts to handle customers and databases --- create_customer | 54 ++++++++--------- create_database_for_customer | 94 +++++++++++++++++++++++++++++ delete_database_from_customer | 108 ++++++++++++++++++++++++++++++++++ get_customers | 65 ++++++++++++++++++++ get_databases_from_customer | 93 +++++++++++++++++++++++++++++ 5 files changed, 386 insertions(+), 28 deletions(-) create mode 100755 create_database_for_customer create mode 100755 delete_database_from_customer create mode 100755 get_customers create mode 100755 get_databases_from_customer diff --git a/create_customer b/create_customer index 9e69619..772d06e 100755 --- a/create_customer +++ b/create_customer @@ -1,7 +1,7 @@ #!/bin/bash echo "####################################################################" -echo "# docker_mariadb_create_customer_script #" +echo "# docker_mariadb create_customer script #" echo "# Dennis Buchhorn - bucde@b-eit.de #" echo "####################################################################" echo "# WARNING: password is plain text! #" @@ -13,42 +13,40 @@ MARIADB_CONTAINER_NAME="" MARIADB_ROOT_PASSWORD="" MARIADB_CUSTOMER_NAME="" MARIADB_CUSTOMER_PASSWORD="" -MARIADB_CUSTOMER_CHARSET="" -MARIADB_CUSTOMER_COLLATE="" -read -p "Enter mariadb container name: " MARIADB_CONTAINER_NAME +TMP=$(docker container ls --format "{{.Names}}") + +for ENTRY in $TMP; do + CONTAINER_LIST+=($ENTRY) +done + +if [[ ${#CONTAINER_LIST[@]} > 0 ]]; then + echo "List of all running containers:" + + for I in ${!CONTAINER_LIST[@]}; do + echo " Number [$I]: ${CONTAINER_LIST[$I]}" + done +else + echo "No containers running!" + + exit 1 +fi + +read -p "Enter mariadb container number: " TMP + +MARIADB_CONTAINER_NAME="${CONTAINER_LIST[$TMP]}" + read -p "Enter mariadb root password: " MARIADB_ROOT_PASSWORD + read -p "Enter customer name: " MARIADB_CUSTOMER_NAME read -p "Enter customer password: " MARIADB_CUSTOMER_PASSWORD -read -p "Enter character set (leave empty for default): " MARIADB_CUSTOMER_CHARSET -read -p "Enter collate (leave empty for default): " MARIADB_CUSTOMER_COLLATE - -MARIADB_CUSTOMER_DBNAME="${MARIADB_CUSTOMER_NAME}db" rm -f tmp touch tmp -echo "CREATE USER '"$MARIADB_CUSTOMER_NAME"'@'%' IDENTIFIED BY '"$MARIADB_CUSTOMER_PASSWORD"';" >> tmp - -if [ -z "$MARIADB_CUSTOMER_CHARSET" ]; then - if [ -z "$MARIADB_CUSTOMER_COLLATE" ]; then - echo "CREATE DATABASE "$MARIADB_CUSTOMER_DBNAME";" >> tmp - else - echo "CREATE DATABASE "$MARIADB_CUSTOMER_DBNAME" COLLATE '"$MARIADB_CUSTOMER_COLLATE"';" >> tmp - fi -else - if [ -z "$MARIADB_CUSTOMER_COLLATE" ]; then - echo "CREATE DATABASE "$MARIADB_CUSTOMER_DBNAME" CHARACTER SET '"$MARIADB_CUSTOMER_CHARSET"';" >> tmp - else - echo "CREATE DATABASE "$MARIADB_CUSTOMER_DBNAME" CHARACTER SET '"$MARIADB_CUSTOMER_CHARSET"' COLLATE '"$MARIADB_CUSTOMER_COLLATE"';" >> tmp - fi -fi - -echo "GRANT ALL PRIVILEGES ON "$MARIADB_CUSTOMER_DBNAME".* To '"$MARIADB_CUSTOMER_NAME"'@'%' IDENTIFIED BY '"$MARIADB_CUSTOMER_PASSWORD"';" >> tmp -echo "FLUSH PRIVILEGES;" >> tmp +echo "CREATE USER '$MARIADB_CUSTOMER_NAME'@'%' IDENTIFIED BY '$MARIADB_CUSTOMER_PASSWORD';" >> tmp -cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) rm -f tmp -echo "Database '"$MARIADB_CUSTOMER_DBNAME"' with user '"$MARIADB_CUSTOMER_NAME"' created." echo "Done!" diff --git a/create_database_for_customer b/create_database_for_customer new file mode 100755 index 0000000..d683060 --- /dev/null +++ b/create_database_for_customer @@ -0,0 +1,94 @@ +#!/bin/bash + +echo "####################################################################" +echo "# docker_mariadb create_database_for_customer script #" +echo "# Dennis Buchhorn - bucde@b-eit.de #" +echo "####################################################################" +echo "# WARNING: password is plain text! #" +#echo "# #" +echo "####################################################################" +echo "" + +MARIADB_CONTAINER_NAME="" +MARIADB_ROOT_PASSWORD="" +MARIADB_DATABASE_NAME="" +MARIADB_DATABASE_CHARACTER_SET="" +MARIADB_DATABASE_COLLATE="" + +TMP=$(docker container ls --format "{{.Names}}") + +for ENTRY in $TMP; do + CONTAINER_LIST+=($ENTRY) +done + +if [[ ${#CONTAINER_LIST[@]} > 0 ]]; then + echo "List of all running containers:" + + for I in ${!CONTAINER_LIST[@]}; do + echo " Number [$I]: ${CONTAINER_LIST[$I]}" + done +else + echo "No containers running!" + + exit 1 +fi + +read -p "Enter mariadb container number: " TMP + +MARIADB_CONTAINER_NAME="${CONTAINER_LIST[$TMP]}" + +read -p "Enter mariadb root password: " MARIADB_ROOT_PASSWORD + +rm -f tmp +touch tmp +echo "SELECT user FROM mysql.user;" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +for ENTRY in $TMP; do + if ! [[ $ENTRY == "root" || $ENTRY == "mariadb.sys" ]]; then + CUSTOMER_LIST+=($ENTRY) + fi +done + +if [[ ${CUSTOMER_LIST[@]} > 0 ]]; then + echo "List of all customers:" + + for I in ${!CUSTOMER_LIST[@]}; do + echo " Number [$I]: ${CUSTOMER_LIST[$I]}" + done +else + echo "No customers!" + + exit 1 +fi + +read -p "Enter customer number: " TMP + +MARIADB_CUSTOMER_NAME="${CUSTOMER_LIST[$TMP]}" + +read -p "Enter database name: " MARIADB_DATABASE_NAME +read -p "Enter character set (leave empty for default (utf8)): " MARIADB_DATABASE_CHARACTER_SET +read -p "Enter collate (leave empty for default (utf8_unicode_ci)): " MARIADB_DATABASE_COLLATE + +if [[ -z $MARIADB_DATABASE_CHARACTER_SET ]]; then + MARIADB_DATABASE_CHARACTER_SET="utf8" +fi + +if [[ -z $MARIADB_DATABASE_COLLATE ]]; then + MARIADB_DATABASE_COLLATE="utf8_unicode_ci" +fi + +rm -f tmp +touch tmp +echo "CREATE DATABASE IF NOT EXISTS $MARIADB_DATABASE_NAME CHARACTER SET '$MARIADB_DATABASE_CHARACTER_SET' COLLATE '$MARIADB_DATABASE_COLLATE';" >> tmp +echo "GRANT ALL PRIVILEGES ON $MARIADB_DATABASE_NAME.* TO '$MARIADB_CUSTOMER_NAME'@'%';" >> tmp +echo "FLUSH PRIVILEGES;" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +echo "Done!" diff --git a/delete_database_from_customer b/delete_database_from_customer new file mode 100755 index 0000000..d282448 --- /dev/null +++ b/delete_database_from_customer @@ -0,0 +1,108 @@ +#!/bin/bash + +echo "####################################################################" +echo "# docker_mariadb delete_database_from_customer script #" +echo "# Dennis Buchhorn - bucde@b-eit.de #" +echo "####################################################################" +echo "# WARNING: password is plain text! #" +#echo "# #" +echo "####################################################################" +echo "" + +MARIADB_CONTAINER_NAME="" +MARIADB_ROOT_PASSWORD="" + +TMP=$(docker container ls --format "{{.Names}}") + +for ENTRY in $TMP; do + CONTAINER_LIST+=($ENTRY) +done + +if [[ ${#CONTAINER_LIST[@]} > 0 ]]; then + echo "List of all running containers:" + + for I in ${!CONTAINER_LIST[@]}; do + echo " Number [$I]: ${CONTAINER_LIST[$I]}" + done +else + echo "No containers running!" + + exit 1 +fi + +read -p "Enter mariadb container number: " TMP + +MARIADB_CONTAINER_NAME="${CONTAINER_LIST[$TMP]}" + +read -p "Enter mariadb root password: " MARIADB_ROOT_PASSWORD + +rm -f tmp +touch tmp +echo "SELECT user FROM mysql.user;" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +for ENTRY in $TMP; do + if ! [[ $ENTRY == "root" || $ENTRY == "mariadb.sys" ]]; then + CUSTOMER_LIST+=($ENTRY) + fi +done + +if [[ ${CUSTOMER_LIST[@]} > 0 ]]; then + echo "List of all customers:" + + for I in ${!CUSTOMER_LIST[@]}; do + echo " Number [$I]: ${CUSTOMER_LIST[$I]}" + done +else + echo "No customers!" + + exit 1 +fi + +read -p "Enter customer number: " TMP + +MARIADB_CUSTOMER_NAME="${CUSTOMER_LIST[$TMP]}" + +rm -f tmp +touch tmp +echo "SELECT db FROM mysql.db WHERE user='$MARIADB_CUSTOMER_NAME';" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +for ENTRY in $TMP; do + DATABASE_LIST+=($ENTRY) +done + +if [[ ${#DATABASE_LIST[@]} > 0 ]]; then + echo "List of all databases from $MARIADB_CUSTOMER_NAME:" + + for I in ${!DATABASE_LIST[@]}; do + echo " Number [$I]: ${DATABASE_LIST[$I]}" + done +else + echo "No databases!" + + exit 1 +fi + +read -p "Enter database number: " TMP + +MARIADB_DATABASE_NAME="${DATABASE_LIST[$TMP]}" + +read -p "!!! WARNING !!! Database '$MARIADB_DATABASE_NAME' will be deleted! Press ENTER to continue or CTRL+C to abort..." + +rm -f tmp +touch tmp +echo "REVOKE ALL PRIVILEGES ON $MARIADB_DATABASE_NAME.* FROM '$MARIADB_CUSTOMER_NAME';" >> tmp +echo "DROP DATABASE IF EXISTS $MARIADB_DATABASE_NAME;" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +echo "Done!" diff --git a/get_customers b/get_customers new file mode 100755 index 0000000..2e670c0 --- /dev/null +++ b/get_customers @@ -0,0 +1,65 @@ +#!/bin/bash + +echo "####################################################################" +echo "# docker_mariadb get_customers script #" +echo "# Dennis Buchhorn - bucde@b-eit.de #" +echo "####################################################################" +echo "# WARNING: password is plain text! #" +#echo "# #" +echo "####################################################################" +echo "" + +MARIADB_CONTAINER_NAME="" +MARIADB_ROOT_PASSWORD="" + +TMP=$(docker container ls --format "{{.Names}}") + +for ENTRY in $TMP; do + CONTAINER_LIST+=($ENTRY) +done + +if [[ ${#CONTAINER_LIST[@]} > 0 ]]; then + echo "List of all running containers:" + + for I in ${!CONTAINER_LIST[@]}; do + echo " Number [$I]: ${CONTAINER_LIST[$I]}" + done +else + echo "No containers running!" + + exit 1 +fi + +read -p "Enter mariadb container number: " TMP + +MARIADB_CONTAINER_NAME="${CONTAINER_LIST[$TMP]}" + +read -p "Enter mariadb root password: " MARIADB_ROOT_PASSWORD + +rm -f tmp +touch tmp +echo "SELECT user FROM mysql.user;" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +for ENTRY in $TMP; do + if ! [[ $ENTRY == "root" || $ENTRY == "mariadb.sys" ]]; then + CUSTOMER_LIST+=($ENTRY) + fi +done + +if [[ ${CUSTOMER_LIST[@]} > 0 ]]; then + echo "List of all customers:" + + for I in ${!CUSTOMER_LIST[@]}; do + echo " ${CUSTOMER_LIST[$I]}" + done +else + echo "No customers!" +fi + +rm -f tmp + +echo "Done!" diff --git a/get_databases_from_customer b/get_databases_from_customer new file mode 100755 index 0000000..84b285b --- /dev/null +++ b/get_databases_from_customer @@ -0,0 +1,93 @@ +#!/bin/bash + +echo "####################################################################" +echo "# docker_mariadb get_databases_from_customer script #" +echo "# Dennis Buchhorn - bucde@b-eit.de #" +echo "####################################################################" +echo "# WARNING: password is plain text! #" +#echo "# #" +echo "####################################################################" +echo "" + +MARIADB_CONTAINER_NAME="" +MARIADB_ROOT_PASSWORD="" + +TMP=$(docker container ls --format "{{.Names}}") + +for ENTRY in $TMP; do + CONTAINER_LIST+=($ENTRY) +done + +if [[ ${#CONTAINER_LIST[@]} > 0 ]]; then + echo "List of all running containers:" + + for I in ${!CONTAINER_LIST[@]}; do + echo " Number [$I]: ${CONTAINER_LIST[$I]}" + done +else + echo "No containers running!" + + exit 1 +fi + +read -p "Enter mariadb container number: " TMP + +MARIADB_CONTAINER_NAME="${CONTAINER_LIST[$TMP]}" + +read -p "Enter mariadb root password: " MARIADB_ROOT_PASSWORD + +rm -f tmp +touch tmp +echo "SELECT user FROM mysql.user;" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +for ENTRY in $TMP; do + if ! [[ $ENTRY == "root" || $ENTRY == "mariadb.sys" ]]; then + CUSTOMER_LIST+=($ENTRY) + fi +done + +if [[ ${CUSTOMER_LIST[@]} > 0 ]]; then + echo "List of all customers:" + + for I in ${!CUSTOMER_LIST[@]}; do + echo " Number [$I]: ${CUSTOMER_LIST[$I]}" + done +else + echo "No customers!" + + exit 1 +fi + +read -p "Enter customer number: " TMP + +MARIADB_CUSTOMER_NAME="${CUSTOMER_LIST[$TMP]}" + +rm -f tmp +touch tmp +echo "SELECT db FROM mysql.db WHERE user='$MARIADB_CUSTOMER_NAME';" >> tmp + +TMP=$(cat tmp | docker exec -i $MARIADB_CONTAINER_NAME mysql -uroot -p$MARIADB_ROOT_PASSWORD -BN) + +rm -f tmp + +for ENTRY in $TMP; do + DATABASE_LIST+=($ENTRY) +done + +if [[ ${#DATABASE_LIST[@]} > 0 ]]; then + echo "List of all databases from $MARIADB_CUSTOMER_NAME:" + + for I in ${!DATABASE_LIST[@]}; do + echo " ${DATABASE_LIST[$I]}" + done +else + echo "No databases!" +fi + +rm -f tmp + +echo "Done!"