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

Posted

技术标签:

【中文标题】用户\'root\'@\'localhost\'的访问被拒绝(使用密码:是) - 没有权限?【英文标题】:Access Denied for User 'root'@'localhost' (using password: YES) - No Privileges?用户'root'@'localhost'的访问被拒绝(使用密码:是) - 没有权限? 【发布时间】:2013-08-01 06:12:00 【问题描述】:

我不断收到此错误。

我正在使用 mysql Workbench,我发现 root 的架构权限为空。根本没有特权。

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

root@127.0.0.1 显然有很多访问权限,但我是这样登录的,但无论如何它只是分配给 localhost - localhost 没有权限。

我做了一些事情,比如FLUSH HOSTSFLUSH PRIVILEGES等 但没有从那个或互联网上找到成功。

我怎样才能让 root 重新获得它的访问权限?我觉得这很令人沮丧,因为当我环顾四周时,人们希望你“有访问权限”,但我没有访问权限,所以我无法进入命令行或任何东西,GRANT我自己任何东西。

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

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

【问题讨论】:

在查询中运行SHOW GRANTS FOR root,将结果发布到您的问题中。 您正在尝试从本地主机或使用 MySQL Workbench 的其他主机访问数据库? 使用--skip-grant-table 重启服务器并使用任何用户登录并提供root 权限并在没有上述选项的情况下再次重启服务器 @AndyJones 不,它在我使用的专用服务器上。 @vidyadhar 很抱歉,我不确定我会在哪里这样做? 【参考方案1】:

如果你在 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/

【讨论】:

非常感谢在 linux mint 中建立连接 auth_socket 更新到mysql_native_password 解决了我的问题。谢谢! 这绝对是令人愤怒的试图弄清楚并且浪费了大量时间。我希望他们在mysql_secure_installation 期间问过这个问题。非常感谢您的回答。 这也很有帮助***.com/questions/2995054/… 我这样做了,但表格条目以相同的方式更改,但密码仍然无效。此外,sudo mysql_secure_installation 也会提示输入密码。【参考方案2】:

使用the instructions for resetting the root password - 但不是重置root密码,我们将强制插入一条记录到mysql.user表中

在初始化文件中,改用这个

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

【讨论】:

对不起,安迪,但当我进入第 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 一切(插件)都关闭了。真的很混乱。 您是否以管理员身份运行此程序? 令我惊讶的是,我不是。在我之后,我得到了这个prntscr.com/1imcnj - 我第一次在他们自己的行(从粘贴)上做,然后我把它全部放在一行上。对不起,这让我很困惑,而不是 sql 专家本身。 它给出:ERROR 1054 (42S22): Unknown column 'Password' in 'field list' 错误。 @AndyJones 我得到:“字段列表”中的未知列“密码”【参考方案3】:

它不喜欢我的用户权限,所以我 SUDO 它。 (在 bash

sudo mysql -uroot -p

【讨论】:

【参考方案4】:

试试下面的命令

~$ 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 中,mysql.user 表字段中的密码字段被删除,现在字段名称为 'authentication_string'。 对于较新版本的 mysql,他们将密码列名称更改为 authentication_string 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/ 之后它工作并启动了守护进程。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.so【参考方案5】:

对于在 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' 清除当前输入语句。

    mysql>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。

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

【讨论】:

【参考方案6】:

我使用的是 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了。

【讨论】:

【参考方案7】:

如果您在 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 中使用您的新密码登录。希望它会奏效。谢谢。

【讨论】:

【参考方案8】:

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

sudo dpkg-reconfigure mysql-server-5.5

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

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

【讨论】:

使用“locate mysql-server”找到你的版本,并相应地运行命令【参考方案9】:

我在 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

【讨论】:

【参考方案10】:

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

重启 mysqld --skip-grant-tables 选项。这使任何人都可以 无需密码且具有所有权限即可连接。因为这是 不安全,您可能需要结合使用 --skip-grant-tables 使用 --skip-networking 来防止远程客户端连接。

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

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

mysql> 更新 mysql.user SET Password=PASSWORD('MyNewPass') -> WHERE 用户='root'; mysql> 刷新权限;

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

来源 Mysql 文档和个人经验:

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

【讨论】:

【参考方案11】:

在 mysql 5.7 中,密码字段已替换为 authentication_string,因此您可以这样做

update user set authentication_string=PASSWORD("root") where User='root';

查看此链接MySQL user DB does not have password columns - Installing MySQL on OSX

【讨论】:

【参考方案12】:

我通过以管理员身份运行 Workbench 解决了同样的问题。

...我想这是因为公司计算机的限制,就我而言...

【讨论】:

【参考方案13】:

根据您安装 MySQL 的方式为 root 分配 MySQL 默认密码。

如果你是从 MySQL Yum 仓库、MySQL SUSE 仓库或直接从 Oracle 下载的 RPM 包安装的,你可以使用以下命令获取密码:

sudo grep 'temporary password' /var/log/mysqld.log

【讨论】:

【参考方案14】:

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

我修复它的方法是: 我点击苹果标志,进入系统偏好,然后点击mysql。

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

【讨论】:

是的,如果你通过它安装它就像一个冠军 - dev.mysql.com/downloads/mysql【参考方案15】:

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

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

现在应该可以毫无问题地运行 MySQL 控制台了!

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

我为用户'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

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

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

【讨论】:

【参考方案20】:

我遇到了同样的问题,但它是由于我在 32(位)上使用 mysql 服务器而工作台在 64(位)版本上运行的。服务器和工作台需要有相同的版本。

随心

【讨论】:

【参考方案21】:

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

【讨论】:

在 bluehost 上,从密码中删除特殊字符实际上解决了这个问题。【参考方案22】:

就我而言:

我将插件身份验证设置为“”(空),我无法运行 mysql 服务器:

解决方案:

    纳米/etc/mysql/my.cnf 编辑:

[mysqld]

跳过授予表

    服务 mysql 重启 mysql -u root 使用mysql UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' 刷新权限

【讨论】:

【参考方案23】:

原因可能是 /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

链接 - mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists

【讨论】:

以上是关于用户'root'@'localhost'的访问被拒绝(使用密码:是) - 没有权限?的主要内容,如果未能解决你的问题,请参考以下文章

错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问

用户'root'@'localhost'的MYSQL访问被拒绝

用户 'root'@'localhost' 的访问被拒绝

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

#1045 - 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)

使用密码拒绝用户'root'@'localhost'的访问:否