mysql权限设置

  1. 创建用户从任意机器访问mysql, 对test数据库有所有权限,对其他数据库没有权限
--创建test 用户 %代表任意机器可以登录
CREATE USER 'test'@'%' IDENTIFIED BY 'yEQ8AuptIL4fXrxySM8NDslO';
--授予该用户对 test 数据库的所有权限
--test.* 表示该用户对 test 数据库中的所有表具有所有权限
GRANT ALL PRIVILEGES ON test.* TO 'test'@'%';
--刷新权限
FLUSH PRIVILEGES;
--确认权限
SHOW GRANTS FOR 'test'@'%';
+------------------------------------------------+
| Grants for test@%                              |
+------------------------------------------------+
| GRANT USAGE ON *.* TO `test`@`%`               |
| GRANT ALL PRIVILEGES ON `test`.* TO `test`@`%` |
+------------------------------------------------+
2 rows in set (0.00 sec)
  1. 权限解释:
在 MySQL 中,GRANT USAGE ON *.* TO 'test'@'%' 语句的含义如下:
GRANT USAGE ON *.*

    USAGE 权限实际上是一个“空”权限,表示该用户对指定数据库的权限基本上没有任何作用。它通常用于以下情况:
        用来创建一个新的用户并将其权限初始化为“无操作权限”(没有任何实际权限)。
        如果没有其他权限赋予该用户,USAGE 就意味着该用户没有任何实际的数据库操作权限。

*.*

    这是指定授权范围的部分。*.* 表示在所有数据库 (* 代表数据库) 和所有表 (* 代表表) 上。即,USAGE 权限应用于所有数据库和所有表,但没有赋予实际操作权限。

综合含义

    GRANT USAGE ON *.* TO 'test'@'%' 语句意味着:
        用户 test 从任意主机(%)连接到 MySQL 时,没有实际的操作权限。
        这条语句为用户 test 创建了一个空的用户记录,但并没有给该用户赋予对任何数据库的访问权限。

通常,这条语句与以下 GRANT 权限一起使用。比如,GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' 给 test 用户赋予了对 test 数据库的所有权限。

在你的例子中:

GRANT USAGE ON *.* TO `test`@`%`;
GRANT ALL PRIVILEGES ON `test`.* TO `test`@`%`;

    第一句 GRANT USAGE 是一个初始化语句,赋予 test 用户对所有数据库没有权限。
    第二句 GRANT ALL PRIVILEGES ON test.* 给用户 test 在 test 数据库上授予了所有权限。

因此,GRANT USAGE 本身不会允许用户执行任何数据库操作,真正的权限是在 GRANT ALL PRIVILEGES 语句中赋予的。
  1. information_schema 数据库

information_schema 是 MySQL 中的系统数据库,包含了关于数据库和表结构的元数据。这些数据是由 MySQL 内部自动管理的,因此用户不应该对其进行修改或删除。它是一个只读数据库,用来提供服务器状态、数据库结构等信息,不能用于存储实际的业务数据。

information_schema 是只读的,用户不能修改或删除其中的数据。

无法直接删除 information_schema 数据库,它是 MySQL 系统的一部分。

  1. 撤销权限
--撤销权限
REVOKE ALL PRIVILEGES ON `test`.* FROM 'goAdmin'@'%';
--刷新权限
FLUSH PRIVILEGES;
--查看权限
SHOW GRANTS FOR 'goAdmin'@'%';
  1. 查看所有用户
#查看所有用户信息
SELECT * FROM mysql.user;
  1. 查看当前会话信息
--这条查询会显示当前所有连接的会话信息,包括用户、主机、数据库、命令、时间等。
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
  1. 设置root只允许本机登录
--查看当前用户信息
select host,user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |   #root 用户允许从任意机器登录
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |   #root用户只允许从localhost登录
+-----------+------------------+
5 rows in set (0.00 sec)
--删除允许从任意机器登录
DELETE FROM mysql.user WHERE user = 'root' AND host = '%';
--刷新权限
FLUSH PRIVILEGES;
--验证
SELECT host, user FROM mysql.user WHERE user = 'root';
--重启 mysql,再登录,再验证一次