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

MySQL 5.1.31在Windows XP上运行。

本地 MySQL服务器(192.168.233.142),我可以作为根连接,如下所示:

>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中只有2个条目:

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

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

编辑

正如Paulo所build议的那样,我尝试用一​​个IP特定条目replace%的mysql.user条目,所以我的用户performance在如下所示:

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

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

你必须把它作为根:

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

;

其中IP是您想允许访问的IP,USERNAME是您用来连接的用户

如果你想允许从任何IP访问只需要%而不是你的IP

然后你只需要放

 FLUSH PRIVILEGES; 

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

在授予远程访问权限之后,我得到了同样的错误,直到我做到这一点:

来自/etc/mysql/my.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

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

  1. 转到我的sql bin文件夹或将其添加到PATH
  2. 通过mysql -uroot -proot (或任何root密码)login到root。
  3. 成功后,你将得到mysql>
  4. 为该用户提供所有的授予访问权限。

 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) 

希望这会有所帮助

Paulo的帮助使我find了解决办法。 这是以下的组合:

  • 包含一个美元符号的密码
  • 我正在尝试从Linux shell进行连接

bash shell将美元符号视为扩展为环境variables的特殊字符,所以我们需要用反斜杠来转义它。 顺便说一下,在美元符号是密码的最后一个字符的情况下,我们不必这样做

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

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

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

在Windows上,默认情况下创buildmysql root帐户,只允许从本地主机进行访问,除非在安装期间select了允许远程计算机访问的选项。

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

例如:

 CREATE USER 'krish'@'%' IDENTIFIED BY 'password'; 
  1. 尝试再次flush privileges

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

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

在我的情况下,我试图连接到分OS的远程MySQL服务器。 经过许多解决scheme(授予所有权限,删除IP绑定,启用networking)问题仍然没有得到解决。

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

这里是我如何检查和解决这个问题的小记事。

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

    telnet(mysql服务器ip)[portNo]

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

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

  • 不build议这样做的生产环境,但如果你的iptablesconfiguration不正确,添加规则可能不会解决问题。 在这种情况下,应该这样做:

    服务iptables停止

希望这可以帮助。

如果你正在使用dynamicIP只是授予访问192.168.2。%所以现在你不必担心每次授予访问您的IP地址。

mysqlconfiguration文件的新位置是

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

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

用户/主机组合可能已经被创build而没有密码。

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

我可以login

 mysql -u username -p PASSWORD 

本地,而不是从IPADDRESS

 mysql -u --host=HOST -p PASSWORD 

(我实际上可以从IPADDRESSlogin而不使用密码)

 mysql -u --host=HOST 

设置密码允许访问:

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

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

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