【问题标题】:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'db'错误 1044 (42000): 拒绝用户 ''@'localhost' 访问数据库 'db'
【发布时间】:2012-02-08 23:02:51
【问题描述】:

我想开始在 MySQL 中编写查询。

show grants 显示:

+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+

我没有任何用户ID,但是当我想创建一个用户时,我没有权限,即使我没有一个用户,我也不知道如何创建权限!

mysql> CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'parsa';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER pr
ivilege(s) for this operation

我尝试以 root 身份登录:

mysql> mysql -u root -p;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
 -u root -p' at line 1
mysql> mysql -u root -p root;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'mysql
 -u root -p root' at line 1

【问题讨论】:

  • 您需要以具有权限的用户身份登录。安装 MySQL 时至少应该创建 root
  • 在安装过程中它告诉我设置密码,我现在将它设置为 root 我该怎么办?
  • 您需要以 root 身份登录——例如,通过运行mysql -u root -p。然后您将拥有数据库服务器的完全权限,并且您可以创建其他用户。
  • 使用命令行登录时,以root身份登录:mysql -u root -p
  • @nikparsa:不,你应该运行它而不是 'mysql'——从 shell 提示符,而不是 mysql 提示符。

标签: mysql


【解决方案1】:

不,您应该在 bash 中运行 mysql -u root -p,而不是在 MySQL 命令行中。 如果您在 mysql 中,您可以通过键入 exit 退出。

【讨论】:

  • 我怎样才能去 bash?我在安装 mysql 时遇到问题,请看这里 superuser.com/questions/377679/… 我只知道在命令行中了解它
  • 使用'quit'退出mysql,然后你将进入bash
  • 仅供参考,默认密码为空
  • 如果我使用的是 windows 怎么办?
  • exit 或 quit 对我不起作用,请提供另一种方式。我在 Windows 10 上
【解决方案2】:

您可能需要为您的 MySQL 数据库设置一个 root 帐户:

在终端类型中:

mysqladmin -u root password 'root password goes here'

然后调用 MySQL 客户端:

mysql -h localhost -u root -p

【讨论】:

  • 这个对我有用,最初工作正常,然后有一天突然停止工作。任何想法,为什么会发生这种情况?
  • @soleshoe 我收到错误:sudo: mysqladmin: command not found 请帮帮我我该怎么办?? mysql 已经在系统偏好设置中运行。
  • 我得到:mysqladmin:无法关闭日志记录;错误:'访问被拒绝;您需要(至少其中一项)超级权限才能执行此操作'
【解决方案3】:

我是被另一个问题带到这里的。 每当我尝试登录时,我都会收到该消息,因为我没有正确验证身份,而是以匿名用户身份登录。我的问题的解决方案是:

查看您是哪个用户,以及您拥有谁的权限:

select user(), current_user();

删除讨厌的匿名用户:

drop user ''@'localhost';

【讨论】:

  • 这解决了我的问题,即使我使用的是“mysql -u username -p”。很奇怪:user() 是我的用户名,但 current_user() 是 localhost...不知道为什么?
  • @Leftteris hi .. 我收到这个错误:访问被拒绝;当我尝试删除用户''@'localhost'时,您需要(至少一个)CREATE USER 权限;
  • +-----------------+----------------+ |用户() |当前用户() | +-----------------+----------------+ | fantomx1@localhost | @本地主机 | +-----------------+----------------+ | thx,我知道了,当匿名用户存在时,即使他们有密码但他们的密码无效,但他们没有权限,甚至没有任何不存在的经过深思熟虑的字符串 user 'sdasdsa,我也可以使用没有密码的任何现有用户登录',但当前用户始终是匿名的,删除他后它开始工作
  • 此站点提供有关如何删除匿名用户的信息。 download.nust.na/pub6/mysql/doc/refman/5.1/en/…
【解决方案4】:

这与用户权限有关。给予适当的资助将解决这个问题。

步骤 [1]:打开终端并运行此命令

$ mysql -uroot -p

输出 [1]: 这应该会给你下面显示的 mysql 提示

步骤[2]:

mysql> CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'your_password';
mysql> grant all privileges on *.* to 'parsa'@'localhost';

语法:

mysql> grant all privileges on `database_name`.`table_name` to 'user_name'@'hostname';

注意:

  • hostname可以是IP地址、localhost、127.0.0.1
  • database_name/table_name中,*表示所有数据库
  • hostname,指定所有主机使用'%'

步骤[3]:通过输入quit/exit命令或按Ctrl+D退出当前的mysql提示。

步骤 [4]:登录新用户

