【问题标题】:Enable remote MySQL connection: ERROR 1045 (28000): Access denied for user启用远程 MySQL 连接:ERROR 1045 (28000): Access denied for user
【发布时间】:2023-03-23 11:05:01
【问题描述】:

在 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).

但是当尝试从 remote 机器连接到 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 的建议,我尝试将 % 的 mysql.user 条目替换为 IP 特定条目,因此我的用户表现在如下所示:

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

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

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你必须把它作为root:

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

    ;

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

    如果您想允许从任何 IP 访问,只需输入 % 而不是您的 IP

    然后你只需要放

    FLUSH PRIVILEGES;
    

    或者重启mysql服务器就可以了。

    【讨论】:

    • 没有本地 mysql 客户端有没有办法做到这一点?
    • 如何去掉特定ip的权限?
    • stackoverflow.com/a/21151255/470749 也帮助了我,因为我想我的绑定地址设置需要被注释掉。授予远程权限不足以使其正常工作。
    • 答案中没有说明,而是将PASSWORD替换为账号密码。我尝试仅更改USERNAMEIP 上面的方法,但在我更改PASSWORD 之前它对我不起作用。
    • 您也可以使用 %. WILDCARD IP。例如:GRANT ALL PRIVILEGES ON . TO 'USERNAME' @ '10.1.1.%' IDENTIFIED BY 'PASSWORD' with grant option;
    【解决方案2】:

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

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

    【讨论】:

    • 或者,将其更改为 bind-address = 0.0.0.0
    • 仅注释掉 bind-address 对我不起作用。 bind-address = 0.0.0.0bind-address = <server_ip> 都可以。
    【解决方案3】:

    默认情况下,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)
    

    希望这会有所帮助

    【讨论】:

    • +1 以获得出色的细节,这真的帮助我看到0 rows affected 是常态:) 另外,最后推荐service mysqld restart。 [mysqld 有时只是mysql]
    • #注意:对于5.6+版本,使用“grant all on...”(没有权限)
    【解决方案4】:

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

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

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

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

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

    【讨论】:

    • 除上述内容外,请查看/etc/mysql/my.cnf并注释bind-address = 127.0.0.1
    • 也可以使用单引号来防止 $ 的扩展:mysql --host=192.168.233.142 --user=root --password='pas$word'stackoverflow.com/a/6697781/500942
    • '$' 在密码中。无价。非常感谢!
    • 在我的头对着显示器敲了一会儿之后,我发现了这个并且它起作用了。我曾有一个 !和@在我的密码中。更改密码,刷新权限,我又回来了。谢谢!
    【解决方案5】:

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

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

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

    示例:

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

    【讨论】:

    • 服务器回复“ERROR 1045 (28000): Access denied for”...如果防火墙阻止超时...
    • 只想先发帖。我的坏
    • @Krish - 您建议的所有内容都已包含在问题中
    【解决方案6】:
    1. 再次尝试flush privileges

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

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

    【讨论】:

    • 谢谢,我试过了,但无济于事。我根据您的建议更新了问题。
    • 尝试创建另一个用户,不要忘记设置所有授权:CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
    【解决方案7】:

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

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

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

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

      telnet(mysql服务器ip)[端口号]

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

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

    • 不建议在生产环境中使用此方法,但如果您的 iptables 配置不正确,添加规则可能仍无法解决问题。在这种情况下,应执行以下操作:

      服务 iptables 停止

    希望这会有所帮助。

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

            【解决方案11】:

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

            我假设在为现有用户添加新主机时(使用 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 服务器,这条线路帮助很大。在设置用户密码时,我收到错误ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number 导致我看到这篇文章:knowmysql.blogspot.com/2013/09/… 按照这些步骤,我终于可以连接到服务器了。
            【解决方案12】:

            mysql 配置文件的新位置是

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

            【讨论】:

              【解决方案13】:

              我的情况很简单。

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

              【讨论】:

                猜你喜欢
                • 2015-03-20
                • 2019-06-26
                • 1970-01-01
                • 2021-05-14
                相关资源
                最近更新 更多