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步開始。 –