如何通过Grant语法精确限制MySQL普通用户的删除权限?
- 内容介绍
- 文章标签
- 相关推荐
本文共计885个文字,预计阅读时间需要4分钟。
普通用户不应该拥有《DELETE` 权限,这是数据库安全的基石。直接使用《GRANT ALL PRIVILEGES ON *.*》授予新用户权限,等同于将删除数据库的钥匙递给对方——那他可能只是一个只会读取报表的用户。
明确禁止 DELETE 时,别用 ALL PRIVILEGES
很多人图省事写 GRANT ALL PRIVILEGES ON testdb.* TO 'reporter'@'%',结果发现这个用户能删表、删行、删整个库。ALL 是真·全权委托,包含 DELETE、DROP、ALTER 等高危权限。
正确做法是显式列出需要的权限:
-
SELECT必须保留(否则查不了数据) -
INSERT和UPDATE按业务需要决定是否开放 - 绝对不写
DELETE,也不写ALL - 如果只需要查,就只给
SELECT;如果还要导出或临时写中间表,再加CREATE TEMPORARY TABLES(注意这不是CREATE)
grant 语句里漏掉 flush privileges 不会立即生效
MySQL 的权限不是实时加载的,它把权限缓存在内存里。你执行完 GRANT SELECT, INSERT ON testdb.* TO 'reporter'@'%' 后,该用户可能仍连不上、或权限没变——因为缓存没刷新。
本文共计885个文字,预计阅读时间需要4分钟。
普通用户不应该拥有《DELETE` 权限,这是数据库安全的基石。直接使用《GRANT ALL PRIVILEGES ON *.*》授予新用户权限,等同于将删除数据库的钥匙递给对方——那他可能只是一个只会读取报表的用户。
明确禁止 DELETE 时,别用 ALL PRIVILEGES
很多人图省事写 GRANT ALL PRIVILEGES ON testdb.* TO 'reporter'@'%',结果发现这个用户能删表、删行、删整个库。ALL 是真·全权委托,包含 DELETE、DROP、ALTER 等高危权限。
正确做法是显式列出需要的权限:
-
SELECT必须保留(否则查不了数据) -
INSERT和UPDATE按业务需要决定是否开放 - 绝对不写
DELETE,也不写ALL - 如果只需要查,就只给
SELECT;如果还要导出或临时写中间表,再加CREATE TEMPORARY TABLES(注意这不是CREATE)
grant 语句里漏掉 flush privileges 不会立即生效
MySQL 的权限不是实时加载的,它把权限缓存在内存里。你执行完 GRANT SELECT, INSERT ON testdb.* TO 'reporter'@'%' 后,该用户可能仍连不上、或权限没变——因为缓存没刷新。

