案例情境
近幾天檢查資料庫客戶資料時意外發現有客戶的帳戶餘額為負值,這對公司來說是一個非常致命的錯誤,事關到公司營收。
便開始檢查是否被鑽了漏洞或者程式有邏輯錯誤。
便開始檢查是否被鑽了漏洞或者程式有邏輯錯誤。
在逐筆確認了交易的Log後,發現客戶的提款動作在短時間內重覆了兩次
此時心中開始咒罵 : 一定是哪個傢伙沒確認餘額狀況,就讓客戶可以領錢
於是乎去檢查了提款的Stored Procedure,發現以下這段邏輯
IF EXISTS(
SELECT 1
FROM dbo.MemberAccount
WHERE MemberID = @MemberID
AND ActualBalance >= @TransferAmount
)
BEGIN
UPDATE dbo.MemberAccount
SET ActualBalance = ActualBalance - @TransferAmount
WHERE MemberID = @MemberID
END