访问被拒绝用户'root'@'localhost'(使用密码:是) - 没有权限?

Cha*_*ase 75 mysql root mysql-workbench workbench

我一直在收到这个错误.

我正在使用mySQL Workbench,而我发现root的架构权限是null.根本没有特权.

我在使用我的服务器的平台上遇到了麻烦,这一直是个问题.

root@127.0.0.1显然有很多访问权限,但我已经登录了,但它只是分配给localhost - localhost没有权限.

我已经完成了一些类似的事情FLUSH HOSTS,FLUSH PRIVILEGES但是从那个或互联网上找不到任何成功.

我怎样才能获得root访问权限?我发现这令人沮丧,因为当我环顾四周时,人们希望你"有访问权限",但我没有访问权,所以我无法进入命令行或其他GRANT任何东西.

运行时SHOW GRANTS FOR root这是我得到的回报:

错误代码:1141.在主机'%'上没有为用户'root'定义此类授权

感谢任何可以提供帮助的人

Kei*_*DOG 63

如果您在MySql 5.7中遇到同样的问题.+:

Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

这是因为MySql 5.7默认允许连接socket,这意味着你只需要连接sudo mysql.如果你运行sql:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)

然后你会看到它:

+------------------+-------------------------------------------+-----------------------+-----------+
| 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)
Run Code Online (Sandbox Code Playgroud)

要允许与root和password连接,请使用以下命令更新表中的值:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

然后再次运行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)
Run Code Online (Sandbox Code Playgroud)

就是这样.您可以在运行并完成sudo mysql_secure_installation命令后运行此过程.

  • 试图弄清楚这绝对是令人恼火的,而且是对时间的巨大浪费。我希望他们在“mysql_secure_installation”期间问这个问题。非常感谢您的回答。 (2认同)

And*_*nes 44

使用重置root密码的说明 - 但是我们将强制将记录插入mysql.user表,而不是重置root密码.

在init文件中,请改用它

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

  • 它给出:`ERROR 1054(42S22):'字段列表'中的未知列'密码'错误.@AndyJones (14认同)
  • 您以管理员身份运行吗? (2认同)
  • 令我惊讶的是,我不是。在我之后,我得到了这个 http://prntscr.com/1imcnj - 我第一次在他们自己的行上做(从粘贴)然后我把它全部放在一行上。对不起,这让我感到困惑,而不是 sql 专家本身。 (2认同)
  • @AndyJones 使用“Authentication_string”代替密码 (2认同)

Dan*_*ser 34

它不喜欢我的用户权限,所以我就是它.(在bash中"sudo设置用户和密码)(这给了root的用户名并将密码设置为空)(在Mac上)

sudo mysql -uroot -p
Run Code Online (Sandbox Code Playgroud)


aas*_*ish 24

请尝试以下命令

~$ 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> 
Run Code Online (Sandbox Code Playgroud)

  • 在MySQL 5.7中,mysql.user表字段中的密码字段已被删除,现在字段名称为'authentication_string'. (7认同)

Ari*_*afa 17

对于在mysql 5.7+版本中面临以下错误的人 -

Access denied for user 'root'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
  1. 打开新终端

  2. sudo /etc/init.d/mysql stop ... MySQL社区服务器5.7.8-rc已停止

  3. sudo mysqld_safe --skip-grant-tables & 这将skipp所有授予级别权限并以安全模式启动mysql有时这个过程因为而被卡住了

grep:写错误:Broken pipe 180102 11:32:28 mysqld_safe登录到'/var/log/mysql/error.log'.

只需按Ctrl + Z或Ctrl + C即可中断并退出进程

  1. mysql -u root

欢迎使用MySQL监视器.命令以;结尾; 或\ g.您的MySQL连接ID是2服务器版本:5.7.8-rc MySQL社区服务器(GPL)

版权所有(c)2000,2015,Oracle和/或其附属公司.版权所有.

Oracle是Oracle Corporation和/或其附属公司的注册商标.其他名称可能是其各自所有者的商标.

输入'help;' 或'\ h'寻求帮助.输入'\ c'清除当前输入语句.

  1. MySQL的> use mysql;

读取表信息以完成表名和列名您可以关闭此功能以使用-A更快地启动

数据库已更改

  1. mysql> update user set authentication_string=password('password') where user='root'; 查询OK,4行受影响,1警告(0.03秒)匹配行数:4已更改:4警告:1

  2. mysql> flush privileges; 查询OK,0行受影响(0.00秒)

  3. mysql> quit 再见

  4. sudo /etc/init.d/mysql stop

..180102从PID文件11时37分12秒mysqld_safe的mysqld的/var/run/mysqld/mysqld.pid结束.*MySQL社区服务器5.7.8-rc已停止arif @ ubuntu:〜$ sudo /etc/init.d/mysql start ..*MySQL社区服务器5.7.8-rc已启动

  1. mysql -u root -p

    输入密码:

    欢迎使用MySQL监视器.命令以;结尾; 或\ g.您的MySQL连接ID是2服务器版本:5.7.8-rc MySQL社区服务器(GPL)

在mysql 5.7+版本之后,将列密码替换为mysql.user表中的名称authentication_string.

希望这些步骤对任何人都有帮助,谢谢.


Tan*_*ick 11

如果您在 Workbench 中收到此错误,但您可以从终端登录,请按照以下步骤操作。

首先只需使用您当前的密码登录:

sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

然后更改您的密码,因为低强度密码有时会出错。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

然后只需退出并再次使用您的新密码登录:

quit

sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

成功登录后,输入以下命令:

use mysql;
Run Code Online (Sandbox Code Playgroud)

它应该显示类似“数据库已更改”的消息,然后键入:

UPDATE user SET plugin='mysql_native_password' WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

在该类型之后:

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';
Run Code Online (Sandbox Code Playgroud)

然后输入:

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

然后简单地退出:

quit
Run Code Online (Sandbox Code Playgroud)

现在尝试在您的 WORKBENCH 中使用您的新密码登录。希望它会起作用。谢谢你。


Par*_*hta 7

在Linux系统上重置root密码的简单方法:

sudo dpkg-reconfigure mysql-server-5.5
Run Code Online (Sandbox Code Playgroud)

查看拒绝访问的其他一些原因:

https://dev.mysql.com/doc/refman/5.7/en/problems-connecting.html


Nir*_*han 6

我使用的是ubuntu 18,并使用以下命令简单地安装了MySQL(password:root)。

sudo apt install mysql-server
sudo mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)

当我尝试以普通的ubuntu用户登录时,这使我遇到了这个问题。

ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

But I was able to login to MySQL via the super user. Using the following commands I was able to log in via a normal user.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;
Run Code Online (Sandbox Code Playgroud)

Then you should be able to login to Mysql with the normal account.

在此处输入图片说明


小智 6

就我而言,我在 Mac OS Big Sur 上全新安装 mysql 后发现了此错误。

我修复它的方法是:单击苹果徽标,转到系统首选项,然后单击 mysql。

打开的设置窗口上有一个初始化数据库按钮,我点击它,然后当我尝试再次访问时,问题就解决了。


小智 5

我在 Ubuntu 服务器上安装 Testlink 时遇到了这个问题,我按照以下步骤操作

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit
Run Code Online (Sandbox Code Playgroud)

现在停止实例并重新启动,即

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)