mysql菜鸟教程

专栏导航

17.4 查看用户权限

      在数据库管理中,了解用户当前的权限配置至关重要。无论是为了审计、排查问题,还是确认权限是否正确授予,都需要能够清晰地查看用户所拥有的权限。MySQL 提供了 SHOW GRANTS 命令来查看用户的权限,同时也允许直接查询系统权限表以获得更详细的信息。

一、使用 SHOW GRANTS 查看权限

查看当前登录用户的权限

最简单的用法是直接执行:

SHOW GRANTS;

该命令会返回当前会话用户所拥有的所有权限,以 GRANT 语句的形式展示。

查看指定用户的权限

要查看其他用户的权限,需要指定用户名和主机名:

SHOW GRANTS FOR '用户名'@'主机名';

例如:

SHOW GRANTS FOR 'zhangsan'@'localhost';

注意:执行此命令需要拥有 mysql 系统数据库的查询权限,或拥有全局的 SELECT 权限。通常只有管理员(如 root)才能查看其他用户的权限。

输出示例

假设用户 zhangsan@localhost 拥有以下权限:

GRANT SELECT, INSERT ON *.* TO `zhangsan`@`localhost`
GRANT ALL PRIVILEGES ON `school`.* TO `zhangsan`@`localhost`
GRANT UPDATE (`name`) ON `school`.`students` TO `zhangsan`@`localhost`

输出会以多条 GRANT 语句的形式呈现,每条对应一个权限级别(全局、数据库、表、列等)。

二、通过系统表查看权限

SHOW GRANTS 实际上是从系统权限表中读取信息并格式化的结果。如果需要对权限进行更细致的查询或批量导出,可以直接查询 MySQL 的系统数据库 mysql 中的权限表。

主要的权限表

表名

存储的权限级别

说明

mysql.user

全局权限

包含用户账户和全局权限(如 

SELECT_ON *.*

mysql.db

数据库级权限

记录用户在特定数据库上的权限

mysql.tables_priv

表级权限

记录用户在特定表上的权限

mysql.columns_priv

列级权限

记录用户在特定列上的权限

mysql.procs_priv

存储过程/函数权限

记录用户对存储过程和函数的执行权限

示例查询

1. 查看所有用户及其全局权限

SELECT user, host, 
       Select_priv, Insert_priv, Update_priv, Delete_priv, 
       Create_priv, Drop_priv, ...
FROM mysql.user;

每个权限列的值通常为 'Y'(有权限)或 'N'(无权限)。

2. 查看特定用户在特定数据库上的权限

SELECT * FROM mysql.db 
WHERE user = 'zhangsan' AND host = 'localhost';

3. 查看表级权限

SELECT * FROM mysql.tables_priv 
WHERE user = 'zhangsan' AND host = 'localhost';

tables_priv 表中的 Table_priv 列存储了表级别的权限(如 SelectInsert),而 Column_priv 列存储了列级别的权限(如果存在)。

4. 查看列级权限

SELECT * FROM mysql.columns_priv 
WHERE user = 'zhangsan' AND host = 'localhost';

三、权限信息的综合理解

通过 SHOW GRANTS 或查询系统表,我们可以看到权限是按级别累积的。例如,用户可能同时拥有全局 SELECT、数据库 ALL 以及表级特定权限。实际生效的权限是这些的并集,但更精细的级别(如表级)可能会覆盖全局的同类型权限?实际上,MySQL 权限检查采用“最具体优先”原则,但通常我们在管理时只需确保授予了足够的权限即可。

四、查看权限所需权限

  • 任何人都可以执行 SHOW GRANTS 查看自己的权限。

  • 要查看其他用户的权限,需要拥有对 mysql 数据库的全局权限(如 SELECT ON *.*)或直接拥有 mysql 数据库的 SELECT 权限。通常只有 root 或具有 GRANT OPTION 的管理员可以这样做。

小结

  • 使用 SHOW GRANTS [FOR user] 可以快速查看用户权限。

  • 通过查询 mysql 系统库中的权限表,可以获取更详细的权限信息。

  • 了解用户权限是数据库安全审计和维护的重要环节。


所有评论

关于我 备案号:蜀ICP备2023042032号-1