SQLSTATE[HY000] [1045] 'user'@'localhost' 的访问被拒绝(使用密码:YES)

Posted

技术标签:

【中文标题】SQLSTATE[HY000] [1045] \'user\'@\'localhost\' 的访问被拒绝(使用密码:YES)【英文标题】:SQLSTATE[HY000] [1045] Access denied for 'user'@'localhost' (using password: YES)SQLSTATE[HY000] [1045] 'user'@'localhost' 的访问被拒绝(使用密码:YES) 【发布时间】:2017-12-30 18:34:21 【问题描述】:

这是我第一次将网页上传到服务器,我对这个主题相当缺乏经验。 我下载了 xampp 以在生产环境中工作,并通过 phpmyadmin 我配置了用户名、密码和 host = '%' 但是当我使用 Filezila 上传文件时,我会抛出这个:

SQLSTATE [HY000] [1045] 'user' @'localhost' 的访问被拒绝(使用 密码:是)

我尝试通过 mysql Shell 和 Workbench 连接到我的服务器以创建一个具有访问我的数据库的所有权限的用户“用户”,但在这两种情况下我都抛出了以下内容:

主机 xxxx.xx.xx 不允许连接到此 MariaDB 服务器。

我不明白为什么是 MariaDB 服务器?我没有下载它什么的。

我真的不知道如何将权限授予主机内的新用户,以便它可以访问我的数据库。我的连接代码如下:

try    
    $dsn = 'mysql:host=%;dbname=db_name;charset=utf8';
    $db = new PDO($dsn, 'user', 'contraseña');
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 catch (Exception $e) 
    echo $e->getMessage();
    exit;

【问题讨论】:

你的mysql在同一台服务器上吗? 尝试将localhost更改为127.0.0.1 【参考方案1】:

1) 对于第一个错误,表示您的 mysql 凭据无效。更正您的 php 代码中的数据库配置。安排用户名、密码等...您可以从您的托管服务提供商处获取此信息。尝试将 '%' 更改为 'localhost'。

2)对于第二个 Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server 和

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;

【讨论】:

感谢您的回答!我已经在 phpmyadmin、控制台(第二个问题已解决,谢谢!)和我的 php 代码中更改了用户名和密码(由我的托管服务提供商提供),并且我将主机都保留为 localhost,但是错误仍然存​​在。 @Michael,编辑您的答案,以防止堵塞您的答案的评论回复。 ALTER USER 'userName'@'localhost' IDENTIFIED BY 'New-Password-Here'; 提供帮助,因为我没有设置密码。然后授予权限并刷新。【参考方案2】:

对于第一个问题:如果你的服务器名称是localhost。请验证您的托管服务提供商提供的所有信息(服务器名称、用户名、数据库密码)。试试这个代码:

<?php

$servername = "localhost";
$username = "yourusername";
$password = "yourpassword";

try 
    $conn = new PDO("mysql:host=$servername;dbname=yourdatabase", 
    $username, $password);
   // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
catch(PDOException $e)
    
        echo "Connection failed: " . $e->getMessage();
    
?>

【讨论】:

【参考方案3】:

MariaDB 是 MySQL 的一个分支,许多托管服务提供商和 Linux 发行版默认都有 MariaDB。使用 MariaDB 与 MySQL 完全一样。请注意,在您的连接字符串中,主机通常是 localhost 而不是 %

【讨论】:

以上是关于SQLSTATE[HY000] [1045] 'user'@'localhost' 的访问被拒绝(使用密码:YES)的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[HY000] [1045] 'user'@'localhost' 的访问被拒绝(使用密码:YES)

XAMPP SQLSTATE[HY000] [1045]

意外异常:SQLSTATE[HY000] [1045] 用户 ****@'localhost' 的访问被拒绝(使用密码:YES)

(“SQLSTATE [HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:NO)”)

SQLSTATE[HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:YES)?

SQLSTATE[HY000] [1045] 使用 Docker 拒绝用户 'root'@'172.19.0.4' 的访问