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


110

我不断收到此错误。

我正在使用mySQL Workbench,从中发现根的架构特权为null。根本没有特权。

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

root@127.0.0.1显然具有很多访问权限,但我已以此身份登录,但无论如何它只是分配给localhost-本地主机没有特权。

我已经做了一些类似FLUSH HOSTS,,FLUSH PRIVILEGES等等的事情,但是从那或互联网上都没有找到成功。

如何获得根对其访问的权限?我发现这很令人沮丧,因为当我环顾四周时,人们希望您“具有访问权限”,但是我没有访问权限,因此我无法进入命令行或其他任何内容,也无法进入GRANT我自己的任何内容。

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

错误代码:1141。在主机“%”上没有为用户“ root”定义此类授予


SHOW GRANTS FOR root在查询中运行,将结果发布到您的问题中。
NobleUplift

您正在尝试使用MySQL Workbench从本地主机或其他主机访问数据库?
安迪·琼斯

使用--skip-grant-table重新启动服务器并使用任何用户登录,并提供完全的特权以root用户身份并且无需上述选项
即可

@AndyJones不,它在我使用的专用服务器上。
Chase

@vidyadhar对不起,我不确定在哪里可以这样做?
Chase

Answers:


51

使用说明重设根密码 -但不是重设根密码,我们将强制将一条记录插入mysql.user表中

在初始化文件中,使用它代替

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

1
很抱歉,Andy,但是当我进入第6步时,我总是遇到问题。由于我确实使用了安装向导,因此我将使用应有的"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 所有功能以及上面我相应地在文件中输入的内容。我确实也停止了该服务。我只得到以下输出:prntscr.com/1ilxau 并且所有(插件)都已关闭。真令人困惑。
Chase

2
您以管理员身份运行吗?
安迪·琼斯

1
令我惊讶的是,我没有。之后,我得到了这个prntscr.com/1imcnj-第一次我在自己的生产线上(通过粘贴)完成它,然后将它们全部放在一条生产线上。对不起,这对我来说真是令人困惑,而不是sql专家本身。
Chase

16
它给:ERROR 1054 (42S22): Unknown column 'Password' in 'field list'错误。@AndyJones
alper's

1
我正在:“字段列表”中的未知列“密码”
sricheta ruj

130

如果您在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和password连接,然后使用以下命令更新表中的值:

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/zh/set-password/


1
真的非常感谢,同时在Linux中建立了连接
Lova Chittumuri

从更新auth_socketmysql_native_password修复了我的问题。谢谢!
olore

1
试图弄清楚这真是太气又浪费时间。希望他们在期间提出这个问题mysql_secure_installation。非常感谢您的回答。
PatPeter


42

它不喜欢我的用户权限,所以我继续使用它。(在bash << sudo中设置用户名和密码)(这将提供root用户名,并且将密码设置为none)(在Mac上)

sudo mysql -uroot -p

27

尝试以下命令

~$ 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> 

11
在MySQL 5.7中,删除了mysql.user表字段中的password字段,现在该字段名称为'authentication_string'。
拉米德(Rumid)

对于较新版本的mysql,他们将密码列名称更改为authentication_string
Ramesh Maharjan

sudo mysqld_safe给我这个/var/run/mysqld for UNIX socket file don't exists,然后之后mkdir -p /var/run/mysqldsudo chown -R mysql:mysql /var/run/mysqld/它工作并启动了守护程序。
kenzotenma

1
ERROR 2002(HY000):无法通过套接字“/var/run/mysqld/mysqld.so连接到本地MySQL服务器
穆斯塔法

19

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

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

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc已停止

  3. sudo mysqld_safe --skip-grant-tables & 这将跳过所有授予级别的特权,并以安全模式启动mysql有时,由于

grep:写入错误:管道损坏102102 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和/或其分支机构的注册商标。其他名称可能是其各自所有者的商标。

输入“帮助;” 或'\ h'寻求帮助。键入“ \ c”以清除当前输入语句。

  1. mysql> use mysql;

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

数据库已更改

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

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

  3. mysql> quit 再见

  4. 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已启动

  1. mysql -u root -p

    输入密码:

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

在mysql 5.7+版本之后,该列密码由mysql.user表中的名称authentication_string代替。

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


15

我使用的是ubuntu 18,并使用以下命令简单地安装了MySQL(password: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。

在此处输入图片说明



5

如果在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中使用新密码登录。希望它能工作。谢谢。


4

在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

2

重置根密码最简单的方法是:

  • 重新启动mysqld --skip-grant-tables选项。这样一来,任何人都无需密码就可以使用所有特权进行连接。因为这是不安全的,所以您可能希望将--skip-grant-tables与--skip-networking结合使用以防止远程客户端连接。

  • 使用以下命令连接到mysqld服务器:

  • shell> mysql在mysql客户端中发出以下语句。用您要使用的密码替换密码。

  • mysql>更新mysql.user SET密码= PASSWORD('MyNewPass')-> WHERE User ='root'; mysql>冲洗特权;

  • 停止服务器,然后正常重启它(不使用--skip-grant-tables和--skip-networking选项)。

来源Mysql文档和个人经验:

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html




0

请尝试以下步骤来解决此问题:

  1. 打开终端/命令提示符,然后导航到MySQL安装文件夹的bin文件夹。然后运行命令mysqld --console
  2. 如果您可以看到该行171010 14:58:22 [Note] --secure-file-priv设置为NULL。在命令提示符下执行上述命令后,将禁用与导入和导出数据有关的操作。
  3. 然后,您需要检查mysqldWindows防火墙或其他程序是否阻止了该防火墙。
  4. 如果Windows防火墙阻止了它,则需要取消阻止并保存设置。
  5. 要取消屏蔽mysqldmysql应用程序,请执行以下步骤:
    1. 转到命令提示符并键入wf.msc以打开防火墙设置。
    2. 单击“通过Windows防火墙允许应用或功能”。
    3. 选中列表中的mysqldmysqld实例可用,然后选中域(公共域和私有域)的复选框,然后保存设置。
  6. 返回到bin文件夹,然后再次尝试执行步骤1中的命令。
  7. 它应该可以正常工作,并且不显示任何错误。

现在应该可以没有任何问题地运行MySQL控制台了!


0

我使用下一个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';

0

我为用户“ root” @“ localhost”(使用密码:是)使用了拒绝访问功能,工作了几个小时,发现以下解决方案,

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

0

我认为您不必转义--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


0

对于上述问题,系统中的密码应与您在程序中传递的密码相匹配,因为当您运行程序时,它会检查系统的密码,因为您已经以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,然后运行代码。


0

对于我来说,这是同样的问题,但这是造成的,因为我在32位(位)上使用mysql服务器,而工作台在64位(位)上运行。服务器和工作台需要具有相同的版本。

随心



0

当我尝试使用Laravel应用程序连接Mysql数据库时,遇到了同样的问题。我想建议您检查用户密码。MySQL密码不应包含等特殊字符。


在bluehost上,从密码中删除特殊字符实际上解决了该问题。
梅纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.