Создание множества баз данных и пользователей в MySQL
В рамках курса “Базы данных” на кафедре ММЭ для выполнения лабораторных работ понадобилось запустить MySQL сервер и создать для каждого студента свою учетную запись и базу данных на сервере.
Для формирования SQL-сценария для создания баз данных и пользователей использовался bash-скрипт. В первой bash-скрипта части читается тектовый файл students.txt, в котором в одну колонку записаны номера зачетных книжек студентов в формате YYYY-NNNNN. Для каждого номера зачетной книжки генерируется пароль pwgen. Результат (номер пароль) записывается в текстовый файл userpass.txt.
#!/bin/bash
BTICK='`'
cat /dev/null > 'userpass.txt'
while IFS=" " read -r USERNAME remainder
do
PASSWORD=`pwgen 12 1`
echo $USERNAME $PASSWORD >> 'userpass.txt'
done < "students.txt"
Во второй части из файла userpass.txt читаются номера зачетных книжек и пароли, формируются имя пользователя uYYYY_NNNNN и база данных db_YYYY_NNNNN. SQL-скрипт создания базы данных и пользователя записывается в файл create_user_script.sql.
cat /dev/null > 'create_user_script.sql'
while IFS=" " read -r UNAME UPASS remainder
do
UNAME=${UNAME//-/_}
DBNAME="db_$UNAME"
UNAME="u$UNAME"
Q1="CREATE DATABASE IF NOT EXISTS $DBNAME;"
Q2="GRANT ALL ON ${BTICK}$DBNAME${BTICK}.* TO '$UNAME'@'%' IDENTIFIED BY '$UPASS';"
echo $Q1 >> 'create_user_script.sql'
echo $Q2 >> 'create_user_script.sql'
done < "userpass.txt"
echo 'FLUSH PRIVILEGES;' >> 'create_user_script.sql'