25

我有奇怪的错误。我通过命令行以 root 身份登录本地 Mysql。创建数据库后:

create database some_db;

然后授予某些用户特权:

grant all privileges on some_db.* to some_user@'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 创建的数据库?

ps来自其他帖子,我认为这个问题可能是由于一些奇怪的用户引起的

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';

但是,虽然它表明查询运行成功,但即使在刷新权限后用户也不会被删除。为什么我无法删除用户?任何帮助都非常有用

4

4 回答 4

50

首先,确定您登录的用户为:

 select user();
 select current_user();

第一个命令的结果是您尝试登录的身份,第二个是您实际连接的身份。确认您已像root@localhost在 mysql 中一样登录。

Grant_privroot@localhost. 这是您可以检查的方法。

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          |
+-----------+------------------+-------------------------------------------+------------+------------+

您可以看到,对于 root@localhost,Grant_priv 设置为 N。这需要是 Y。以下是解决此问题的方法:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';

我重新登录了,很好。

于 2014-02-13T04:01:14.693 回答
2

如果您尝试在 MySQL(随 XAMPP 服务器安装)cmd 提示符下运行 SQL 命令时收到错误 1044 (42000),则解决方案如下:

  1. 关闭 MySQL 命令提示符。

  2. 打开你的 cmd 提示符(从开始菜单 -> 运行 -> cmd),它将显示:C:\Users\User>_

  3. 通过键入以下命令转到 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

  1. 现在尝试通过键入以下内容创建一个新数据库:

    mysql> create database employee;
    

    如果显示:

    Query OK, 1 row affected (0.00 sec)
    mysql>
    

    那么恭喜!你已准备好出发...

于 2014-08-03T11:10:26.657 回答
1

我无法通过“drop”语句删除一些用户的原因是 Mysql http://bugs.mysql.com/bug.php?id=62255中存在一个错误,其主机名包含大写字母。该解决方案正在运行以下查询:

DELETE FROM mysql.user where host='Some_Host_With_UpperCase_Letters';

我仍在尝试解决另一个问题,即具有所有权限的 root 用户无法为特定数据库的新用户授予权限

于 2014-02-13T03:33:13.517 回答
0

尝试在文件 my.cnf 中注释字符串“sql-mode=...”,然后重新启动 mysql。

于 2020-06-19T10:59:15.907 回答