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

时间:2013-11-18 18:26:26

标签: php mysql pdo

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

create database test_db;

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

CREATE USER 'test_user'@'test_db' IDENTIFIED BY 'test_pass';
grant all privileges on *.* to 'test'@'test';

现在当我尝试通过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();
    }

我收到以下错误:

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

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

1 个答案:

答案 0 :(得分:5)

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

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'test_pass';
grant all privileges on test_db.* to 'test_user'@'localhost';

我还注意到您的SQL Select语句来自mysql.user。如果您希望test_user能够访问该数据库中的查询,则需要另一个GRANT语句,或者将grant语句中的test_db部分更改为*.我不是确定你的用例是什么,或者你需要什么,但只是一个抬头。

创建用户的语法如下:

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

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

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'samehostascreateuser';

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