zaLinux.ru

Ошибка «ERROR 1044 (42000): Access denied for user ‘mial’@’localhost’ to database ‘TestDB’». Не удаётся создать базу данных MySQL (РЕШЕНО)


Почему пользователь не может создать базу данных 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» исправлена.

Получен следующий результат:

  • обычный пользователь может создавать базы данных
  • но при этом обычный пользователь получает доступ и к другим базам данных, например, может просматривать их содержимое, может создавать другие базы данных

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *