MySQL:错误 1142 (42000) 和错误 1064 (42000)

Posted

技术标签:

【中文标题】MySQL:错误 1142 (42000) 和错误 1064 (42000)【英文标题】:MySQL: ERROR 1142 (42000) and ERROR 1064 (42000) 【发布时间】:2011-12-06 07:15:07 【问题描述】:

我使用的是 Windows 7。我已经下载了mysql-5.5.16-win32.zip 并安装了它。我成功启动了 MySQL 服务器,但出现此错误:

C:\Program Files\Mysql\bin>mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.16 MySQL Community Server (GPL)

mysql> select user, host, password from mysql.user;
ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user
'
mysql> mysql -u root -p
    -> select user, host, password from mysql.user;
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
select user, host, password from mysql.user' at line 1
mysql> mysql -u root -p root
    -> select user, host, password from mysql.user;
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
select user, host, password from mysql.user' at line 1
mysql>

如何设置所需的权限,从 Windows 到 mysql 表用户?

【问题讨论】:

【参考方案1】:

mysql命令行错误信息:

ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user'

表示您使用默认的 null 用户登录 mysql,权限几乎为零。

    从命令行,像以前一样运行 mysql:

    C:\Users\Charity>mysql
    

    这会将您带到 mysql 提示符,运行命令 select user();

    mysql> select user();
    +----------------+
    | user()         |
    +----------------+
    | ODBC@localhost |
    +----------------+
    1 row in set (0.00 sec)
    

    该输出意味着您不是以用户身份进行连接,而是以某种非用户 API 连接器的身份进行连接。 ODBC 不在mysql.users 表中。当您不指定用户时,它是连接到 MySQL 的用户。

    运行另一个命令:

    mysql> select user from mysql.user;
    ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for 
    table 'user'
    mysql>
    

    我们没有以任何用户身份连接,所以它告诉我们访问被拒绝。

    运行这些命令:

    C:\Users\Charity>mysql -u this_is_not_a_user
    mysql> select user();
    +------------------------------+
    | user()                       |
    +------------------------------+
    | this_is_not_a_user@localhost |
    +------------------------------+
    1 row in set (0.00 sec)
    
    mysql>
    

    所以我们以另一个非我们定义的用户身份登录。您是否希望我们从帽子里抽出来的这个用户有任何特权?没有。

    停止胡闹,以 root 身份登录:

    C:\Users\Charity>mysql -u root -p
    Enter password: **********
    mysql> select user();
    +----------------+
    | user()         |
    +----------------+
    | root@localhost |
    +----------------+
    1 row in set (0.00 sec)
    mysql>
    

    现在你是 root,你可以看到一切。

    查看mysql.user表:

    mysql> select user, host from mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    |      | linux     |
    | root | linux     |
    |      | localhost |
    | pma  | localhost |
    | root | localhost |
    +------+-----------+
    5 rows in set (0.00 sec)
    

    您可能想要创建更多用户,这样您就可以让人们使用数据库,而无需授予他们对您的数据库执行任何操作的权限。让野蛮人远离护城河。

    您不想一直以 root 身份登录。所以创建一个新用户。转到 phpmyadmin,以 root 身份登录 phpadmin。单击“用户”选项卡并创建一个新用户。显示一个新对话框,填写用户名、密码和权限。然后您可以以该用户身份登录:

    C:\Users\Charity>mysql -u el -p
    Enter password: **********
    mysql> select user();
    +----------------+
    | user()         |
    +----------------+
    | el@localhost   |
    +----------------+
    1 row in set (0.00 sec)
    mysql>
    

    此用户可以执行您在步骤 7 中定义的权限中授予的所有操作。

【讨论】:

【参考方案2】:

命令mysql -u root -p 应该在Windows 命令行中运行。当你看到提示时

mysql>

这意味着您当前正在使用 MySQL 命令行客户端(您在示例的第一行第一次运行 mysql 时打开了它)。

你需要做的是运行命令quit,这样你就回到了Windows命令提示符,然后然后运行

mysql -u root -p

这将再次启动 MySQL 客户端,但会提示您输入密码以作为用户 root 登录。

【讨论】:

【参考方案3】:

如果您是初学者,您可能不必输入 -p 只需输入:

    mysql -u root

【讨论】:

以上是关于MySQL:错误 1142 (42000) 和错误 1064 (42000)的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 10.2.6 上的“带有递归”语句的“错误 1142(42000):SELECT 命令被拒绝”

错误 1142:SELECT 和 LOCK TABLE 命令被拒绝

ERROR 1142 (42000): GRANT command denied to user ** 或 ERROR 1045 (28000): Access denied for user 

转: MySQL5.7 ERROR 1142 (42000)问题

MySQL 错误:#1142 - SELECT 命令拒绝用户

mysqlworkbench 错误 1142:创建命令拒绝用户'readonly'@'