启用远程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服务器远程访问被禁用。 为用户提供远程访问的过程是。
- 转到我的sql bin文件夹或将其添加到
PATH
- 通过
mysql -uroot -proot
(或任何root密码)login到root。 - 成功后,你将得到
mysql>
- 为该用户提供所有的授予访问权限。
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';
-
尝试再次
flush privileges
。 -
尝试重新启动服务器以重新加载授权。
-
尝试使用主机“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/