使用mysql 5.5.8命令行设置密码的正确语法

时间:2011-09-20 16:07:44

标签: mysql syntax passwords wamp where

我刚刚下载并安装了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';

当我按Enter键时,我收到有关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>

由于

5 个答案:

答案 0 :(得分:9)

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

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

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

晒。

答案 1 :(得分:2)

我在同一个lynda.com教程中遇到了同样的问题。解决方案是:

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

答案 2 :(得分:1)

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

  

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

注意:问题是我将<>(尖括号)而不是()(圆括号)放入程序中,我知道它听起来真的很蠢,但这就是发生的事情。因为()和<>在命令行上看起来看起来一样,我搞砸了。

答案 3 :(得分:0)

此代码:

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

将编译(因为缺少更好的词),但代码非常不安全:

以下是MySQL手册中有关它的内容:

  

注意
  PASSWORD()函数由MySQL服务器中的身份验证系统使用;你应该在你自己的应用程序中使用它。为此,请考虑使用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)

答案 4 :(得分:0)

以root用户身份登录mysql,然后

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

对于真实场景

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