2014-12-02 43 views
1

this link的指示,我尝试使用下面的语法使用密码MySQL的 - 脚本与哈希密码创建用户和数据库

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的结果(例如herehere例如),但我想使用这些结果自动创建一个新用户。

回答

4

你不需要创建哈希,密码已经被存储为哈希.. 这是怎样一个新的用户创建

create user [email protected]'localhost' identified by 'password' ; 
GRANT ALL PRIVILEGES ON forum.* TO 'forum_admin'@'localhost'; 
flush privileges; 

在您的代码: 变化 GRANT ALL PRIVILEGES ON论坛。 * TO'forum_admin'@'localhost'IDENTIFIED by PASSWORD'@password';

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

另一种方式来创建它

+0

哦,等等,现在看来只是一个愚蠢的问题:S根本没有注意到密码项目。 顺便说一句,在我的回答 的第一个链接的评论“这是不太安全,因为密码可以以清晰的形式出现在mysql历史文件中。”它不真实吗? – tigerjack89 2014-12-02 19:06:32

+1

@ tigerjack89亚这是一个很好的观点...创建一个文件,将其命名为createUser.sql ...将所有提到的查询写入它...保存....通过命令行加载SQL文件.. 。mysql -uroot -p databasename 2014-12-02 19:22:20

+0

@ tigerjack89 ...上面提到的问题解决了您的问题,将其标记为已回答:)谢谢 – 2014-12-02 19:23:02

3

我遇到这个问题了。可能是你应该把你的密码哈希值

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

然后EXCUTE grant命令

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

祝你好运!

+0

这适用于我。我不知道选择密码('.......')选项。这解决了您有时会遇到的'数据库未选中'错误的误导性问题。这实际上是一个特权问题,上面解决了它。谢谢 。 – TrueBlue 2016-11-27 12:27:40

0

这对我有效。希望它会有所帮助。

SELECT @password:=PASSWORD('chosenPassword'); 
create User 'chosenUser'@'%' identified by '@password'; 
create database chosenSchema; 
GRANT ALL PRIVILEGES ON chosenSchema.* TO 'chosenUser'@'%';