在MySQL/MariaDB中,有一个SQL_SAFE_MDOE,它阻止您在where子句中不使用主键的情况下运行查询。但是,即使启用了该标志,我也可以运行如下查询
DELETE FROM table WHERE id > 0;
这几乎会产生和
DELETE FROM table
那么,有没有什么办法可以更严格一些呢?先谢了
e0bqpujr1#
您可以实现一个以指定方式进行删除的存储过程,并让用户调用该过程。然后撤销用户对该表的DELETE权限,这样用户就不能直接删除,他们必须调用该过程。SQL_SAFE_MODE总是可以被绕过的,可以通过更改会话变量,也可以通过使用WHERE子句(如图所示),或者通过使用LIMIT子句。
1条答案
按热度按时间e0bqpujr1#
您可以实现一个以指定方式进行删除的存储过程,并让用户调用该过程。
然后撤销用户对该表的DELETE权限,这样用户就不能直接删除,他们必须调用该过程。
SQL_SAFE_MODE总是可以被绕过的,可以通过更改会话变量,也可以通过使用WHERE子句(如图所示),或者通过使用LIMIT子句。