mariadb 10.1:拒绝用户访问,仅限 ipv6

mariadb 10.1:拒绝用户访问,仅限 ipv6

%添加带有 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。或者,如果您这样做,请直接操作userdb表,不要使用 UI 来创建/更改用户:它有缺陷。

此外:定义权限的两个表:mysql.db & mysql.user并不像您想象的那样独立。相反,该user表用于选择要连接的主机,然后db检查该表是否具有要连接的数据库的权限,以确定完全符合。如果user包含2007.1.2.3::23db仅包含的规则%,则通过 IPv6 连接登录仍将导致access denied,即使这似乎没有意义。

解决方案是在和表2007.1.2.3::23中明确地拥有的访问记录。mysql.dbmysql.user

相关内容