MySQL PhpMyAdmin - 无法识别的关键字CONCAT

时间:2016-11-22 14:34:19

标签: sql phpmyadmin mariadb concat

我正在使用phpMyAdmin在MySQL中创建密码哈希表。我尝试输入的SQL代码是:

修改:使用我正在使用的新代码:

INSERT INTO `user` (`username`, `salt`, `passwordhash`) 
VALUES ('username', 'a1b2c3d4e5f6g', SHA2(CONCAT('password', 'a1b2c3d4e5f6g'), 256)));

在SHA2之后,一切都是错误,第一个是"无法识别的关键字。 (在CONCAT附近)。"其余的人都说"无法识别的令牌"然后是任何字符串,所以看起来所有这些问题都只是由CONCAT引起的。还有另一种连接字符串的方法吗?

Screen shot of the current code and errors

3 个答案:

答案 0 :(得分:3)

根据您的新代码:您还有一个额外的括号,再次位于, 256)));

下面:

INSERT INTO `user` (`username`, `salt`, `passwordhash`) 
VALUES ('username', 'a1b2c3d4e5f6g', SHA2(CONCAT('password', 'a1b2c3d4e5f6g'), 256));

这和我留下的所有评论。

修改:根据SHA2()上的MySQL手册,以下内容可能是一个相关问题。

根据https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_sha2

仅当MySQL配置了SSL支持时,此功能才有效。见Section 6.4, “Using Secure Connections”。 可以认为SHA2()在密码学上比MD5()或SHA1()更安全。 在MySQL 5.5.5中添加了SHA2()。

因此,请确保您使用的MySQL版本与之匹配或高于此版本。如果它低于5.5.5,则您无法使用SHA2()。那,或者它可能是服务器上的系统管理员/安全问题。

请联系您学校的系统管理员,如果您正在运行此系统,请参阅您在评论中所说的内容 - “我正在关注一个说使用SHA2的学校教程”。无论哪种方式,MySQL版本在这里都很重要。

要检查安装的MySQL版本,请在phpmyadmin中使用以下语法:

  

显示像“%version%”;

的变量

而不是您使用的是SELECT VERSION();

答案 1 :(得分:2)

你应该有

  

查询错误(1582):调用本机时参数计数不正确   功能' SHA2'

这种方式对我有用

CREATE TABLE `user` (
  `username` varchar(255) NOT NULL,
  `salt` varchar(255) NOT NULL,
  `passwordhash` varchar(255) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf16_bin';

INSERT INTO `user` (`username`, `salt`, `passwordhash`) 
VALUES ('username', 'a1b2c3d4e5f6g', SHA2('test',CONCAT('password', 'a1b2c3d4e5f6g')));

SELECT * FROM user;


username    salt    passwordhash
username    a1b2c3d4e5f6g   9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
username    a1b2c3d4e5f6g   9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

答案 2 :(得分:1)

根据MySQL文档:

  

SHA2(str, hash_length)

     

计算SHA-2系列散列函数(SHA-224,SHA-256,SHA-384和SHA-512)。第一个参数是要进行哈希处理的明文字符串。第二个参数表示结果的所需位长度,其值必须为224,256,384,512或0(相当于256)。如果任一参数为NULL或散列长度不是允许值之一,则返回值为NULL。否则,函数结果是包含所需位数的散列值。请参阅本节开头关于有效存储哈希值的注释

您需要为SHA2()函数(哈希长度)提供第二个参数,并且此参数必须是值224,256,384,512或0之一。

INSERT INTO `user` (`username`, `salt`, `passwordhash`) VALUES ('username', 'a1b2c3d4e5f6g', SHA2(CONCAT('password', 'a1b2c3d4e5f6g'),256));