mysql权限类型有哪些_mysql权限分类详解

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

MySQL权限按作用范围分为四类:全局、数据库、表、列,外加子程序(存储过程/函数)这一特殊层级。不同层级对应不同操作粒度,也决定了授权语法是否合法。

全局权限(*.*)

适用于整个MySQL实例,控制服务器级操作,比如重启、查看所有库、创建用户等。这类权限只能用*.*格式授予,不能限定到某个库或表。

常见权限:CREATE USER、RELOAD、SHUTDOWN、PROCESS、SUPER、SHOW DATABASES、GRANT OPTION 注意:授予DROP ON *.*等于允许删除mysql系统库,极危险 错误示例:
GRANT CREATE USER ON test.* TO 'u1'@'%';
→ 报错,该权限不支持库级授权

数据库权限(db_name.*)

作用于指定数据库内的所有对象(表、视图、存储过程等),权限存储在mysql.db表中。

常见权限:CREATE、DROP、ALTER、LOCK TABLES、REFERENCES、CREATE ROUTINE、EXECUTE 例如:
GRANT SELECT, INSERT ON sales.* TO 'appuser'@'10.0.1.%';
→ 允许对sales库所有表读写
CREATE ROUTINE必须配合ALTER ROUTINE才能修改已有存储过程

表与列权限(db_name.tbl_name / db_name.tbl_name.col_name)

精细化控制到单张表甚至某一列,适合敏感字段隔离场景,权限分别存于mysql.tables_privmysql.columns_priv表。

表级常见权限:SELECT、INSERT、UPDATE、DELETE、INDEX、TRIGGER、ALTER 列级仅支持SELECT、INSERT、UPDATE,且必须显式列出列名,如:
GRANT UPDATE(salary) ON hr.employees TO 'hr_mgr'@'%';
UPDATE某列时,若涉及自增或默认值逻辑,仍需对应表的INSERT/ALTER权限配合

子程序权限(routine_name)

专用于存储过程和函数,支持全局、库级、子程序三级授权,权限记录在mysql.procs_priv中。

关键权限:EXECUTE(调用)、ALTER ROUTINE(修改/删除)、CREATE ROUTINE(新建) EXECUTE可在库级授予(
ON db_name.*
),也可精确到单个过程(
ON PROCEDURE db_name.p1
没有WITH GRANT OPTION时,被授权者无法将EXECUTE权限再转授他人

权限生效依赖内存加载,每次执行GRANT/REVOKE后建议运行

FLUSH PRIVILEGES;
确保立即生效;实际权限检查是逐层匹配——先查全局,再查库、表、列,任一层满足即通过,但管理类权限(如RELOAD)只认全局层级。

相关推荐