我正在尝试执行此查询 -
DROP DATABASE IF EXISTS `hotel`;
GRANT USAGE ON *.* TO 'user'@'localhost';
DROP USER 'user'@'localhost';
CREATE USER user@localhost IDENTIFIED BY 'user';
CREATE DATABASE `hotel`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
GRANT USAGE ON *.* to 'user'@'localhost' identified by 'user';
但我总是得错误
GRANT USAGE ON *.* TO 'user'@'localhost' Error Code: 1133. Can't find any matching row in the user table 0.000 sec
我认为如果用户不存在,Grant usage
会创建新用户。有什么问题?
答案 0 :(得分:78)
我和
有同样的错误grant all on newdb.* to newuser@localhost;
用'
标识的&#39解决grant all on newdb.* to newuser@localhost identified by 'password';
答案 1 :(得分:16)
我认为如果用户不存在,Grant使用会创建新用户。有什么问题?
在以前版本的mysql中就是这种情况。如果您想以新的方式进行,请参阅this answer。如果您想修改系统设置以使其按照以前的方式工作,请继续阅读。但请注意,这是一种弃用的行为,因为链接文档说明了
NO_AUTO_CREATE_USER将在未来的MySQL中删除 释放,此时将启用其效果 所有时间(GRANT不会创建帐户)
从documentation,您可以设置一个选项,允许mysql创建用户(如果不存在)。
NO_AUTO_CREATE_USER
防止GRANT语句自动创建新用户if 否则它会这样做,除非非密码也是 指定。
设置选项:
您可以使用SET [GLOBAL | SESSION]在运行时更改SQL模式 sql_mode ='modes'语句用于设置sql_mode系统值。
答案 2 :(得分:6)
GRANT
命令不再自动创建用户。
请勿更改NO_AUTO_CREATE_USER
变量,而是首先使用CREATE USER
命令创建用户,然后授予特权:
DROP USER IF EXISTS 'user'@'localhost';
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost';
答案 3 :(得分:0)
尝试添加到脚本末尾:
FLUSH PRIVILEGES;
答案 4 :(得分:0)
从root用户运行:
grant all privileges on *.* to 'user'@'localhost' identified by '';
编辑
示例
mysql> grant all privileges on *.* to 'user'@'localhost' identified by 'user';
mysql> flush privileges;