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

在 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]

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

328830 次浏览

你有防火墙吗? 确保3306端口是开放的。

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

创建或更新以“%”作为主机名的所需用户。

例如:

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

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

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

保罗的帮助引导我找到了解决办法,这是以下几点的结合:

  • 密码里有个美元符号
  • 我试图从一个 Linux shell 连接

Bash shell 将美元符号作为一个特殊字符来对待,因此我们需要用一个反斜杠来转义环境变量。顺便说一下,在美元符号是密码的最后一个字符的情况下,我们 不要必须这样做。

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

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

你必须把这个作为根:

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

;

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

如果你想允许访问任何 IP 只是把 %而不是您的 IP

然后你只需要把

FLUSH PRIVILEGES;

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

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

默认情况下,MySQL 服务器中的远程访问是禁用的。

  1. 转到 sql bin 文件夹或将其添加到 PATH
  2. 通过 mysql -uroot -proot(或者不管 root 密码是什么)登录到 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)

希望这个能帮上忙

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

来自 /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

对于我的 Amazon EC2 Linux 实例,我正在努力远程登录 MYSQL。找到的解决方案是确保我的安全组包含 MySQL 端口3306的入站规则,以包含我的 IP 地址(或0.0.0.0.0适用于任何地方)。一旦我添加了这个规则,就可以立即远程连接。

在我的例子中,我试图连接到 cent OS 上的一个远程 mysql 服务器。在经历了许多解决方案(授予所有特权、删除 ip 绑定、启用网络)之后,问题仍然没有得到解决。

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

下面是我如何检查和解决这个问题的一个小注释。

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

    Telnet (mysql 服务器 ip)[ portNo ]

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

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

  • 不建议在生产环境中使用这种方法,但是如果没有正确配置 iptables,那么添加规则可能仍然无法解决问题。在这种情况下,应采取以下措施:

    服务 iptables 停止

希望这个能帮上忙。

MySQL ODBC 3.51 Driver 是不处理密码中的特殊字符。

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

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

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

我可以登录

mysql -u username -p PASSWORD

但不是来自 IPADDRESS

mysql -u --host=HOST -p PASSWORD

(实际上我可以不用密码就从 IPADDRESS 登录)

mysql -u --host=HOST

设置允许访问的密码:

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

Mysql 配置文件的新位置是

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

我的案子很简单。

如果键入错误的密码,您可能会遇到这个问题。不需要创建用户(用户已经存在) ,没有其他权限。基本上确保密码是正确的。因此,要双重确认 密码是正确的