0
在MySQL中处理双重支出问题的推荐方式是什么?说,例如,我有转移$x
从账号A
到B
像这样的应用程序:MySQL Transactions&Double Spending
- 开始交易
- 确保占
A
有balance >= $x
- 添加
$x
到B
的平衡 - 扣除
$x
从A
的余额 - 提交(或回滚,如果查询失败)
我在考虑两个相同的事务同时执行以将$x
从A
转换为B
的情况。只要A
的余额至少为$x
,步骤#2中的支票将通过每笔交易,因为两者均未更新余额。这将允许攻击者发出两笔交易,整个金额为A
,并且两笔交易均已执行,因此可以将帐户余额加倍。
建议如何解决这个问题?将MySQL隔离级别设置为REPEATABLE_READ
是否足以防止这种情况发生?或者,我可以确保从A余额中扣除的查询包含WHERE balance > $x
子句,如果影响零行,则回滚事务。但是,理想情况下,我希望通过DBMS层本身来处理这个问题。
谢谢!
[mySQL Transactions vs Locking Tables]的可能重复(http://stackoverflow.com/questions/4226766/mysql-transactions-vs-locking-tables) –
查看链接问题中的所有答案。 –
从倒转第3步和第4步开始。 –