MYSQL访问被拒绝,用户为'root'@'localhost'。

12

我按照以下步骤在Ubuntu中使用MySQL:

sudo aptitude install php5-mysql mysql-server
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables &
sudo mysql -u root mysql

修改 root 密码:

mysql> UPDATE mysql.user SET Password=PASSWORD('SecurePassword') WHERE
User='root';
mysql> FLUSH PRIVILEGES;
mysql> EXIT

修改/etc/mysql/my.cnf:

[client]
user=root
password=SecurePassword
[mysqld]
...
default-time-zone = '+0:00'

那么:

sudo service mysql start
mysql -u root
mysql> SHOW GRANTS FOR root@localhost
+--------------------------------------------------------------------------------------------------+
 | Grants for root@localhost | 
+--------------------------------------------------------------------------------------------------+
 | GRANT USAGE ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[here is the Securepassword]' |
 +-------------------------------------------------------------------------------------------------+
 1 row in set (0.00 sec) 

mysql>
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'  WITH GRANT OPTION;

我收到以下错误:

使用密码:YES,'root'@'localhost'的用户被拒绝访问


2
请在您的 ini 文件中检查 bind-address=localhost - user2339071
3个回答

2

你的操作完全正确,但我猜有一个小问题导致它没有生效。

当你授予权限时,应该使用identified by password

mysql> GRANT ALL PRIVILEGES ONE `*`.`*` TO 'root'@'localhost' IDENTIFIED BY PASSWORD
'*A4B6157319038724E3560894F7F932C8886EBFCF' WITH GRANT OPTION;

我认为你是错的,IDENTIFY BY PASSWORD 需要一个明文密码,而不是 PASSWORD('') 值。 - Noam Rathaus

0

如果你看到这样的错误信息:

Warning: mysql_connect(): Access denied for user: ....

那么问题就在于您的应用程序无法访问数据库。这可能有几个原因:

首先,请确保您在db-config.php(应用程序连接文件)中的数据库设置是正确的,特别是您的MySQL用户的namepassword、您的database的名称以及您的MySQL服务器的名称。

如果您正在运行自己的服务器,则可能需要为您的MySQL用户授予适当的权限。以MySQL root用户身份登录MySQL并发出以下命令:

GRANT ALL PRIVILEGES ON database_name TO user@host IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

请注意,我们希望答案针对问题中的具体问题。请务必密切关注使用的语言、平台、库等,并确保寻找精确问题的解决方案。例如:这个问题根本不涉及PHP。 - Andrew Barber

0

像Ubuntu这样的系统默认首选使用auth_socket插件来验证root账户。它将通过比较数据库中的用户名和使mysql请求的进程进行身份验证;这在此处中有描述。

套接字插件会检查套接字用户名(操作系统用户名)是否与客户端程序指定给服务器的MySQL用户名匹配,并仅允许连接如果名称匹配。

相反,您可能想要改回mysql_native_password,这将需要用户/密码进行身份验证。

关于实现该方法,我建议您查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接