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)问题