mysql表级权限怎么设置_mysql表权限配置方法

9次阅读

MySQL 表级权限支持 SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、DROP、CREATE 等操作,需用 GRANT ON db.table 语法授予,不可用 db.*,并须 FLUSH PRIVILEGES 生效。

mysql 表级权限怎么设置_mysql 表权限配置方法

MySQL 表级权限用于控制用户对某张具体表的访问操作,比如只允许查 user 表、禁止删 log 表。它比数据库级权限更精细,适合多角色协作或 敏感数据 隔离场景。

表级权限支持哪些操作

可单独授予或回收的权限包括:

  • SELECT:读取表中数据(含 COUNT、WHERE 查询等)
  • INSERT:向表插入新行
  • UPDATE:修改表中已有数据(可进一步细化到列级)
  • DELETE:删除表中的行
  • ALTER:修改表结构(如 ADD COLUMN、CHANGE COLUMN)
  • INDEX:创建或删除索引
  • DROP:删除整张表(注意:不是删数据,是删表对象)
  • CREATE:仅在某些引擎下支持建视图 / 触发器等附属对象(非建表本身)

设置表级权限的正确语法

必须先确保用户已存在(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;

常见问题 提醒

  • 如果用户已有更高层级权限(比如对整个库有 ALL 权限),表级 REVOKE 可能不生效——MySQL 权限按“最大匹配优先”合并,需先回收上层权限再设表级限制
  • 表名区分大小写,取决于系统变量 lower_case_table_names 设置,建议统一小写避免混淆
  • 远程用户授权时,'user'@'%''user'@'192.168.1.100' 是两个不同账号,权限需分别配置
  • MySQL 8.0+ 推荐用 CREATE USER + GRANT 分步操作,避免旧版语法兼容问题
星耀云
版权声明:本站原创文章,由 星耀云 2026-01-02发表,共计1151字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources