针对 mysql ERROR 1045 (28000)-- Access denied for user 的问题,通常有以下三种解决办法:
1. 修改或重置 root 密码
步骤1:停止 MySQL 服务
在命令行输入以下命令停止 MySQL 服务:
sudo systemctl stop mysql
步骤2:使用 -skip-grant-tables 参数重新启动 MySQL
重新启动 MySQL 服务,并使用 -skip-grant-tables 参数跳过权限校验:
sudo mysqld_safe --skip-grant-tables &
步骤3:以 root 身份登录 MySQL
以 root 用户身份重新登录 MySQL:
mysql -u root
步骤4:修改 root 密码
使用如下命令修改 root 用户密码:
USE mysql;
UPDATE user SET authentication_string=PASSWORD('mynewpassword') WHERE User='root';
FLUSH PRIVILEGES;
其中 mynewpassword 是你要设置的新密码,改完密码后执行 FLUSH PRIVILEGES 语句,刷新权限表。
步骤5:重新启动 MySQL
终止现有的 MySQL 实例以及跳过授权验证实例,然后重新启动 MySQL:
sudo systemctl stop mysql
sudo systemctl start mysql
示例1:修改 root 用户的密码
例如,我们需要将 root 用户的密码修改为 123456:
USE mysql;
UPDATE user SET authentication_string=PASSWORD('123456') WHERE User='root';
FLUSH PRIVILEGES;
2. 创建新的 MySQL 用户
步骤1:以 root 用户身份登录 MySQL
以 root 用户身份登录 MySQL:
mysql -u root -p
步骤2:创建新用户
使用以下命令创建新的 MySQL 用户:
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1';
其中,user1 是新建用户的名称,localhost 是被授权的主机名,可以替换为其他 IP 地址或者 host 名称。password1 是新建用户的密码。
步骤3:授权用户访问 MySQL
使用以下命令为新建用户授权 MySQL 访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'localhost' WITH GRANT OPTION;
这条语句将允许 user1 用户从 localhost 访问 MySQL 所有的数据库和表,并且允许它将它的权限授予其他 MySQL 用户。
步骤4:刷新权限表
执行以下命令,以使权限更改生效:
FLUSH PRIVILEGES;
示例2:创建新的 MySQL 用户
例如,我们需要创建一个名为 user2,密码为 123456 的新用户:
CREATE USER 'user2'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3. 检查 MySQL 数据库和表的权限设置
步骤1:以 root 用户身份登录 MySQL
以 root 用户身份登录 MySQL:
mysql -u root -p
步骤2:检查原数据库和表的权限
使用 show grants 命令查看目前的 MySQL 数据库和表的权限设置:
SHOW GRANTS FOR 'user'@'localhost';
这个命令将显示 user 用户当前所拥有的所有 MySQL 数据库和表的权限。
步骤3:授权用户访问 MySQL
可以使用以下命令为用户赋予 MySQL 访问权限:
GRANT ALL ON database_name.* TO 'user'@'localhost';
其中,database_name 表示数据库名称,user 表示用户名,localhost 表示主机名。这个命令将允许 user 用户访问指定的数据库和表。
步骤4:刷新权限表
执行以下命令,以使权限更改生效:
FLUSH PRIVILEGES;
示例3:查看 user 用户的权限
例如,我们查看一下 user 用户目前所拥有的 MySQL 数据库和表的权限:
SHOW GRANTS FOR 'user'@'localhost';
该命令将输出如下信息:
+---------------------------------------------------------+
| Grants for user@localhost |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'localhost' |
| GRANT ALL PRIVILEGES ON `db_test`.* TO 'user'@'localhost' |
+---------------------------------------------------------+
我们可以看到,user 用户只拥有对 db_test 数据库的全部权限,对于其他数据库和表,它只有使用权限。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决mysql ERROR 1045 (28000)– Access denied for user问题 - Python技术站