我通过以下方式创建了一个数据库:
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' 的访问(使用密码:YES)
请告诉我如何解决这个问题。我如何通过 PHP 连接到我的测试用户。
最佳答案
您的创建用户/授权应该是:
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 User和 Mysql Grant Syntax
关于php - 拒绝用户 'admin' @'localhost' mysql 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055057/