Скрипт создания БД (для пользователей)
Есть пользователь БД user1, которому разрешено создавать свои базы данных (пусть их имена будут начинаться с user1base- ). После создания базы он должен иметь все права на свою базу. Можно создать скрипт через который будут добавляться базы (удалятся) самим пользователем. При этом он имеет доступ только к своим базам.
#!/bin/bash UID_ROOT=0 PASS_ROOT="mysql_rootpass" DB_PREFIX="user1base" DB_USER="user1" if [ "$UID" -ne "$UID_ROOT" ] then echo "Для работы требуются права root" exit 0 fi if [ -z "$1" ] #1 - действие then echo "Значение не задано" exit 0 fi case "$1" in ############################################################################################################## "add" ) if [ -z "$2" ] || [ -z "$3" ] #2 - имя базы #3 - кодировка then echo "Значение не задано" exit 0 fi # Создание базы echo "CREATE DATABASE \`"$DB_PREFIX"-"$2"\`;" | mysql -u root -p$PASS_ROOT ####################################################################################################### # Заданние локали ####################################################################################################### case "$3" in "utf8" ) echo "ALTER DATABASE \`"$DB_PREFIX"-"$2"\` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;" | mysql -u root -p$PASS_ROOT ;; "cp1251" ) echo "ALTER DATABASE \`"$DB_PREFIX"-"$2"\` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;" | mysql -u root -p$PASS_ROOT ;; * ) echo "Локаль не установлена" ;; esac ###################################################################################################### # Установка прав echo "GRANT ALL ON \`"$DB_PREFIX"-"$2"\`.* TO \`"$DB_USER"\`@\`localhost\`;" | mysql -u root -p$PASS_ROOT echo "GRANT ALL ON \`"$DB_PREFIX"-"$2"\`.* TO \`"$DB_USER"\`@\`%\`;" | mysql -u root -p$PASS_ROOT echo "base created" ;; "del" ) if [ -z "$2" ] #2 - имя базы then echo "Значение не задано" exit 0 fi echo "DROP DATABASE \`"$DB_PREFIX"-"$2"\`;" | mysql -u root -p$PASS_ROOT echo "DELETE FROM db WHERE db.Db = '"$DB_PREFIX"-"$2"' ;" | mysql -u root -p$PASS_ROOT mysql echo "base droped" ;; * ) echo "Команда не найдена" ;; esac exit 0
Выполнять
./script add base1 utf8 ./script add base1 cp1251 ./script del base1
Так как скрипт содержит root пароль от MySQL, стоит поставить права на файл 700 владелец:группа root:root, а разрешение на его выполнение назначить для пользователя в sudo. Таки образом увидеть содержимое скрипта будет невозможно.
Обсуждение