mysql权限设置
- 创建用户从任意机器访问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)
- 权限解释:
在 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 语句中赋予的。
- information_schema 数据库
information_schema 是 MySQL 中的系统数据库,包含了关于数据库和表结构的元数据。这些数据是由 MySQL 内部自动管理的,因此用户不应该对其进行修改或删除。它是一个只读数据库,用来提供服务器状态、数据库结构等信息,不能用于存储实际的业务数据。
information_schema 是只读的,用户不能修改或删除其中的数据。
无法直接删除 information_schema 数据库,它是 MySQL 系统的一部分。
- 撤销权限
--撤销权限
REVOKE ALL PRIVILEGES ON `test`.* FROM 'goAdmin'@'%';
--刷新权限
FLUSH PRIVILEGES;
--查看权限
SHOW GRANTS FOR 'goAdmin'@'%';
- 查看所有用户
#查看所有用户信息
SELECT * FROM mysql.user;
- 查看当前会话信息
--这条查询会显示当前所有连接的会话信息,包括用户、主机、数据库、命令、时间等。
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
- 设置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,再登录,再验证一次