MySQL 提供了两种主要方法来查看用户权限,适用于不同场景。

方法一:使用 `SHOW GRANTS` 语句(推荐首选)

这是最常用、最直观的方法,直接显示授予用户的权限语句。

语法:

SHOW GRANTS [FOR 'username'@'hostname'];

使用场景:

1.  查看当前用户权限:不指定 `FOR` 子句

     SHOW GRANTS;


2.  查看特定用户权限:必须提供完整的用户名和主机名

   SHOW GRANTS FOR 'testuser1'@'localhost';
   SHOW GRANTS FOR 'root'@'localhost';


权限要求:

 查看自己的权限:任何用户都可以

 查看其他用户的权限:需要 `SELECT` 权限 on `mysql` 数据库或 `CREATE USER` 权限

示例解析:

1. 新用户权限:

   GRANT USAGE ON *.* TO 'testuser1'@'localhost'

    `USAGE`:表示"无权限",只能登录服务器

    `ON *.*`:权限作用范围是所有数据库的所有表

2. root用户权限:

  GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

    `ALL PRIVILEGES`:拥有所有权限

    `WITH GRANT OPTION`:可以将权限授予其他用户

优点:

 输出直观,直接显示 GRANT 语句

 自动包含所有层级的权限(全局、数据库、表等)

 在 MySQL 8.0+ 中会自动显示通过角色授予的权限

方法二:查询 `mysql.user` 系统表

这种方法直接查询系统权限表,获得原始的权限数据。

语法:

SELECT * FROM mysql.user WHERE User='username' AND Host='hostname';

更友好的查看方式(使用 `\G`):

SELECT * FROM mysql.user WHERE User='testuser1' AND Host='localhost'\G

权限要求:

 需要对 `mysql.user` 表有 `SELECT` 权限

 注意:新用户默认无此权限,无法执行此查询

输出特点:

 返回大量字段,每个权限对应一个字段

 权限字段值为 `'Y'`(有权限)或 `'N'`(无权限)

 只显示全局权限(`ON *.*`)

常用字段示例:

SELECT

User用户名
Host允许连接的主机
Select_priv查询权限
Insert_priv插入权限
Update_priv更新权限
Delete_priv删除权限
Create_priv创建数据库/表权限
Drop_priv删除数据库/表权限
Grant_priv授予权限的权限


FROM mysql.user

WHERE User='username';

权限层级说明

MySQL 权限分为多个层级,存储在不同的系统表中:

1. 全局权限 (`mysql.user`):作用于所有数据库

2. 数据库权限 (`mysql.db`):作用于特定数据库

3. 表权限 (`mysql.tables_priv`):作用于特定表

4. 列权限 (`mysql.columns_priv`):作用于特定列

`SHOW GRANTS` 会汇总所有层级的权限,而直接查询系统表需要分别查询不同的表。

 

实用技巧

1. 查看当前用户:

   SELECT CURRENT_USER();

 

2. 查看所有用户:

   SELECT User, Host FROM mysql.user;

 

3. 如果遇到权限错误,可以使用有权限的用户(如 root)来查看其他用户的权限。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)