在测试环境中,我通过以下方式创建了一个同名的用户和一个数据库:
create user 'test'@'localhost' identified by 'blablabla';
create database test;
当我以这种方式将用户与数据库关联(同时也向用户授予所有权限)时:
grant all privileges on test.* to test;
我收到这个错误:
错误 1133 (42000):在用户表中找不到任何匹配的行
我不明白什么不匹配。因为show databases;
有SELECT user FROM mysql.user;
线索表明用户和数据库都已成功创建,所以我想念为什么会出现此错误。
为什么我会收到此错误?
Abhik Bose 的更新:
mysql> grant all privileges on test.* to 'test'@'localhost';
grant all privileges on test.* to 'test'@'localhost';
^C
mysql> grant all privileges on test.* to 'test'@'localhost';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 4774
Current database: *** NONE ***
Query OK, 0 rows affected (0.00 sec)
答案1
与 PostgreSQL 不同,MySQL 和 MariaDB 没有单用户名角色。test
未定义主机名的用户被解释为 user test@%
,例如任何host,它是不同的用户,test@localhost
并且可以具有完全不同的密码。
你会想做
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
反而。事实上,您可以CREATE USER
完全省略单独的语句并执行以下操作:
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'password';
MySQL 将处理剩下的事情。