我在 MySQL 中创建了一个用户,但是无法用它登录。
MariaDB [(none)]> create user fe_joomla;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on fe_joomla.* to fe_joomla;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show grants for fe_joomla;
+----------------------------------------------------------+
| Grants for fe_joomla@% |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'fe_joomla'@'%' |
| GRANT ALL PRIVILEGES ON `fe_joomla`.* TO 'fe_joomla'@'%' |
+----------------------------------------------------------+
2 rows in set (0.00 sec)
$ mysql -u fe_joomla fe_joomla
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'fe_joomla'
答案1
旧版本的 MySQL 默认创建了一些用户名为空的测试帐户。这些帐户大多无害,但却非常成问题。有一个脚本可以mysql_secure_installation
清除这些帐户,但似乎在设置系统时没有运行该脚本。
运行此查询以确认:
mysql> SELECT * FROM mysql.user WHERE user = '';
请注意,这''
是两个单引号字符,'
而不是一个双引号"
。
确保拥有完整备份后为了安全起见,请删除这些测试帐户。(这应该是一个非常安全的操作,但备份是很好的做法。)
mysql> DELETE FROM mysql.user WHERE user = '';
mysql> FLUSH PRIVILEGES;
这些测试帐户的问题在于,在匹配用户名时,会出现一些神奇的行为,而空用户名则具有特殊含义。这是一个糟糕的功能,最初可能是为了使入门更容易而添加的。
此后,您的新用户应该可以正常工作...但请注意,您不应该创建没有密码的帐户。
答案2
看起来您没有输入命令“flush permission”来在不重新启动的情况下激活新用户。
答案3
我删除了 fe_joomla 用户,重新创建了该用户fe_joomla@localhost
并授予了权限,fe_joomla@localhost
一切正常。mysql -u fe_joomla fe_joomla
现在我可以使用。
create user fe_joomla@localhost;
grant all on fe_joomla.* to fe_joomla@localhost;
迈克尔的回答可能也有效。