用户访问被拒绝' @' ip'(使用密码:是)

时间:2016-01-17 23:36:01

标签: mysql

我发现了很多关于此错误的帖子,尝试了所有但仍然得到相同的错误。我正在尝试从我的远程应用程序和mysql客户端连接到ubuntu服务器上的mysql。让我发布我已经采取的任何步骤:

  1. 停止ubuntu服务器上的防火墙:iptables -F。也试过sudo服务ufw stop。
  2. 评论" bind-address"在/etc/mysql/my.cnf并重新启动mysql。
  3. 在mysql中添加了用户:CREATE USER' test' @'%'由' testpwd';
  4. 识别
  5. 上授予所有特权。以测试' @'%'由' testpwd'识别WITH GRANT OPTION;
  6. FLUSH PRIVILEGES;
  7. 我可以通过"选择主机,用户来自mysql.user&#34 ;;
  8. 看到新用户的输入
  9. 再次重启mysql。还是一样的错误!
  10. 现在我想也许防火墙还有一些问题,所以补充说:iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT 问题仍然存在。帮助将非常感激,否则我将陷入严重的麻烦。

3 个答案:

答案 0 :(得分:4)

"用户访问被拒绝' @' ip'(使用密码:是)"是一个MySQL错误。

这意味着在网络级别一切正常,因为要拒绝作为给定用户访问 ,服务器必须了解您是哪个用户尝试连接为。因此,网络,防火墙,路由等等,必须全部正常工作;服务器必须正在监听等。

问题出在"简单"在身份验证

尝试本地连接到数据库(以覆盖身份验证)并检查权限表:

USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';

请记住,您感兴趣的行是提及IP的行(因为错误消息指定IP 主机名 - 在这种情况下,它可能是一个DNS问题;主机名是服务器认为你来自的主机名,而不是你真正来自的主机名。)

用户/主机匹配为from more specific to less specific。所以如果你已经有了:

user      host     password
test      1.2.3.4  foo

然后跑了,

GRANT... TO test@'%' ... PASSWORD bar

...此赠款可以在任何地方使用 1.2.3.4之外,其中密码将保留为' foo'。

从手册(上面的链接):

  

服务器使用排序规则来排序具有最特定性的行   主机值首先。文字主机名和IP地址最多   具体。 (文字IP地址的特殊性不受影响   是否有网络掩码,所以192.168.1.13和   192.168.1.0/255.255.255.0被认为是同样具体的。)模式'%'意思是“任何主人”,并且是最不具体的。空字符串   ''也意味着“任何东道主”,但在'%'之后排序。具有相同主机的行   值首先按最具特定的用户值排序(空白   用户值表示“任何用户”,并且最不具体)。对于行   同等特定的主机和用户值,顺序是不确定的。

你可能被迫做

USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

确保授权表中没有任何虚假行,引用用户'测试'。

(另外,GRANT应该是,我认为,

GRANT ALL PRIVILEGES ON databasename.*

安全疑问(与答案无关)

上面的手册说:文字IP地址的特殊性不受其是否具有网络掩码的影响,因此192.168.1.13和192.168.1.0/255.255.255.0被认为是同等特定的。 / p>

现在乍一看127.0.0.1/0.0.0.0似乎对 localhost 非常具体(且无害)。网络掩码,如果我没有弄错的话,确保它等同于%,除非它非常具体并且将首先运行。因此

test     bar         %           
test     localfoo    127.0.0.1/0.0.0.0

表示test的密码来自任何地方{&#34}}" bar"根本就是" localfoo"。

没有人会错误地插入这样的补助金,但有错误和错误

答案 1 :(得分:1)

首先检查 - 它的网络/防火墙问题与否。 使用--skip-grant-tables启动MySql服务器,然后尝试连接到它。

答案 2 :(得分:0)

当尝试连接到我的MariaDb数据库时,.net核心控制台应用程序上出现了相同的错误。 我终于发现我的连接字符串中的uid不正确,因为它区分大小写! 即使我觉得自己很愚蠢,也可能会有所帮助...