MySQL 8.0 给用户授予Grant权限

739 阅读1分钟

之前在查看用户权限的时候,发现我自己创建的用户都没有 grant_priv 权限

root@demo [(none)]> select user,host, grant_priv from mysql.user;
+------------------+-----------+------------+
| user             | host      | grant_priv |
+------------------+-----------+------------+
| dbsync           | %         | N          |
| glue             | %         | N          |
| root             | %         | N          |
| test             | %         | N          |
| mysql.infoschema | localhost | N          |
| mysql.session    | localhost | N          |
| mysql.sys        | localhost | N          |
| root             | localhost | Y          |
+------------------+-----------+------------+

我们看到上面的root用户是没有权限的,我尝试重新授权

root@demo [(none)]> grant all privileges on *.* to 'root'@'%';
Query OK, 0 rows affected (0.01 sec)

再去查询,发现权限不变

root@demo [(none)]> select user,host, grant_priv from mysql.user;
+------------------+-----------+------------+
| user             | host      | grant_priv |
+------------------+-----------+------------+
| dbsync           | %         | N          |
| glue             | %         | N          |
| root             | %         | N          |
| test             | %         | N          |
| mysql.infoschema | localhost | N          |
| mysql.session    | localhost | N          |
| mysql.sys        | localhost | N          |
| root             | localhost | Y          |
+------------------+-----------+------------+

一开始有些困惑,我不是给全部权限了吗,怎么这个 root@% 还没有 grant 权限啊

原因是我们语句用错了,mysql8.0中 grant权限已经不能用 all privileges去包含啦。

正确的做法是 使用 with grant option:

root@demo [(none)]> grant all privileges on *.* to 'root'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)

root@demo [(none)]> select user,host, grant_priv from mysql.user;
+------------------+-----------+------------+
| user             | host      | grant_priv |
+------------------+-----------+------------+
| dbsync           | %         | N          |
| glue             | %         | N          |
| root             | %         | Y          |
| test             | %         | N          |
| mysql.infoschema | localhost | N          |
| mysql.session    | localhost | N          |
| mysql.sys        | localhost | N          |
| root             | localhost | Y          |
+------------------+-----------+------------+
8 rows in set (0.00 sec)

经过上面的操作,我们发现 root@% 这个用户已经有grant 权限啦。