MySQL能否为用户分配具体的列级权限?

2026-04-27 17:410阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计916个文字,预计阅读时间需要4分钟。

MySQL能否为用户分配具体的列级权限?

可以,但限制非常具体:

常见误判是以为 GRANT ... ON table(col1, col2) 能覆盖所有权限类型,实际会报错:

ERROR 1221 (HY000): Incorrect usage of COLUMN GRANT and NON-COLUMN PRIVILEGES

  • SELECT 列权限:控制哪些列能被 SELECT 查询到(注意:若用户有表级 SELECT,列权限会被绕过)
  • INSERT 列权限:控制 INSERT INTO t(c1,c2) VALUES(...) 中能显式指定哪些列;但若用 INSERT INTO t VALUES(...)(无列名),则需所有列都有 INSERT 权限才允许
  • UPDATE 列权限:只影响 SET col = ... 中被修改的列,未授权的列即使出现在 SET 子句中也会报错

列权限必须和表级权限共存,且优先级低于表级权限

这是最容易踩的坑:如果用户已有表级 SELECT 权限,再单独 revoke 某列的 SELECT,不会生效。列权限只在用户**没有对应表级权限**时起作用。

换句话说,列权限是“补充性限制”,不是“独立访问控制”。

阅读全文
标签:Mysql

本文共计916个文字,预计阅读时间需要4分钟。

MySQL能否为用户分配具体的列级权限?

可以,但限制非常具体:

常见误判是以为 GRANT ... ON table(col1, col2) 能覆盖所有权限类型,实际会报错:

ERROR 1221 (HY000): Incorrect usage of COLUMN GRANT and NON-COLUMN PRIVILEGES

  • SELECT 列权限:控制哪些列能被 SELECT 查询到(注意:若用户有表级 SELECT,列权限会被绕过)
  • INSERT 列权限:控制 INSERT INTO t(c1,c2) VALUES(...) 中能显式指定哪些列;但若用 INSERT INTO t VALUES(...)(无列名),则需所有列都有 INSERT 权限才允许
  • UPDATE 列权限:只影响 SET col = ... 中被修改的列,未授权的列即使出现在 SET 子句中也会报错

列权限必须和表级权限共存,且优先级低于表级权限

这是最容易踩的坑:如果用户已有表级 SELECT 权限,再单独 revoke 某列的 SELECT,不会生效。列权限只在用户**没有对应表级权限**时起作用。

换句话说,列权限是“补充性限制”,不是“独立访问控制”。

阅读全文
标签:Mysql