mysql权限有哪些类型_常见权限说明

来源:这里教程网 时间:2026-02-28 20:36:24 作者:

MySQL权限按作用范围分四类

MySQL权限不是笼统的一套,而是按控制粒度划分为四个层级,权限逐级收敛、互不覆盖:

全局权限(*.*):影响整个MySQL服务,比如
CREATE USER
DROP USER
RELOAD
SUPER
。授予时必须写成
GRANT ... ON *.*
数据库权限(db_name.*):仅对指定数据库生效,如
CREATE
DROP
ALTER
GRANT OPTION
。用户可建库删库,但不能碰其他库。
表权限(db_name.table_name):细化到某张表,常用
SELECT
INSERT
UPDATE
DELETE
INDEX
TRIGGER
等。
列权限(db_name.table_name.column_name):最细粒度,只允许对特定字段执行
SELECT
UPDATE
,例如
GRANT SELECT(name, email) ON mydb.users TO 'u1'@'localhost';

管理类权限和操作类权限要区分

权限本质有两种用途,混淆容易导致越权或功能异常:

管理类权限:不操作数据,而是控制系统行为。例如:
  •
REPLICATION CLIENT
— 查看主从状态(
SHOW SLAVE STATUS

  •
FILE
— 读写服务器本地文件(
LOAD DATA INFILE
/
SELECT ... INTO OUTFILE
),风险极高,慎授
  •
PROCESS
— 查看所有线程(
SHOW PROCESSLIST

  •
SHUTDOWN
— 关闭MySQL服务
操作类权限:面向数据对象的常规CRUD及结构变更。例如:
  •
SELECT
/
INSERT
/
UPDATE
/
DELETE

  •
CREATE ROUTINE
EXECUTE
— 管理和调用存储过程
  •
REFERENCES
— 在建表时定义外键(需配合目标表的
SELECT
权限)

几个关键权限的实际影响要注意

有些权限看似普通,但实际影响超出直觉,部署时常被忽略:

DROP
权限在表级 = 允许
DROP TABLE
;但在数据库级 = 允许
DROP DATABASE
;若授予
DROP ON *.*
,用户可删掉
mysql
系统库 —— 权限丢失、服务瘫痪。
TRUNCATE TABLE
虽不是独立权限,但执行它需要该表的
DROP
权限(因底层是先删后重建)。
GRANT OPTION
不是数据操作权,而是“转授权力”——拿到它,用户就能把已有权限再授给他人,相当于二级管理员,务必严格控制。
ALL PRIVILEGES
≠ 所有权限全开:它不包含
GRANT OPTION
PROXY
等特殊权限,显式添加才生效。

权限查看与验证方法

授完权别急着走,三步确认是否生效:

查用户当前所有权限:
SHOW GRANTS FOR 'user'@'host';
查权限来源(哪个层级生效):
SELECT * FROM mysql.db WHERE User='user' AND Host='host';
(对应数据库级)
权限变更后必须刷新:
FLUSH PRIVILEGES;
(仅当直接改
mysql
系统表时强制需要;用
GRANT/REVOKE
则自动生效,无需手动刷)

相关推荐