DELETE拒绝SELECT命令

我正在用 PHP 编写时事通讯服务,用户可以通过单击电子邮件中的链接来取消订阅。此链接包含电子邮件的 id,然后用于在数据库中查找电子邮件,因此可以将其删除。相关代码如下所示:

DELETE FROM Emails WHERE id='{$email_id}'

出于安全考虑,我以为我创建了多个数据库用户,每个用户只有一个权限。我有一个选择用户,只能选择。还有一个delete-user,只能删除。令我困惑的是,运行上面的代码,同时使用我的删除用户的用户名和密码,会产生以下输出:

SELECT 命令拒绝用户 'username'@'host' 用于表 'Emails' 中的列 'id'

通过授予删除用户选择权限,这个问题很容易解决,但我仍然很困惑为什么这是必要的。

为什么只删除行的用户需要选择权限?

回答

问:为什么只删除行的用户需要选择权限?

答:因为您的删除语句中有“where id=xyz”。

从文档:

https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_delete

其他读取列值的语句也需要 SELECT 权限

是的,您绝对应该考虑使用准备好的语句


以上是DELETE拒绝SELECT命令的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>