主机名通配符 % 不包括 localhost 或 127.0.0.0

主机名通配符 % 不包括 localhost 或 127.0.0.0

在 Windows 上的 MariaDB 中,我使用以下内容创建用户和数据库

flush privileges;
CREATE USER 'test-one'@'%' IDENTIFIED BY 'test-one';
GRANT USAGE ON *.* TO 'test-one'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `test-one`;
GRANT ALL PRIVILEGES ON `test-one`.* TO 'test-one'@'%';

之后我无法连接到数据库

.\mysql.exe -u "test-one" -p
Enter password: ********
ERROR 1045 (28000): Access denied for user 'test-one'@'localhost' (using password: YES)

类似行为

.\mysql.exe -u "test-one" -p -h 127.0.0.1

有效的方法是(用实际的主机名替换).\mysql.exe -u "test-one" -p -h

这是设计使然吗?主机名通配符“%”不包括 localhost 也不包括 127.0.0.1

答案1

这是正确的,只要匿名用户数据库中存在。当您删除这些用户localhost127.0.0.1开始匹配通配符时。

来自MariaDB 文档

请注意,使用“%”通配符主机创建用户时添加的凭据并非在所有情况下都授予访问权限。例如,某些系统附带匿名本地主机用户,当从本地主机连接时,该用户将优先。

mysql_secure_installation运行脚本时也可以删除这些匿名用户:

默认情况下,MariaDB 安装有一个匿名用户,允许任何人登录 MariaDB,而无需为他们创建用户帐户。这仅用于测试,并使安装过程更顺利。您应该在进入生产环境之前将其删除。

删除匿名用户?[Y/n]

相关内容