用户'admin'@'localhost'mysql的访问被拒绝

Fr_*_*ien 1 php mysql pdo

我通过以下方式创建了一个数据库:

create database test_db;
Run Code Online (Sandbox Code Playgroud)

然后,我通过以下方式创建了一个用户:

CREATE USER 'test_user'@'test_db' IDENTIFIED BY 'test_pass';
grant all privileges on *.* to 'test'@'test';
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试通过PHP连接到它时,我使用了以下代码:

    $hostname_localhost ="localhost";  
    $database_localhost ="test_db";  
    $username_localhost ="test_user";  
    $password_localhost ="test_pass";  
    try{
        $dbh = new PDO("mysql:host=$hostname_localhost;dbname=$database_localhost",$username_localhost,$password_localhost);
        echo 'Connected to DB'.'<br />';
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $dbh->prepare("SELECT user,host from mysql.user");
        $stmt->execute();

        $result = $stmt->fetchAll();

        foreach($result as $row)
        {
            echo $row['user'].'@'.$row['host'].'<br />';
        }

        $dbh = null;
    }
    catch(PDOException $e)
    {
        echo $e->getTraceAsString().$e->getLine().$e->getMessage();
    }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

请告诉我如何解决此问题。我如何通过PHP连接到我的测试用户。

Jim*_* W. 5

您的创建用户/授权应为:

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'test_pass';
grant all privileges on test_db.* to 'test_user'@'localhost';
Run Code Online (Sandbox Code Playgroud)

我还注意到您的SQL Select语句来自mysql.user。如果您想test_user访问该数据库中的查询,则需要另外一条GRANT语句,或者test_db将Grant语句中的部分更改为*.我不确定您的用例是什么,或者您需要什么,只是提示。

创建用户的语法如下:

CREATE USER 'username'@'host_or_IPAddress' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

对于赠款(省略了一些项目,请阅读参考资料以获取更多深度选项/信息):

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'samehostascreateuser';
Run Code Online (Sandbox Code Playgroud)

供您参考/阅读:MySQL Create UserMysql Grant语法