启用远程MySQL连接:ERROR 1045(28000):拒绝用户访问

时间:2011-12-05 03:50:13

标签: mysql

在Windows XP上运行的MySQL 5.1.31。

本地 MySQL服务器(192.168.233.142)我可以按root连接如下:

>mysql --host=192.168.233.142 --user=root --password=redacted

远程计算机(192.168.233.163),我可以看到mysql端口已打开:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

但是当我尝试从远程机器连接到mysql时,我收到了:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

我在mysql.user中只有两个条目:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

启用远程访问还需要做些什么?

修改

正如下面的Paulo所建议的那样,我尝试用特定于IP的条目替换%的mysql.user条目,因此我的用户表现在看起来像这样:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

然后我重新启动机器,但问题仍然存在。

13 个答案:

答案 0 :(得分:197)

你必须把它作为root:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

其中IP是您要允许访问的IP,USERNAME是您用来连接的用户,PASSWORD是相关密码。

如果您想允许从任何IP进行访问,只需将%代替您的IP

然后你只需要把

FLUSH PRIVILEGES;

或重新启动mysql服务器就是这样。

答案 1 :(得分:83)

在我批准远程访问之后,我收到了同样的错误:

来自/etc/mysql/my.cnf

在较新版本的mysql中,文件的位置是 /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(评论此行:bind-address = 127.0.0.1

然后运行service mysql restart

答案 2 :(得分:55)

默认情况下,MySQL服务器远程访问被禁用。提供对用户的远程访问的过程是。

  1. 转到我的sql bin文件夹或将其添加到PATH
  2. mysql -uroot -proot(或根密码为。)
  3. 登录root
  4. 成功后,您将获得mysql>
  5. 为该用户提供全部授权访问权。

  6. GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';
    

    此处IP是您要允许远程访问的IP地址,如果我们将%任何IP地址都可以远程访问。

    示例:

    C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin
    
    C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot
    
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
    Query OK, 0 rows affected (0.27 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.25 sec)
    

    这适用于其他用户。

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    

    希望这会有所帮助

答案 3 :(得分:20)

Paulo的帮助引导我找到解决方案。它是以下的组合:

  • 密码包含美元符号
  • 我试图从Linux shell连接

bash shell将美元符号视为expansion对环境变量的特殊字符,因此我们需要使用反斜杠对其进行转义。顺便说一下,如果美元符号是密码的最后一个字符,我们必须这样做。

例如,如果您的密码是“pas $ word”,那么从Linux bash我们必须按如下方式连接:

# mysql --host=192.168.233.142 --user=root --password=pas\$word

答案 4 :(得分:8)

你有防火墙吗?确保端口3306已打开。

在Windows上,默认情况下创建的mysql root帐户只允许从localhost访问,除非您在安装过程中选择了启用远程计算机访问权限的选项。

使用'%'作为主机名创建或更新所需用户。

示例:

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';

答案 5 :(得分:4)

  1. 再次尝试flush privileges

  2. 尝试重新启动服务器以重新加载授权。

  3. 尝试使用主机“192.168.233.163”创建用户。 “%”似乎不允许所有(这很奇怪)

答案 6 :(得分:4)

在我的情况下,我试图连接到分操作系统上的远程mysql服务器。经过很多解决方案(授予所有权限,删除IP绑定,启用网络)问题仍然没有得到解决。

事实证明,在研究各种解决方案时,我遇到了iptables,这让我意识到mysql端口3306不接受连接。

以下是关于我如何检查并解决此问题的小说明。

  • 检查端口是否正在接受连接:

    telnet(mysql server ip)[portNo]

  • 添加ip表规则以允许端口上的连接:

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

  • 不建议将其用于生产环境,但如果您的iptables配置不正确,添加规则可能仍然无法解决问题。在这种情况下,应该完成以下操作:

    service iptables stop

希望这有帮助。

答案 7 :(得分:2)

如果您使用的是动态IP,只需授予对192.168.2。%的访问权限,所以现在您不必担心每次都能授予对您的IP地址的访问权限。

答案 8 :(得分:2)

mysql配置文件的新位置是

/etc/mysql/mysql.conf.d/mysqld.cnf

答案 9 :(得分:1)

我正在努力为我的Amazon EC2 Linux实例远程登录MYSQL。发现解决方案是确保我的安全组包含MySQL端口3306的入站规则,以包含我的IP地址(或任何地方的0.0.0.0/0)。我可以在添加此规则后立即远程连接。

答案 10 :(得分:0)

MySQL ODBC 3.51驱动程序是不处理密码中的特殊字符。

“警告 - 如果GRANT命令中的密码包含特殊字符,例如!@#$%^ ?,您可能会对MySQL ODBC 3.51感到严重不满.MySQL ODBC 3.51 ODBC驱动程序不支持这些特殊字符密码框。您将收到的唯一错误消息是“拒绝访问”(使用密码:是)“ - 来自http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

答案 11 :(得分:0)

可能是在没有密码的情况下创建了用户/主机组合。

我假设在为现有用户添加新主机时(使用GUI应用程序),现有密码也将用于新用户/主机组合。

我可以使用

登录
mysql -u username -p PASSWORD

在本地,但不是来自IPADDRESS

mysql -u --host=HOST -p PASSWORD

(我实际上可以在不使用密码的情况下从IPADDRESS登录)

mysql -u --host=HOST

设置密码允许访问:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';

答案 12 :(得分:0)

我的情况非常简单。

如果您输入错误的密码,您可能会遇到此问题。不需要创建用户(用户已经存在),没有其他权限。基本上确保密码正确。所以请再次确认密码是正确的