【问题标题】:correct syntax for setting password using mysql 5.5.8 command line使用 mysql 5.5.8 命令行设置密码的正确语法
【发布时间】:2011-11-21 05:50:15
【问题描述】:

我刚刚下载并安装了 WAMPserver 2.1,我想为 MySQL 5.5.8 数据库设置密码。我正在 lynda.com 上做一个教程,导师 (Kevin Skoglund) 指导输入:

mysql> use mysql
Database changed

mysql> UPDATE user
    -> SET Password = PASSWORD('paSSword')
    -> WHERE user = 'root';

当我按下回车键时,我收到关于 WHERE 语句的错误:

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 'WHERE' user='root'; at line 2

有人知道 WHERE 语句的正确语法吗?他的课程是在 2007 年完成的,所以我猜语法已经改变,因为它在视频中对他有用。此行已为他返回:

Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1  Warnings: 0
mysql>

谢谢

【问题讨论】:

  • -1,非常糟糕且不安全的代码。你不应该这样存储密码。使用安全哈希并对密码加盐。
  • 这是一个伪造的密码,然而,这正是导师的指示。他只是在数字上使用了不同的单词。
  • 别在意确切的密码。您需要使用一种安全的方式来存储该信息。这种存储它们的方式是垃圾。你的导师需要被鞭打。
  • 哇。他的课程在 lynda.com lynda.com/PHP-tutorials/php-with-mysql-essential-training 你的建议是什么。也许这个教训是 2007 年的旧方式。

标签: mysql syntax passwords wamp where


【解决方案1】:

这适用于我的测试服务器:

mysql> UPDATE user SET password=PASSWORD('newpassword') WHERE user ='root';
mysql> Query OK

您正在尝试设置密码而不是密码(小写)

夏。

【讨论】:

  • Shai,再下一步是在 mysql 提示符下输入:FLUSH PRIVILEGES;但我收到此错误:“ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'FLUSH PRIVILEGES' 附近使用的正确语法;在第 1 行”。但在视频中他得到:“查询正常,0 行受影响(0.00 秒)”如何解决这个问题?
  • 您的语法看起来不错...您确定您拥有手册中所述的 RELOAD 权限吗? dev.mysql.com/doc/refman/5.0/en/flush.html
  • 谢谢,Shai,我刚刚在看那页。我只是在学习 PHP,所以我完全按照 lynda.com 上的教程进行操作。教练还没有介绍 RELOAD 步骤,他只是输入了显示给你的内容。我不知道编写语法的顺序,并且这些说明不容易遵循。我知道flush会做什么,但是为什么我不能像导师那样使用它,这就是我失败的地方。
  • edit 不是你的(Shai)指令不容易遵循,而是dev.msql.com网站上的指令不容易遵循
  • Shai,我输入了 FLUSH 权限(小写),它起作用了:“查询正常,0 行受影响(0.03 秒)”我猜 mySQL 5.5.8 在某些情况下区分大小写?
【解决方案2】:

我在使用同一个 lynda.com 教程时遇到了同样的问题。解决办法是:

UPDATE mysql.user SET Password=PASSWORD('cleartext password')
WHERE User='root';
FLUSH PRIVILEGES;

【讨论】:

    【解决方案3】:

    以root身份登录mysql,然后

    SET PASSWORD FOR 'user-name-here'@'hostname-name-here' = PASSWORD('new-password-here');
    

    真实场景

    SET PASSWORD FOR 'user_test'@'localhost' = PASSWORD('hello');
    

    【讨论】:

      【解决方案4】:

      我遇到了完全相同的问题,问题解决如下:

      UPDATE mysql.user SET Password=PASSWORD('YourPassword') WHERE User='root';

      注意:问题是我在程序中放入了 (尖括号)而不是 ()(圆括号),我知道这听起来很愚蠢,但这就是发生的事情。因为 () 和 在命令行上看起来一样,所以我把它们弄乱了。

      【讨论】:

        【解决方案5】:

        这段代码:

        UPDATE user SET password=PASSWORD('newpassword') WHERE user ='root';
        

        会编译(想找个更好的词),但是代码很不安全:

        以下是 MySQL 手册中的说明:

        注意
        MySQL Server 中的身份验证系统使用 PASSWORD() 函数;您应该在自己的应用程序中使用它。为此,请考虑使用 MD5() 或 SHA1()。另请参阅 RFC 2195 第 2 节(挑战响应身份验证机制 (CRAM)),了解有关在应用程序中安全处理密码和身份验证的更多信息。

        如果您坚持将密码存储在数据库中,则应始终对其进行加盐并使用安全哈希。
        MD5 和 SHA1 不再安全。 2005 年(!)该主题的领先专家 Bruce Scheier 说:"It's time for us all to migrate away from SHA-1."
        我建议使用具有 512 位散列长度的 SHA2。

        $user = mysql_real_escape_string($_POST['user']);
        $password1 = mysql_real_escape_string($_POST['password1']);
        $password2 = mysql_real_escape_string($_POST['password2']);
        $oldpassword = mysql_real_escape_string($_POST['oldpassword']);
        
        if not(empty($password1) and ($password1 == $password2) {
          $update = "UPDATE user 
          SET passhash = SHA2(CONCAT(id,'$password1'),512) 
          WHERE user = '$user' AND passhash = SHA2(CONCAT(id,'$oldpassword'),512)";
        

        这确保了用户只有在知道旧密码时才能更改密码。

        盐需要与密码存储在同一行,但不需要保密。
        只需确保将其作为密码的前缀即可。

        测试密码的工作方式如下:

        SELECT * FROM user 
        WHERE username = 'root' 
          AND passhash = SHA2(CONCAT(id,'passwordexample'),512)
        

        【讨论】:

        • 约翰,非常感谢您提供这些详细信息。我今天刚学PHP,所以你的代码对我来说很陌生。我在安装 WAMP 之后的第 3 课“配置”中。我正在通过 lynda.com 网站学习。我是前端程序员。我正在使用 mysql 控制台,提示没有“$”符号。我不确定在哪里写你列出的内容。我在 lynda.com 上提出了一个问题来更新教程。它不是免费的,从您和 Shai 的专业知识来看,这似乎是非常错误的。
        • 也许课程密码不必非常安全?我不知道这些课程已经 4 年了,感谢您的时间和帮助
        • 代码为PHP代码。您将键入作为 php 页面的一部分。
        • 我知道这是一个非常古老的答案,但是 -1 因为它是莫名其妙的错误。真的应该删除;没有什么可挽救的。对于 MySQL 如何存储其密码,您实际上并没有任何选择,因此告诫人们使用它是没有意义的。
        猜你喜欢
        • 1970-01-01
        • 2022-06-13
        • 1970-01-01
        • 2018-04-07
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        相关资源
        最近更新 更多