错误代码:1133。在用户表中找不到任何匹配的行

Jh6*_*h62 7 mysql users

我正在阅读 O'Relly “Learning MySQL”,它说您可以通过执行以下操作在 MySQL 中创建一个用户:

mysql> GRANT ALL ON *.* TO 'jill'@'%.invyhome.com' IDENTIFIED BY 'the_password';
Query OK, 0 rows affected (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

但如果我尝试这样做:

-> grant select on testgrounds.personas to ''@'localhost';
--> Error Code: 1133. Can't find any matching row in the user table
Run Code Online (Sandbox Code Playgroud)

但是如果我使用密码它会成功:

->grant select on testgrounds.personas to ''@'localhost' identified by 'pass';
--> 0 row(s) affected
Run Code Online (Sandbox Code Playgroud)

我不得不恢复用户 root 的权限,因为我正在试验并且我把它们搞砸了,所以我想在这样做之前我实际上可以使用书中的语句(我不记得 100%)

-> select current_user;
--> 'root@localhost'

-> show grants;
--> 'GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' IDENTIFIED BY PASSWORD \'*4ACFE3202A5FF5CF467898FC58AAB1D615029441\' WITH GRANT OPTION'
--> 'GRANT ALL PRIVILEGES ON `testgrounds`.* TO \'root\'@\'localhost\' WITH GRANT OPTION'
--> 'GRANT PROXY ON \'\'@\'\' TO \'root\'@\'localhost\' WITH GRANT OPTION'
Run Code Online (Sandbox Code Playgroud)

我的 MySQL 安装或设置有问题吗?

小智 3

这不是 MySQL 安装或设置的问题。

每个帐户名都由用户名和主机名组成,例如“user_name”@“host_name”,即使未指定主机名也是如此。来自MySQL 参考手册:

MySQL 帐户名由用户名和主机名组成。这使得可以为可以从不同主机连接的同名用户创建帐户。

这还允许 MySQL 根据它们连接的主机授予不同级别的权限。

当更新 MySQL 无法识别主机部分的帐户的授权时,它将返回错误代码 1133,除非它有密码来识别该帐户。

另外,MySQL 允许仅通过用户名指定帐户名,但在这种情况下,它被视为“user_name”@“%”。