【问题标题】:access denied for user root @ localhost [duplicate]用户root @ localhost的访问被拒绝[重复]
【发布时间】:2015-08-29 15:30:10
【问题描述】:

我正在尝试连接到 mysql,但它给出了一个警告 mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (使用密码: YES) .我认为用户名和密码是正确的,因为我可以在 komand 行中访问 mysql。我还创建了另一个用户并授予他所有权限,但我仍然有这个警告。

我可以访问 phpMyAdmin。我正在使用 wamp 服务器(apache 2.4.9)和 mysql 5.1

     <?php
      $conn = mysqli_connect("localhost", "root", "password");
       ?>

【问题讨论】:

  • 简单修复:root 用户帐户默认没有密码。所以把连接参数改成$conn = mysqli_connect("localhost", "root", "", 'database_name');

标签: php mysql


【解决方案1】:

如果用户存在并且blahblah 现在不重要,则让以下两行失败:

create user 'root'@'localhost' identified by 'blahblah';
create user 'root'@'127.0.0.1' identified by 'blahblah';

做你的赠款:

grant all on *.* to 'root'@'localhost';
grant all on *.* to 'root'@'127.0.0.1';

将密码更改为您会记住的密码:

set password for 'root'@'localhost' = password('NewPassword');
set password for 'root'@'127.0.0.1' = password('NewPassword');

查看您有多少根用户。真正的用户是用户/主机组合。密码将显示为散列:

select user,host,password from mysql.user where user='root';

select user,host,authentication_string from mysql.user where user='root';

上面的第二个是 MySQL 5.7

如果您获得的用户超过上述两个用户,请放弃其他用户,例如:

drop user 'root'@'%';   -- this is the wildcard hostname, can be a security risk
drop user 'root'@'::1';

仍然只有 2 个?但愿如此。使用上面的select stmts进行检查。

不要使用 root 连接用户应用。 root 仅用于维护。 无论是服务器端代码还是管理员正在运行它都无关紧要。不受保护和/或注入有害语句的代码将以 root 身份运行。 所以,这就是原因。

【讨论】:

  • 我可以删除host='127.0.0.1'吗?
  • 我不会只是以防万一。那是一个安全的。通过使用与我上面显示的相同的密码,您可以根据进入的角度将其解析为127.0.0.1
  • 通配符 root ('root'@'%') 如果您想要严格的安全性,可以放弃匿名通配符。
  • 现在,拥有'jane123'@'%' 是一个不同的问题,假设已锁定安全性,她可以成为主机名的良好通配符候选人(考虑)。但不适用于 root,imo
  • 我做了所有的步骤,但我仍然使用 ('$conn = mysqli_connect("localhost", "root", "") ') 连接到数据库,如何更改默认密码,我希望它是这样的($conn = mysqli_connect("localhost", "root", "password") ')
【解决方案2】:

wamp 的 mysql 默认配置设置用户名 root 无密码

$conn = mysqli_connect("localhost", "root", "");

上面的代码应该可以工作

【讨论】:

    【解决方案3】:

    如果您使用的是本地主机。它没有密码。您只需像这样设置它:

    <?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("database name here") or die(mysql_error());
    ?>
    

    【讨论】:

    • 问题涉及 MySQLi not mysql 标准,因为该标准已弃用
    猜你喜欢
    • 2013-07-28
    • 2023-03-20
    • 2017-10-04
    • 2020-09-12
    • 2013-10-29
    • 2013-08-22
    • 2015-07-04
    相关资源
    最近更新 更多