【问题标题】:Correct mysql syntax error when creating a user创建用户时更正mysql语法错误
【发布时间】:2013-01-01 20:57:13
【问题描述】:

所以我得到了非常常见的ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) mysql 错误。我已经尝试了论坛上的所有典型修复,通过 mysql_safe 方法登录,然后尝试重置我的 root 密码。但是,这样做时它会返回;

UPDATE user SET password=PASSWORD("PASSWORD")WHERE user="root";
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

因此,由于没有行受到影响,我假设没有用户实际更改。我试图创建一个用户:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'root'
    -> GRANT ALL ON *.* TO 'root'@'localhost'
    -> flush privileges;

However this returns with 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 'GRANT ALL ON *.* TO 'root'@'localhost'

查看当前用户是什么:

mysql> SELECT user();
+--------+
| user() |
+--------+
| root@  | 
+--------+

我认为语法错误是“root”之后的@之后没有任何内容。如何将此信息编辑为 root@localhost 并更正问题?

更新

在仔细阅读了 mysqld 文档后,我进入了这部分,它运行良好。

停止 mysqld 并使用 --skip-grant-tables 选项重新启动它。这使任何人都可以在没有密码和所有权限的情况下进行连接。由于这是不安全的,您可能希望将 --skip-grant-tables 与 --skip-networking 结合使用以防止远程客户端连接。

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

shell> mysql

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

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
    ->                   WHERE User='root';
mysql> FLUSH PRIVILEGES;

FLUSH 语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。

【问题讨论】:

  • 你为什么不用SET PASSWORD 来代替呢? flush privileges 会自动执行:dev.mysql.com/doc/refman/5.5/en/set-password.html
  • 您不能使用 SET PASSWORD 因为匿名用户不能更改密码。
  • UPDATE 下的这个解决方案实际上给你一个不同的输出然后:查询 OK,0 行受影响(0.00 秒)匹配的行:0 更改:0 警告:0?您可以添加该行以使其完整吗?如果那是标准行为,我的仍然是一样的,这让我感到好奇......

标签: mysql permissions


【解决方案1】:

应该是三个sql语句,

CREATE USER 'root'@'localhost' IDENTIFIED BY PASSWORD 'root';
GRANT ALL ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;

【讨论】:

  • hmm 第一行返回 - 密码哈希应该是 41 位十六进制数字?
  • 我在使用 @dodgerogers747 时遇到了同样的错误 ERROR 1827 (HY000): The password hash does not have the expected format.检查 PASSWORD() 函数是否使用了正确的密码算法。
  • 创建用户 'root'@'localhost' 由 'root' 识别; --只有没有“密码”它对我有用
【解决方案2】:

当我尝试登录新安装的 mysql 服务器时,我收到了同样的错误消息(用户 'root'@'localhost' 的访问被拒绝(使用密码:YES))。

我不知道在redhat6.5上安装mysql-community-server (rpm)时,会创建一个超级用户帐户'root'@'localhost'并设置超级用户的密码并存储在错误日志中文件并显示它,我应该使用:

  • shell > grep '临时密码' /var/log/mysqld.log

我只是检查“mysqld.log”文件中的密码并使用它来登录。进入后,我已经更改了默认密码。

here is the link to the mysql's page for reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 2012-08-14
    • 1970-01-01
    • 2014-04-09
    • 2016-02-07
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多