ОШИБКА 1044 (42000): доступ запрещен для "root" со всеми привилегиями
У меня странная ошибка. Я зарегистрирован в локальном Mysql как root через командную строку. После создания базы данных:
create database some_db;
Затем предоставление прав некоторым пользователям:
grant all privileges on some_db.* to [email protected]'localhost' identified by 'password';
Это дает ошибку:
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'some_db'
Разрешения для root (show grants;) показывают:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*8919C53DC7A4DFBF3F8584382E96463583EB7FDA'
Я также убедился, что я зарегистрирован как root:
select current_user();
И это подтверждает, что я зарегистрирован как "root" @ "localhost"
Я создал базу данных и назначил пользователя несколько раз и никогда не имел проблемы. Почему я не могу назначить пользователя базе данных, созданной root, во время входа в систему под именем root?
p.s. от других сообщений, я думаю, что проблема может быть вызвана некоторыми странными пользователями.
select host, user from mysql.user;
Некоторые пользователи, которых я еще не добавил, но не отображаются:
MY_COMPuTER_name.local | ''
MY_COMPuTER_name.local | root
Я попытался удалить этих пользователей
drop user 'root'@'MY_COMPuTER_name.local';
drop user ''@'MY_COMPuTER_name.local';
Однако, пока он заявляет, что запрос выполняется успешно, пользователи не отбрасываются даже после привилегий flush. Почему я не могу удалить пользователей? Любая помощь очень удобна
Ответы
Ответ 1
Во-первых, определите пользователя, с которым вы вошли в систему, как:
select user();
select current_user();
Результат для первой команды - это то, что вы пытались войти в систему, а второй - это то, на что вы действительно связаны. Убедитесь, что вы вошли в систему как [email protected]
в mysql.
Grant_priv
до [email protected]
. Вот как вы можете проверить.
mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
+-----------+------------------+-------------------------------------------+------------+------------+
| host | user | password | Grant_priv | Super_priv |
+-----------+------------------+-------------------------------------------+------------+------------+
| localhost | root | ***************************************** | N | Y |
| localhost | debian-sys-maint | ***************************************** | Y | Y |
| localhost | staging | ***************************************** | N | N |
+-----------+------------------+-------------------------------------------+------------+------------+
Вы можете видеть, что для Grant_priv установлено значение N для root @localhost. Это должно быть Y. Ниже описано, как это сделать:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
Я зашел обратно, все было в порядке.
Ответ 2
Если вы получите сообщение об ошибке 1044 (42000) при попытке выполнить команды SQL в MySQL (который установлен на сервере XAMPP), то вот решение:
-
Закройте командную строку MySQL.
-
Откройте команду cmd (из меню "Пуск" → запустить → cmd), которая отобразит: C:\Users\User > _
-
Перейдите в MySQL.exe, введя следующие команды:
C:\Users\User>cd\
C:\>cd xampp
C:\xampp>cd mysql
C:\xxampp\mysql>cd bin
C:\xampp\mysql\bin>mysql -u root
-
Теперь попробуйте создать новую базу данных, набрав:
mysql> create database employee;
если он показывает:
Query OK, 1 row affected (0.00 sec)
mysql>
Тогда поздравляю! Вы хорошо пойдете...
Ответ 3
Причина, по которой я не мог удалить некоторых пользователей с помощью оператора "drop", был в Mysql http://bugs.mysql.com/bug.php?id=62255 с именем хоста содержащие буквы верхнего регистра. Решение выполнило следующий запрос:
DELETE FROM mysql.user where host='Some_Host_With_UpperCase_Letters';
Я все еще пытаюсь понять другую проблему, когда пользователь root со всеми разрешениями не может предоставить привилегии новому пользователю для конкретной базы данных