MySQL访问控制分两阶段:首先连接验证通过用户名、密码和IP在mysql.user表匹配允许登录;其次操作权限验证按全局、数据库、表和列层级检查权限,确保用户仅能执行授权操作。

MySQL的访问控制机制用于确保只有经过授权的用户才能访问数据库资源。整个过程分为两个主要阶段:连接验证和操作权限验证,这两个阶段共同保障了数据库的安全性。
1. 连接验证阶段
当客户端尝试连接MySQL服务器时,系统会检查该用户是否允许从当前主机登录。这一阶段的核心是身份识别:
- MySQL根据用户名、密码以及客户端来源IP地址(或主机名)在mysql.user表中进行匹配。
- 如果提供的凭据与user表中的某条记录匹配,并且密码正确,则允许建立连接;否则拒绝访问。
- 这个阶段不涉及具体能做什么,只决定能否连上服务器。
2. 操作权限验证阶段
一旦连接成功,用户在执行每一条SQL语句时,MySQL都会检查其是否有足够的权限完成对应操作。权限具有层级结构:
-
全局权限:适用于所有数据库,存储在mysql.user表中,例如
SELECT、INSERT、SUPER等。 - 数据库级权限:针对特定数据库,定义在mysql.db表中,如对某个库有读写权限。
- 表级和列级权限:更细粒度的控制,分别记录在tables_priv和columns_priv表中。
- 每次执行查询、修改、删除等操作时,MySQL都会逐层检查这些权限表以确认是否允许该行为。
管理员可以通过GRANT和REVOKE语句管理权限,使用FLUSH PRIVILEGES使更改立即生效。合理配置账户权限、避免使用高权限账号处理日常任务,有助于提升数据库安全性。
基本上就这些。理解这两个阶段有助于更好地设计安全策略和排查权限问题。










