gpt4 book ai didi

MySQL 交易和双花

转载 作者:行者123 更新时间:2023-11-30 22:19:27 24 4
gpt4 key购买 nike

在 MySQL 中处理双花问题的推荐方法是什么?比方说,我有一个应用程序将 $x 从帐户 A 转移到 B,如下所示:

  1. 开始交易
  2. 确保帐户 Abalance >= $x
  3. $x添加到B的余额
  4. A的余额中扣除$x
  5. 提交(如果查询失败则回滚)

我正在考虑同时执行两个相同事务以将 $xA 转移到 B 的场景。只要 A 的余额至少为 $x,每笔交易都将通过步骤 #2 中的检查,因为尚未更新余额。这将允许攻击者针对 A 的全部余额发出两笔交易,并同时执行这两项交易,从而使他能够花费双倍的账户余额。

解决这个问题的推荐方法是什么?将 MySQL 隔离级别设置为 REPEATABLE_READ 是否足以防止这种情况发生?或者,我可以确保从 A 的余额中扣除的查询包含 WHERE balance > $x 子句,然后如果受影响的行数为零,则回滚事务。但是,理想情况下,我希望由 DBMS 层本身处理它。

谢谢!

最佳答案

也许您可以创建一个触发器,在更新时余额 < 0 时抛出错误。

然后在您的查询中将余额更新为 balance -x 而没有 where 子句,这将阻止余额更新为小于零

总是尝试先从一个帐户中取出钱,然后再存入另一个帐户。这在逻辑上也更有意义,因为您需要先从银行取钱,然后才能转帐或购买东西。我不知道为什么你现在的顺序是相反的。

关于MySQL 交易和双花,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com