[英]Access denied for user 'root'@'localhost' (using password: YES) despite granted privileges
[英]Access Denied for User 'root'@'localhost' (using password: YES) - No Privileges?
我不断收到此错误。
我正在使用 mySQL Workbench,我发现 root 的模式权限是 null。根本没有权限。
我在使用我的服务器的平台上遇到了麻烦,这是一个突然的问题。
root@127.0.0.1显然有很多访问权限,但我是这样登录的,但它只是分配给本地主机——本地主机没有特权。
我已经做了一些事情,比如FLUSH HOSTS
、 FLUSH PRIVILEGES
等等,但是没有发现从那个或 inte.net 中取得成功。
我怎样才能恢复root访问权限? 我觉得这很令人沮丧,因为当我环顾四周时,人们希望你“有访问权限”,但我没有访问权限,所以我不能GRANT
进入命令行或任何东西并授予自己任何东西。
当运行SHOW GRANTS FOR root
时,这是我得到的回报:
错误代码:1141。没有为主机“%”上的用户“root”定义此类授权
如果您在 MySql 5.7.+ 中遇到同样的问题:
Access denied for user 'root'@'localhost'
这是因为 MySql 5.7 默认允许使用套接字连接,这意味着您只需使用sudo mysql
进行连接。 如果你运行 sql :
SELECT user,authentication_string,plugin,host FROM mysql.user;
然后你会看到它:
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
要允许使用 root 和密码进行连接,请使用以下命令更新表中的值:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;
然后再次运行 select 命令,您会看到它已更改:
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
就是这样。 您可以在运行并完成sudo mysql_secure_installation
命令后运行此过程。
对于 mariadb,使用
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');
设置密码。 更多信息请访问https://mariadb.com/kb/en/set-password/
使用重置 root 密码的说明- 但不是重置 root 密码,我们将强制 INSERT 一条记录到 mysql.user 表中
在 init 文件中,改用它
INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
它不喜欢我的用户权限,所以我 SUDO 它。 (在 bash << sudo 中设置用户和密码)(这给出了 root 的用户名并将密码设置为空)(在 Mac 上)
sudo mysql -uroot -p
尝试以下命令
~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> use mysql;
mysql> update user set password=PASSWORD("root") where User='root';
mysql> flush privileges;
mysql> quit
~$ sudo /etc/init.d/mysql stop
Stopping MySQL database server: mysqld
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[6186]: ended
[1]+ Done mysqld_safe --skip-grant-tables
~$ sudo /etc/init.d/mysql start
~$ mysql -u root -p
* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
对于在 mysql 5.7+ 版本中面临以下错误的人-
Access denied for user 'root'@'localhost' (using password: YES)
打开新终端
sudo /etc/init.d/mysql stop
... MySQL Community Server 5.7.8-rc 已停止
sudo mysqld_safe --skip-grant-tables &
这将跳过所有授予级别的权限并以安全模式启动 mysql 有时该进程只是因为
grep:写入错误:损坏的管道 180102 11:32:28 mysqld_safe 记录到“/var/log/mysql/error.log”。
只需按 Ctrl+Z 或 Ctrl+C 即可中断并退出进程
mysql -u root
欢迎使用 MySQL 监视器。 命令以 ; 结尾或\g。 您的 MySQL 连接 ID 为 2 服务器版本:5.7.8-rc MySQL Community Server (GPL)
版权所有 (c) 2000, 2015,Oracle 和/或其附属公司。 版权所有。
Oracle 是 Oracle Corporation 和/或其附属公司的注册商标。 其他名称可能是其各自所有者的商标。
输入“帮助”; 或 '\h' 寻求帮助。 键入 '\c' 以清除当前输入语句。
use mysql;
读取表信息以完成表名和列名您可以使用 -A 关闭此功能以获得更快的启动
数据库已更改
mysql> update user set authentication_string=password('password') where user='root';
查询正常,4 行受影响,1 个警告(0.03 秒)匹配行:4 更改:4 警告:1
mysql> flush privileges;
查询正常,0 行受影响(0.00 秒)
mysql> quit
再见
sudo /etc/init.d/mysql stop
..180102 11:37:12 来自 pid 文件 /var/run/mysqld/mysqld.pid 的 mysqld_safe mysqld 结束。 * MySQL Community Server 5.7.8-rc 已停止 arif@ubuntu:~$ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc 已启动
mysql -u root -p
输入密码:
欢迎使用 MySQL 监视器。 命令以 ; 结尾或\g。 您的 MySQL 连接 ID 为 2 服务器版本:5.7.8-rc MySQL Community Server (GPL)
在 mysql 5.7+ 版本之后,列密码被 mysql.user 表中的 name authentication_string 替换。
希望这些步骤对任何人都有帮助,谢谢。
我使用的是 ubuntu 18 并使用以下命令简单地安装了 MySQL(密码:root)。
sudo apt install mysql-server
sudo mysql_secure_installation
当我尝试使用普通的 ubuntu 用户登录时,它向我抛出了这个问题。
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
但我能够通过超级用户登录 MySQL。 使用以下命令,我能够通过普通用户登录。
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;
然后您应该可以使用普通帐户登录Mysql。
如果您在 Workbench 中收到此错误,但您可以从终端登录,请按照以下步骤操作。
首先只需使用您当前的密码登录:
sudo mysql -u root -p
然后更改密码,因为密码强度低有时会出错。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';
FLUSH PRIVILEGES;
然后只需退出并使用您的新密码再次登录:
quit
sudo mysql -u root -p
成功登录后,键入命令:
use mysql;
它应该显示类似“数据库已更改”的消息,然后键入:
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
在该类型之后:
UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';
然后输入:
FLUSH PRIVILEGES;
然后简单地退出:
quit
现在尝试在您的 WORKBENCH 中使用您的新密码登录。 希望它会奏效。 谢谢你。
在 Linux 系统上重置 root 密码的简单方法:
sudo dpkg-reconfigure mysql-server-5.5
查看 Access denied 的其他一些原因:
https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html
我在 Ubuntu 服务器上安装 Testlink 时遇到了这个问题,我按照以下步骤操作
mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit
现在停止实例并重新开始,即
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
那么重置root密码的最简单方法是:
重启 mysqld --skip-grant-tables 选项。 这使任何人都可以在没有密码和所有权限的情况下进行连接。 因为这是不安全的,您可能希望将 --skip-grant-tables 与 --skip-networking 结合使用以防止远程客户端连接。
使用以下命令连接到 mysqld 服务器:
shell> mysql 在 mysql 客户端中发出以下语句。 将密码替换为您要使用的密码。
mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') -> WHERE User='root'; mysql> 刷新权限;
停止服务器,然后正常重新启动它(没有 --skip-grant-tables 和 --skip-networking 选项)。
源码Mysql文档和个人经验:
http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html
在 mysql 5.7 中,密码字段已替换为 authentication_string,因此您可以这样做
update user set authentication_string=PASSWORD("root") where User='root';
我通过以管理员身份运行 Workbench 解决了同样的问题。
...我想这是因为对公司计算机的限制,就我而言...
根据您安装 MySQL 的方式,为 root 分配 MySQL 默认密码。
如果您是从 MySQL Yum 仓库、MySQL SUSE 仓库或直接从 Oracle 下载的 RPM 包安装的,您可以使用以下命令获取密码:
sudo grep 'temporary password' /var/log/mysqld.log
就我而言,我在 Mac OS Big Sur 上全新安装 mysql 后发现了这个错误。
我修复它的方法是:我点击苹果标志,进入系统偏好设置,然后点击 mysql。
打开的设置窗口有一个初始化数据库按钮,我点击它,然后当我再次尝试访问时,它就解决了。
尝试以下步骤来解决此问题:
mysqld --console
。171010 14:58:22 [Note] --secure-file-priv
设置为 NULL。 从命令提示符执行上述命令后,与导入和导出数据相关的操作将被禁用。mysqld
是否被 Windows 防火墙或其他程序阻止。mysqld
或mysql
应用程序,请按照以下步骤操作:
wf.msc
以打开防火墙设置。mysqld
或mysqld
实例在列表中可用,并选中域、公共和私有的复选框并保存设置。现在应该可以毫无问题地运行 MySQL 控制台了!
我使用下一个 sql 并重新启动 MySQL 服务器解决了同样的问题:
update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';
我为用户'root'@'localhost'(使用密码:YES)拒绝访问数小时,我找到了以下解决方案,
The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf
the line was either
bind-address = 127.0.0.1
(or)
bind-address = localhost
(or)
bind-address = 0.0.0.0
I should prefer that 127.0.0.1
I should also prefer 0.0.0.0, it is more flexible
because which will allow all connections
我认为您不必转义--init-file
参数:
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt
应该:
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt
对于上述问题,您在系统中的密码应该与您在程序中传递的密码相匹配,因为当您运行程序时,它会检查系统密码,因为您已将 root 作为用户提供给您,因此给您一个错误,同时记录不会从数据库中删除。
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
public static void main(String []k)
{
String url="jdbc:mysql://localhost:3306/student";
String user="root";
String pass="jacob234";
try
{
Connection myConnection=DriverManager.getConnection(url,user,pass);
Statement myStatement=myConnection.createStatement();
String deleteQuery="delete from students where id=2";
myStatement.executeUpdate(deleteQuery);
System.out.println("delete completed");
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
将您的系统密码保留为 jacob234,然后运行代码。
我遇到了同样的问题,但它是由于我在 32(位)上使用 mysql 服务器而工作台在 64(位)版本上运行的。 服务器和工作台需要具有相同的版本。
我不断收到此错误。
我正在使用 mySQL Workbench,我发现 root 的架构权限为空。 根本没有特权。
我在使用我的服务器的平台上遇到了问题,这是一个突然的问题。
root@127.0.0.1显然有很多访问权限,但我是这样登录的,但它只是分配给 localhost - localhost 没有特权。
我做了一些事情,比如FLUSH HOSTS
、 FLUSH PRIVILEGES
等,但没有发现从这些或互联网上取得成功。
我怎样才能获得root访问权限? 我觉得这很令人沮丧,因为当我环顾四周时,人们希望你“有访问权限”,但我没有访问权限,所以我无法进入命令行或任何东西并GRANT
自己任何东西。
运行SHOW GRANTS FOR root
这是我得到的回报:
错误代码:1141。没有为主机 '%' 上的用户 'root' 定义此类授权
当我尝试使用 Laravel 应用程序连接 Mysql 数据库时,我遇到了同样的问题。 我想建议请检查用户的密码。 MySQL 密码不应包含特殊字符,如# 、 &等...
我不断收到此错误。
我正在使用 mySQL Workbench,我发现 root 的架构权限为空。 根本没有特权。
我在使用我的服务器的平台上遇到了问题,这是一个突然的问题。
root@127.0.0.1显然有很多访问权限,但我是这样登录的,但它只是分配给 localhost - localhost 没有特权。
我做了一些事情,比如FLUSH HOSTS
、 FLUSH PRIVILEGES
等,但没有发现从这些或互联网上取得成功。
我怎样才能获得root访问权限? 我觉得这很令人沮丧,因为当我环顾四周时,人们希望你“有访问权限”,但我没有访问权限,所以我无法进入命令行或任何东西并GRANT
自己任何东西。
运行SHOW GRANTS FOR root
这是我得到的回报:
错误代码:1141。没有为主机 '%' 上的用户 'root' 定义此类授权
就我而言:
解决方案:
[mysqld]
跳过授予表
原因可能是 /var/run/mysqld 中缺少 mysqld 文件
sudo service mysql stop
sudo mysqld_safe --skip-grant-tables
sudo service mysql start
如果文件不存在则创建文件
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
现在检查您是否可以登录 mysql -uroot -p123 否则执行
sudo mysql -u root
use mysql;
show tables;
describe user;
update user set authentication_string=password('1111') where user='root';
FLUSH PRIVILEGES;
exit;
mysql -uroot -p123
alter user 'root'@'localhost' identified with mysql_native_password by '$your_password$';
它对我有用。
注意:例如使用强密码
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
我也出现了同样的问题,原来我的数据库用户名是错误的
唯一有用的是sudo mysql
然后在 /etc/my.cnf 文件的 [mysqld] 部分添加skip-grant-tables
- Ubuntu Mysql 5.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.