MySQL 权限管理详解:从系统表到用户授权
MySQL 的权限管理是保障数据库安全的核心机制,通过精细化控制用户对数据库的操作权限,可防止未授权访问和误操作。MySQL 的权限信息存储在 mysql 系统库的 5 个专用表中,权限控制粒度从全局到列级不等。本文详细解析权限存储机制、授权方法及生效规则。
权限存储的系统表
MySQL 的权限信息按粒度分层存储在以下 5 个系统表中,权限范围从大到小依次为:全局 → 数据库 → 表 → 列 → 存储过程 / 函数。
1. user 表:全局级别权限
- 作用:存储用户账户信息及全局权限(对所有数据库生效)。
- 核心字段:
Host:允许访问的主机(支持%通配符,如192.168.1.%表示 192.168.1 网段)。User:用户名(与Host共同构成唯一用户标识User@Host)。- 权限字段:如
Select_priv(查询权限)、Insert_priv(插入权限)等,值为Y表示拥有该权限。
- 特点:若用户在
user表中有某权限,则对所有数据库默认拥有该权限(除非被更细粒度的权限限制)。
2. db 表:数据库级别权限
- 作用:控制用户对特定数据库的操作权限(仅对指定数据库生效)。
- 核心字段:
Db:数据库名(指定权限生效的数据库)。Host、User:与user表一致,标识用户及来源主机。- 权限字段:与
user表类似(如Select_priv、Create_priv等),但仅作用于Db字段指定的数据库。
- 特点:数据库级权限优先级高于全局权限(若用户对某数据库有更严格的权限限制,以
db表为准)。