如何通过Grant语法精确限制MySQL普通用户的删除权限?

2026-04-27 21:301阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

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

如何通过Grant语法精确限制MySQL普通用户的删除权限?

普通用户不应该拥有《DELETE` 权限,这是数据库安全的基石。直接使用《GRANT ALL PRIVILEGES ON *.*》授予新用户权限,等同于将删除数据库的钥匙递给对方——那他可能只是一个只会读取报表的用户。

明确禁止 DELETE 时,别用 ALL PRIVILEGES

很多人图省事写 GRANT ALL PRIVILEGES ON testdb.* TO 'reporter'@'%',结果发现这个用户能删表、删行、删整个库。ALL 是真·全权委托,包含 DELETEDROPALTER 等高危权限。

正确做法是显式列出需要的权限:

  • SELECT 必须保留(否则查不了数据)
  • INSERTUPDATE 按业务需要决定是否开放
  • 绝对不写 DELETE,也不写 ALL
  • 如果只需要查,就只给 SELECT;如果还要导出或临时写中间表,再加 CREATE TEMPORARY TABLES(注意这不是 CREATE

grant 语句里漏掉 flush privileges 不会立即生效

MySQL 的权限不是实时加载的,它把权限缓存在内存里。你执行完 GRANT SELECT, INSERT ON testdb.* TO 'reporter'@'%' 后,该用户可能仍连不上、或权限没变——因为缓存没刷新。

阅读全文
标签:Mysql

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

如何通过Grant语法精确限制MySQL普通用户的删除权限?

普通用户不应该拥有《DELETE` 权限,这是数据库安全的基石。直接使用《GRANT ALL PRIVILEGES ON *.*》授予新用户权限,等同于将删除数据库的钥匙递给对方——那他可能只是一个只会读取报表的用户。

明确禁止 DELETE 时,别用 ALL PRIVILEGES

很多人图省事写 GRANT ALL PRIVILEGES ON testdb.* TO 'reporter'@'%',结果发现这个用户能删表、删行、删整个库。ALL 是真·全权委托,包含 DELETEDROPALTER 等高危权限。

正确做法是显式列出需要的权限:

  • SELECT 必须保留(否则查不了数据)
  • INSERTUPDATE 按业务需要决定是否开放
  • 绝对不写 DELETE,也不写 ALL
  • 如果只需要查,就只给 SELECT;如果还要导出或临时写中间表,再加 CREATE TEMPORARY TABLES(注意这不是 CREATE

grant 语句里漏掉 flush privileges 不会立即生效

MySQL 的权限不是实时加载的,它把权限缓存在内存里。你执行完 GRANT SELECT, INSERT ON testdb.* TO 'reporter'@'%' 后,该用户可能仍连不上、或权限没变——因为缓存没刷新。

阅读全文
标签:Mysql