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 权限
是的,您绝对应该考虑使用准备好的语句