我通过以下方式创建了一个数据库:
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连接到我的测试用户。
答案 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 User和Mysql Grant Syntax