mysql用户和权限是什么_mysql权限管理基础概念

MySQL用户由用户名和主机名共同定义,权限分全局、数据库、表、列四级,支持角色批量授权,连接需经合法性与权限两阶段验证,修改权限后需刷新缓存。

MySQL 用户和权限是数据库访问控制的核心机制:用户代表能连接并操作数据库的实体,权限则决定这个用户能做什么——比如查数据、改表结构、删库,甚至管理其他用户。

用户由用户名+主机名共同定义

MySQL 不只看用户名,还严格绑定客户端来源。例如 'appuser'@'192.168.1.%''appuser'@'localhost' 是两个完全独立的账户,可以设不同密码、不同权限。主机名支持通配符(% 表示任意IP,_ 表示单字符),但不支持正则或网段掩码写法。

权限分层级,粒度从宽到细

权限不是笼统的一张表,而是按作用范围分层存储在系统库 mysql 的多张表中:

  • 全局级(mysql.user):如 SELECTDROP DATABASERELOAD,影响整个实例
  • 数据库级(mysql.db):如 CREATEALTER 某个库下的对象
  • 表级(mysql.tables_priv):限制对某张表的 INSERTUPDATE
  • 列级(mysql.columns_priv):精细到只允许查 users.name,但不能看 users.phone

角色让批量授权更可控(MySQL 8.0+)

角色是一组预定义权限的集合,类似“模板”。你可以先创建一个 report_reader 角色,赋予它所有库的 SELECT 权限;再把该角色授予多个报表用户。后续只需调整角色权限,所有成员自动同步,不用逐个 GRANT

权限生效依赖两阶段验证

每次连接进来,MySQL 先检查 user 表确认账号是否存在、密码是否正确、来源IP是否允许(合法性验证);通过后,再按层级顺序(global → db → table → column)叠加匹配的权限项,最终确定该会话能执行哪些操作(权限验证)。修改权限后必须执行 FLUSH PRIVILEGES 或重启服务才能让内存中的权限缓存更新(仅直接改系统表时需要;用 GRANT/REVOKE 命令则自动刷新)。