如何在MySQL 8.0中为root用户授予所有权限

时间:2018-05-04 14:23:14

标签: mysql mysql-error-1064 mysql-8.0

尝试

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

获得

  

错误1064(42000):您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便在' IDENTIFIED BY' root'附近使用正确的语法。 WITH GRANT OPTION'在第1行。

注意:在以前的版本中尝试时也是如此。

也试过

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

获得

  

ERROR 1410(42000):您不能创建具有GRANT

的用户

MySQL(8.0.11.0)用户名/密码是root / root。

21 个答案:

答案 0 :(得分:71)

从MySQL 8开始,您不再可以(隐式)使用GRANT命令创建用户。请改用CREATE USER,然后使用GRANT语句:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

答案 1 :(得分:11)

1)这对我有用。首先,创建一个新用户。范例:以'foo'加上pw'bar.enter code

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2)将下面的代码替换为带有'foo'的用户名。

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';
  

注意:database_name是您要拥有特权的数据库,表示全部

3)以foo用户身份登录

mysql> mysql -u foo -p

密码:栏

4)确保使用pw bar将来自Sequelize的初始连接设置为foo。

答案 2 :(得分:7)

如果您在服务器计算机上已经拥有 root 帐户时对 CREATE USER 'root'@'localhost' 感到困惑,请记住您的 'root'@'localhost''root'@'your_remote_ip' 是两个不同的用户(相同用户名,但范围不同)在 mysql 服务器中。因此,使用 your_remote_ip 后缀创建新用户实际上会创建一个新的有效 root 用户,您可以使用该用户从远程机器访问 mysql 服务器。

例如,如果您使用 root 从 IP 为 10.154.10.241 的远程机器连接到您的 mysql 服务器,并且您想为远程 root 帐户设置密码 {{ 1}},以下是您需要遵循的步骤:

  1. 在您的 mysql 服务器机器上,执行 'Abcdef123!@#',然后输入您的密码以让 mysql -u root -p 登录。

  2. 进入 root 会话后,执行此操作为远程范围创建 root 用户:

    mysql>
  3. mysql> CREATE USER 'root'@'10.154.10.241' IDENTIFIED BY 'Abcdef123!@#'; 消息之后,执行此操作以授予新创建的 root 用户所有权限:

    Query OK
  4. 然后:

    mysql> GRANT ALL ON *.* TO 'root'@'10.154.10.241';
    
  5. 重启mysqld服务:

    FLUSH PRIVILEGES;
    
  6. 确认服务器已成功重启:

    sudo service mysqld restart
    

如果上面的步骤执行没有任何错误,您现在可以使用 sudo service mysqld status 从远程机器访问 mysql 服务器。

答案 3 :(得分:5)

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

答案 4 :(得分:1)

复制并立即使用:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

而不是使用单行代码,例如:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

那么:

GRANT ALL ON *.* TO 'username'@'localhost';

那么:

FLUSH PRIVILEGES;

答案 5 :(得分:1)

这个命令对我有用:

1-登录mysql并查看所有用户

<块引用>

sudo mysql -u root

select user, host from mysql.user;

2-删除老用户

<块引用>

drop user root@localhost;

3-创建新用户

<块引用>

CREATE USER 'root'@'localhost' IDENTIFIED BY 'mypassword'

4-为其添加所有权限:

<块引用>

GRANT ALL ON *.* TO 'root'@'localhost'

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'mypassword';

5-finally 刷新权限

<块引用>

FLUSH PRIVILEGES;

答案 6 :(得分:1)

这对我有用:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES

答案 7 :(得分:1)

我的规格

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

我的查询:

mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'desired_password';

我的错误代码:

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 'IDENTIFIED BY 'desired_password'' at line 1

对我有用的东西:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

在两个查询中均响应:

Query OK, O rows affected (0.10 sec*)

N.B:我之前创建了一个数据库(db_name),并且正在创建具有授予数据库中所有表所有特权的用户凭证,而不是使用我在某处读取的默认root用户。

答案 8 :(得分:1)

我的规格:

mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

对我有用的东西:

mysql> USE mysql;
mysql> UPDATE User SET Host='%' WHERE User='root' AND Host='localhost';

答案 9 :(得分:0)

使用 sudo 的 Stary mysql

sudo mysql

答案 10 :(得分:0)

试试这个,我遇到了同样的问题,我尝试了几个选项,但下面的方法奏效了。

全部授予 'root'@'%';

