%
添加带有 host或带有 host 的访问记录smtp.acme.com
在通过 IPv6 访问时无法提供访问权限。使用特定的 IPv6 地址也无法提供访问权限。我只收到“拒绝访问”信息。
SQL 服务器正在监听 Ipv6 (:::3306)。
用户表有这些记录;
User Host
smtp %
或者,或者这些;
User Host
smtp <ipv4 of sql.acme.com>
smtp <ipv6 of sql.acme.com>
smtp 127.0.0.1
smtp localhost
尝试了以下连接:
# Run from the server smtp.acme.com to sql.acme.com:
mysql -usmtp -h sql.acme.com -D mydb -p<password> ## Fails, access denied
mysql -usmtp -h <ipv4 of sql.acme.com> -D mydb -p<password> ## works
mysql -usmtp -h <ipv6 of sql.acme.com> -D mydb -p<password> ## Fails, access denied
# Run locally:
mysql -usmtp -p<password> ## works.
mysql -usmtp -h localhost -p<password> ## works.
mysql -usmtp -h 127.0.0.1 -p<password> ## works.
换句话说,只有通过 IPv6 进行通信时才会发生故障。即使这些记录确实存在。
密码必须正确,因为使用‘%’的版本确实有效。
如何?
答案1
我找到问题的根源了。
步骤 1:不要为此使用 PHPmyadmin。或者,如果您这样做,请直接操作user
和db
表,不要使用 UI 来创建/更改用户:它有缺陷。
此外:定义权限的两个表:mysql.db & mysql.user
并不像您想象的那样独立。相反,该user
表用于选择要连接的主机,然后db
检查该表是否具有要连接的数据库的权限,以确定完全符合。如果user
包含2007.1.2.3::23
但db
仅包含的规则%
,则通过 IPv6 连接登录仍将导致access denied
,即使这似乎没有意义。
解决方案是在和表2007.1.2.3::23
中明确地拥有的访问记录。mysql.db
mysql.user