MySql - 用哈希密码创建用户和数据库的脚本

6

我正在尝试按照此链接中的说明,使用以下语法创建带密码的用户

DROP DATABASE IF EXISTS forum;
CREATE DATABASE forum;
DELETE FROM mysql.user WHERE Host='localhost' AND User='forum_admin';
#In this way, the password will not be logged in mysql history
SELECT @password:=PASSWORD('forum_admin');
GRANT ALL PRIVILEGES ON forum.* TO 'forum_admin'@'localhost' IDENTIFIED BY PASSWORD '@password';
FLUSH PRIVILEGES;

然而,倒数第二条指令出现了错误。
ERROR 1827 (HY000): The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.

那么,我该如何解决呢?我不想手动插入SELECT @password的结果(例如在这里这里解释过),但我希望使用这些结果自动创建一个新用户。

2个回答

18

您无需创建哈希值,密码已经以哈希形式存储。以下是新用户创建的步骤。

 create user forum_admin@'localhost'  identified by 'password' ;
 GRANT ALL PRIVILEGES ON forum.* TO 'forum_admin'@'localhost';
 flush privileges;
在你的代码中: 修改
GRANT ALL PRIVILEGES ON forum.* TO 'forum_admin'@'localhost' IDENTIFIED BY PASSWORD 'pass_string';

GRANT ALL PRIVILEGES ON forum.* TO 'forum_admin'@'localhost' IDENTIFIED BY 'pass_string';

哦,等等,现在看起来只是一个愚蠢的问题:S 完全没有注意到密码项。 顺便说一下,在我的答案的第一个链接中的评论中,“它不太安全,因为密码可以以明文形式出现在mysql历史文件中。”这是不是不正确的? - tigerjack
1
@tigerjack89,是的,那是个好主意...创建一个文件,将其命名为createUser.sql...在其中编写所有提到的查询...保存它...通过命令行加载sql文件...mysql -uroot -p databasename < createUser.sql...这里的数据库名称将是mysql... - Danyal Sandeelo
我最初认为这是一个可选关键字,就像 GRANT ALL [PRIVILEGES] 一样,但事实并非如此。它似乎只是在提供的字符串上调用 password 函数。https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_password - Elvin

7

我也遇到了这个问题。也许你应该获取你的密码哈希值。

mysql> select password('1');
+-------------------------------------------+
| password('1')                             |
+-------------------------------------------+
| *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+-------------------------------------------+

那么执行授权命令。
mysql> grant all 
-> on *.*
-> to xiushanfan identified by password '*xxxxxxxxxxx(copy from above)' 
-> with grant option;

一切都会好起来的。

这是链接:http://shareolite.blogspot.com/2014/03/how-to-solve-mysql-error-1827-hy000.html

祝你好运!


这对我有用。我不知道选择password('.......')选项。这解决了有时会出现的“未选择数据库”错误的误导问题。这实际上是一个权限问题,上述方法可以解决它。谢谢。 - user6743474
还要注意的是,由于关键字“password”,默认情况下此命令不会记录在“.mysql_history”文件中。因此,您无需清理以保护密码的机密性。 - Michael Aicher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接