使用的参考 - https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04#step-6-%E2%80%94-testing-database-connection-from-php-optional

答案 11 :(得分:0)

你会得到这个错误

<块引用>

ERROR 1410 (42000):您不能使用 GRANT 创建用户

如果您尝试对不存在的用户运行 GRANT

因此,首先运行此程序以确保您在 GRANT 中使用的用户与您拥有的用户完全匹配:

select User, Host from user;

特别注意您创建的用户是否在 localhost 而您尝试授予的用户是 %

答案 12 :(得分:0)

1。授予权限

mysql>授予所有特权。通过授权选项“ root” @“%”;

mysql>冲洗特权

2。查看用户表:

mysql>使用mysql

mysql>从用户中选择主机,用户 enter image description here

3。修改配置文件

mysql默认绑定ip:127.0.0.1,如果要远程访问服务,只需删除配置

#Modify the configuration file
vi /usr/local/etc/my.cnf

#Comment out the ip-address option
[mysqld]
# Only allow connections from localhost
#bind-address = 127.0.0.1

4。最终重新启动服务

酿造服务重启mysql

答案 13 :(得分:0)

在这个问题上我只需2美分。我在尝试从MySQL Workbench连接时遇到了完全相同的问题。我正在运行一个bitnami-mysql虚拟机来设置用于开发的本地沙箱。

Bitnami的教程说要运行“授予所有特权”命令:

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

这显然是行不通的,我终于使用Mike Lischke的答案使它起作用。

我认为发生的事情是root @%用户具有与其关联的错误凭据。因此,如果您尝试修改用户的权限并且没有运气,请尝试:

  1. 删除用户。
  2. 再次创建用户。
  3. 确保在my.cnf配置文件上具有正确的绑定。就我而言,我已经注释掉了该行,因为它仅用于沙箱环境。

从Mysql控制台:

列出用户(有助于查看您的所有用户):

select user, host from mysql.user;

删除所需的用户:

drop user '{{ username }}'@'%';

创建用户和授予权限:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

运行此命令:

FLUSH PRIVILEGES;

找到您的mysql配置文件“ my.cnf”,并查找如下所示的行:

bind-address=127.0.0.1

并使用'#'进行注释:

#bind-address=127.0.0.1

然后重新启动mysql服务。

希望这可以帮助遇到相同问题的人!

答案 14 :(得分:0)

检查您的用户名和域与之前创建的用户名和域相同。 Mysql通过用户表中的两个列选择帐户。如果不同,则mysql可能认为您想通过Grant创建一个新帐户,此版本在8.0版本之后不再受支持。

答案 15 :(得分:0)

指定的用户只是您的MySQL上不存在(因此,MySQL试图像以前一样使用GRANT创建它,但是由于新版本的限制而失败)。

MySQL在这一点上非常愚蠢,因此,如果您具有'root'@'localhost'并尝试向'root'@'%'授予特权,它将把它们视为不同的用户,而不是将root用户定义为any主机,包括localhost。

该错误消息也具有误导性。

因此,如果收到错误消息,请使用类似以下内容检查现有用户

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

然后创建丢失的用户(按照Mike的建议),或将GRANT命令调整为实际的现有用户规范。

答案 16 :(得分:-1)

这可能有效

将dbtest。*上的所有内容全部授予由“ mysql_password”标识的“ dbuser” @“%”;

答案 17 :(得分:-1)

我遇到了同样的问题,这使我陷入了困境。特别是对于本地开发,我希望能够在没有mysql -u root -p的情况下进行sudo。我不想创建一个新用户。我想使用本地PHP Web应用程序中的root

该错误消息具有误导性,因为在默认的'root'@'%'用户权限下,没有问题

相反,正如其他答案中提到的那样,解决方案只是在我的bind-address=0.0.0.0配置中设置bind-address=127.0.0.1而不是/etc/mysql/mysql.conf.d/mysqld.cnf。否则无需进行任何更改。

答案 18 :(得分:-1)

嗯,我也遇到了同样的问题。即使路由具有“%”也无法远程连接。现在,看看my.ini文件(Windows中的配置文件),bind-address语句丢失了。

所以...我将此bind-address = *放在[mysqld]之后,并重新启动了服务。现在可以了!

答案 19 :(得分:-2)

这对我有用

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

答案 20 :(得分:-3)

我在centOS上听到了同样的问题,这对我有用(版本:8.0.11)

mysql>将所有特权授予到'root'@'%'