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

时间:2013-07-31 15:54:05

标签: mysql root mysql-workbench workbench

我不断收到此错误。

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

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

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

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

如何让root用户获得访问权限?我觉得这令人沮丧,因为当我环顾四周时,人们希望你“有权访问”,但我没有访问权,所以我无法进入命令行或任何事情,GRANT我自己。

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

  

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

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

24 个答案:

答案 0 :(得分:37)

使用the instructions for resetting the root password - 但我们不会重置root密码,而是强行将记录插入mysql.user表

在init文件中,改为使用

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

答案 1 :(得分:31)

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

sudo mysql -uroot -p

答案 2 :(得分:26)

如果您在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命令之后运行此过程。

答案 3 :(得分:19)

尝试以下命令

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

答案 4 :(得分:13)

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

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

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

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

  4. 而陷入困境

    grep:写入错误:管道损坏 180102 11:32:28 mysqld_safe记录到' /var/log/mysql/error.log'。

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

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

      版权所有(c)2000,2015,Oracle和/或其关联公司。保留所有权利。

      Oracle是Oracle Corporation和/或其注册商标 分支机构。其他名称可能是其各自的商标 所有者。

      输入'帮助;'或者' \ h'求助。输入' \ c'清除当前的输入声明。

      1. MySQL的> use mysql;
      2. 读取表信息以完成表名和列名 您可以使用-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

        5. .. 180102 11:37:12来自pid文件/var/run/mysqld/mysqld.pid的mysqld_safe mysqld已结束 。  * 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)

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

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

答案 5 :(得分:8)

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

enter image description here

答案 6 :(得分:6)

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

sudo dpkg-reconfigure mysql-server-5.5

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

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

答案 7 :(得分:5)

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

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

In [29]: df['What sweets do you like?'].str.get_dummies(sep=',')
Out[29]: 
    Fruit   Popcorn   Toffee  Chocolate  Fudge  Popcorn  Toffee
0       0         1        1          1      0        0       0
1       0         0        0          1      0        0       0
2       1         1        0          0      0        0       1
3       0         0        1          0      1        0       0
4       0         0        0          0      0        1       0

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

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;

现在尝试在WORKBENCH中使用新密码登录。希望它能工作。谢谢。

答案 8 :(得分:2)

在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

答案 9 :(得分:1)

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

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

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

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

  • 的MySQL>更新mysql.user SET密码=密码(' MyNewPass')         - >用户=' root&#39 ;; MySQL的> FLUSH PRIVILEGES;

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

源Mysql文档和个人经验:

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

答案 10 :(得分:1)

我使用Access拒绝用户'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

答案 11 :(得分: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,然后运行代码。

答案 12 :(得分:0)

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

......我想这是因为公司电脑的限制,在我的情况下......

答案 13 :(得分:0)

我认为你不必逃避std::array<std::array<std::string, 55>, 3> QandA; 参数:

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

答案 14 :(得分:0)

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

xpress

答案 15 :(得分:0)

对我来说,我使用的是MYSQLWorkbench,端口是使用8889的3306 MAMP

答案 16 :(得分:0)

我使用下一个sql并重新启动MySQL服务器解决了同样的问题:

Private Sub Ribbon1_Load(ByVal sender As System.Object, ByVal e As RibbonUIEventArgs) Handles MyBase.Load
    Dim mailItem As Outlook.MailItem = TryCast(Globals.ThisAddIn.Application.ActiveInspector.CurrentItem, Outlook.MailItem)
    MsgBox(mailItem.Subject)
End Sub

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

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

答案 19 :(得分:0)

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

如果是从直接从Oracle下载的MySQL Yum存储库,MySQL SUSE存储库或RPM软件包安装的,则可以使用以下命令获取密码:

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

答案 20 :(得分:0)

我这样做了-

sudo mysql -p

然后我为我的 root 帐户提供了密码(我们用于 sudo 的密码)然后它要求输入密码,我为 mysql 终端提供了密码(新密码)。

答案 21 :(得分:0)

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

我为修复它所做的是: 我点击苹果标志,进入系统偏好设置,然后点击 mysql。

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

答案 22 :(得分:0)

就我而言:

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

解决方案:

  1. nano /etc/mysql/my.cnf
  2. 编辑:

[mysqld]

跳过授权表

  1. 服务mysql重启
  2. mysql -u root
  3. 使用mysql
  4. 更新 mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root'
  5. 刷新权限

答案 23 :(得分:0)

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

相关问题