$ mysql -uparsa -pyour_password

步骤[5]:创建数据库

mysql> create database `database_name`;

【讨论】:

  • 当我执行CREATE USER 'parsa'@'localhost' IDENTIFIED BY 'your_password'; 时出现错误:ERROR 1227 (42000): Access denied;您需要(至少一个)此操作的 CREATE USER 权限
  • 你是否使用root用户登录过mysql客户端
  • 这解决了我的问题:grant all privileges on *.* to 'parsa'@'%';。我正在使用 docker-compose,有没有办法可以在构建后传递此命令?
  • 我将现有数据库从 phpmyadmin xampp 迁移到 mysql 时遇到了同样的问题。这终于适用于我的 node.js mysql 应用程序
  • 这是该主题的最佳答案!
【解决方案5】:

您可能想尝试完整的登录命令:

mysql -h host -u root -p 

主机是127.0.0.1

这样做只是为了确保合作存在。

使用mysql -u root -p 允许我进行大量数据库搜索,但由于路径设置而拒绝任何数据库创建。

【讨论】:

    【解决方案6】:

    如果您在 MySQL shell 中,请键入 exit 退出它,这将使您返回到命令提示符。

    现在使用以下命令启动MySQL

    sudo mysql -u root -p
    

    如果您的用户名不是 root,请将上述命令中的“root”替换为您的用户名:

    sudo mysql -u <your-user-name> -p
    

    然后它会询问您MySQL 帐户/密码,然后您的MySQL 将不会显示任何访问权限问题。

    【讨论】:

    • 输入密码后我得到“sudo: mysql: command not found”请帮帮我
    • 它不应该是“sudo:”,应该是“sudo”……如果不是拼写错误,我认为这就是问题所在。
    【解决方案7】:

    首先,如果您不熟悉命令行,请尝试在您的网络浏览器中使用 phpmyadmin。这将确保您确实创建了一个 mysql 数据库和一个用户名。

    这是从命令行 (bash) 连接的方式:

    mysql -h hostname -u username -p database_name
    

    例如:

    fabio@crunchbang ~ $ mysql -h 127.0.0.1 -u fabio -p fabiodb
    

    【讨论】:

    • -p 用于密码,您正在使用它来传递数据库名称。此外,对于密码,不应有空格 b/w -p 和实际密码。使用-D 连接到特定数据库。
    【解决方案8】:

    @Nickparsa ......你有 2 个问题:

    1)。 mysql -uroot -p 应该在 bash(也称为终端)中输入,而不是在 MySQL 命令行中。您可以通过键入

    来修复此错误
    exit
    

    在您的 MySQL 命令行中。现在你回到了你的 bash/终端命令行。

    2)。你有一个语法错误:

    mysql -uroot -p; 
    

    -p前面的分号需要去掉。正确的语法是:

    mysql -uroot -p
    

    在 bash 命令行中键入正确的语法。如果您设置了密码,请输入密码;否则只需点击输入按钮。您应该得到与此类似的响应:

    希望这会有所帮助!

    【讨论】:

    • 您好,我在发布此推荐后直接获得了弓屏。 /usr/local/mysql/bin/mysql 但之后当我尝试使用“CREATE DATABASE books;”创建数据库时,我收到错误:错误 1044 (42000): 用户'@'localhost' 拒绝访问数据库'书籍'请帮助我
    【解决方案9】:

    用 sudo 连接 mysql 并为必要的用户提供使用权限,

    sudo mysql -u user;
    GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost';
    

    【讨论】:

      【解决方案10】:

      大多数开发人员 登录到服务器(我假设你有 mysql 数据库的用户名和密码)然后从 Bash 他们切换到 mysql&gt; prompt 然后使用下面的命令(这不不工作

      mysql -h localhost -u root -p
      

      需要做的是在 bash 提示符中使用上述命令--> 这样做会要求输入密码,如果给出它会直接进入 mysql 提示符,并且

      然后数据库、表可以一张一张地创建

      我遇到了类似的僵局,所以分享经验

      【讨论】:

        【解决方案11】:

        根据上述答案,我的命令是正确的,我错过的是在工作台上,我们为用户提到了“限制来自主机的连接”,它默认为“%” - 将其更改为“localhost”并连接以后就好了!

        【讨论】:

          猜你喜欢
          • 2015-07-18
          • 1970-01-01
          • 2019-08-23
          • 2021-06-01
          • 2021-07-26
          • 2014-02-22
          • 2020-05-09
          • 2018-04-20
          • 2016-02-04
          相关资源
          最近更新 更多