MySQL表级权限支持SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、DROP、CREATE等操作,需用GRANT ON db.table语法授予,不可用db.*,并须FLUSH PRIVILEGES生效。
MySQL 表级权限用于控制用户对某张具体表的访问操作,比如只允许查 user 表、禁止删 log 表。它比数据库级权限更精细,适合多角色协作或敏感数据隔离场景。
可单独授予或回收的权限包括:
必须先确保用户已存在(MySQL 8.0+ 不支持 grant 时自动创建),再用 GRANT 指定表名:
GRANT SELECT, INSERT ON mydb.user_info TO 'app_user'@'192.168.1.%';
GRANT UPDATE(col_name) ON mydb.config TO 'editor'@'localhost';(列级细化,可选)
执行后需刷新权限才生效:
FLUSH PRIVILEGES;
⚠️ 注意:ON 后面不能写 *.* 或 db.*,必须是 db.table 形式;如果写成 ON mydb.*,那就是库级权限,不是表级。
查看用户当前所有权限(含表级):
SHOW GRANTS FOR 'app_user'@'192.168.1.%';
回收某张表的特定权限:
REVOKE DELETE ON mydb.audit_log FROM 'app_user'@'192.168.1.%';
回收全部表级权限(保留库级或全局权限):
REVOKE ALL PRIVILEGES ON mydb.user_info FROM 'app_user'@'192.168.1.%';
回收后同样要执行 FLUSH PRIVILEGES;
lower_case_table_names 设置,建议
统一小写避免混淆'user'@'%' 和 'user'@'192.168.1.100' 是两个不同账号,权限需分别配置CREATE USER + GRANT 分步操作,避免旧版语法兼容问题