Почему пользователь не может создать базу данных MySQL (MariaDB)
При попытке создать базу данных вы можете столкнуться с ошибкой:
ERROR 1044 (42000): Access denied for user 'mial'@'localhost' to database 'TestDB'
Причина ошибки в том, что указанный пользователь (в данном примере имя пользователя «mial») не имеет полномочий создавать базы данных.
Решение проблемы зависит от ситуации, в которой вы с ней столкнулись.
1. Ошибка «ERROR 1044 (42000)» на виртуальном хостинге
Если вы хотите создать новую базу данных на хостинге, например, через веб-интерфейс phpMyAdmin или в скрипте PHP и получаете ошибку «ERROR 1044 (42000)», то это является обычной ситуацией. Обычно на хостинге предусмотрен другой способ создания баз данных и пользователей, например, в панели управления на соответствующей вкладке.
2. Ошибка на локальном компьютере или виртуальном выделенном сервере
Данная ошибка может возникнуть в ситуации, когда у вас имеется полный root доступ к серверу MySQL (MariaDB), но вы создали дополнительного пользователя для выполнения SQL запросов из PHP скрипта или для других целей.
Вариантов решения в этом случае несколько.
1) Создайте базу данных пользователем root и назначьте привилегии для работы с базой данных указанному пользователю
К примеру, выполняем вход как пользователь root:
mysql -u root -p
Или:
mariadb -u root -p
Создайте базу данных (замените «TestDB» на имя базы данных):
CREATE DATABASE TestDB;
Назначьте привилегии работы с указанной базой данных нужному пользователю (замените «TestDB» на имя базы данных, а «YOUR-USERNAME» на имя пользователя):
GRANT ALL PRIVILEGES ON TestDB.* TO 'YOUR-USERNAME'@'localhost';
Проверьте назначенные привилегии:
SHOW GRANTS FOR 'YOUR-USERNAME'@'localhost';
Например, имя пользователя «mial», тогда запросы следующие:
GRANT ALL PRIVILEGES ON TestDB.* TO 'mial'@'localhost'; SHOW GRANTS FOR 'mial'@'localhost';
В столбце «Grants for mial@localhost» следующая строка повторяет присвоение привилегий пользователю и в то же самое время означает, что всё сработало:
GRANT ALL PRIVILEGES ON `TestDB`.* TO `mial`@`localhost`
Итак, мы имеем следующий результат:
- база данных создана
- обычный пользователь не получил прав на создание баз данных и доступа к другим базам данных
- обычный пользователь может создавать и редактировать таблицы и записи в базе данных, на которые ему даны привилегии
2) Разрешить обычному пользователю создавать базы данных
Следующий запрос разрешает пользователю создавать базы данных (замените «YOUR-USERNAME» на имя пользователя):
GRANT CREATE ON *.* TO 'YOUR-USERNAME'@'localhost';
К примеру, для пользователя «mial» команды следующие:
Выполняем вход как пользователь root:
mysql -u root -p
Или:
mariadb -u root -p
Даём указанному пользователю привилегии создавать базы данных:
GRANT CREATE ON *.* TO 'mial'@'localhost';
Проверяем назначенные привилегии:
SHOW GRANTS FOR 'mial'@'localhost';
Теперь можно выполнить вход под обычным пользователем, который ранее не мог создать базу данных из-за ошибки:
mysql -u mial -p
Или:
mariadb -u mial -p
Создаём базу данных:
CREATE DATABASE TestDB;
Как можно убедиться, ошибка «ERROR 1044 (42000): Access denied for user» исправлена.
Получен следующий результат:
- обычный пользователь может создавать базы данных
- но при этом обычный пользователь получает доступ и к другим базам данных, например, может просматривать их содержимое, может создавать другие базы данных
Связанные статьи:
- Ошибка при использовании выражений USE в MySQL (MariaDB): «ERROR 1044 (42000): Access denied for user» (РЕШЕНО) (100%)
- Почему «mysql -h» не показывает справку. Ошибка «option '-h' requires an argument» (РЕШЕНО) (100%)
- Почему MySQL (MariaDB) запрашивает пароль, даже если он указан с опцией «-p» (РЕШЕНО) (100%)
- Ошибка «ERROR 1143 (42000)»: command denied to user for column in table в MySQL (MariaDB) (РЕШЕНО) (100%)
- Ошибка «ERROR 1142 (42000)»: command denied to user for table в MySQL (MariaDB) (РЕШЕНО) (100%)
- Как запустить bundle install от root (RANDOM - 5.8%)