防止越权访问需坚持最小权限原则,实施连接层、数据库层、应用层分层校验;MySQL 账号须按角色精确授权、禁用高危权限与通配符;确认 skip-grant-tables 关闭、权限实时生效;应用层须校验资源归属并记录操作日志;定期审计收敛权限。
防止越权访问的核心在于:严格遵循最小权限原则,结合分层校验(连接层 + 数据库层 + 应用层),并确保 MySQL 权限配置精准、及时生效。
每个应用账号应仅拥有完成其功能所必需的最小权限,禁止使用 root 或高权限账号直连生产库。例如:
GRANT SELECT ON app_db.users TO 'app_ro'@'10.20.%.%';)orders 和 order_logs 表,禁用 DROP、ALTER、FILE 等危险权限
GRANT SELECT ON *.* 或 ON app_db.* 容易扩大攻击面,优先精确到表级MySQL 默认开启权限校验,但需确认未被绕过:
skip-grant-tables 是否关闭(该参数会完全跳过权限验证,仅用于紧急恢复)sql_mode 中不含 IGNORE_SPACE 等可能弱化语法校验的选项FLUSH PRIVILEGES; 后,用新连接测试权限是否实时生效(权限变更不自动同步到已有连接)SHOW GRANTS FOR 'user'@'host'; 和 SELECT * FROM mysql.user WHERE User='xxx'; 核对实际生效权限数据库权限是第一道防线,但无法覆盖逻辑越权(如用户 A 尝试访问用户 B 的订单)。必须在应用中补充校验:
WHERE user_id = ? 条件,而非依赖前端传来的 user_id 参数权限容易随业务迭代膨胀,需建立常态化治理机制:
mysql.user 和 mysql.db 表,识别长期未登录、权限过大或 host 为 % 的账号REVOKE 所有权限,再 DROP USER