Надежно хранить остатки на счетах в базе данных? - PullRequest
3 голосов
/ 08 марта 2011

Итак, у меня есть веб-приложение Django, и мне нужно добавить к нему модуль оплаты.

В основном пользователь будет предварительно оплачивать определенное количество услуг, и это будет постепенно уменьшаться по мере того, как пользователь будет использовать службу,Мне интересно, что является лучшей практикой для облегчения этого?Я могу обрабатывать платежи с помощью Satchmo, но тогда просто сохранение значения USD в базе данных и непосредственное взаимодействие моего кода с этим значением кажется довольно рискованным.Конечно, я могу это сделать, но мне интересно, есть ли уже проверенное решение этой проблемы?

Ответы [ 2 ]

6 голосов
/ 08 марта 2011

Я не знаю о «хорошо протестированном решении», как вы говорите, но я бы настоятельно рекомендовал не хранить долларовую стоимость в базе данных и увеличивать или уменьшать эту долларовую стоимость.Вместо этого я бы посоветовал хранить транзакции, которые могут быть проверены, если что-то пойдет не так.Рассчитайте сумму, доступную по кредитным и дебетовым транзакциям в учетной записи пользователя, а не храните ее напрямую.

В целях дополнительной безопасности вы хотели бы убедиться, что ваше приложение не может удалить записи транзакций.Если по какой-то причине вы не можете отказать в разрешении на запись в соответствующие таблицы, попробуйте реплицировать транзакции во вторую базу данных (которую приложение не касается) по мере их создания.

1 голос
/ 08 марта 2011

Моя независимая от языка рекомендация - убедиться, что база данных, которая взаимодействует с веб-приложением, доступна только для чтения;по крайней мере, для таблиц, которые имеют дело с этими остатками на счетах.Таким образом, вы обрабатываете платежи и управляете сокращением остатков на счетах в базе данных, которая не доступна никому, кроме вас (то есть не подключена к Интернету или этому веб-приложению).Вы можете периодически делать снимки этой базы данных и обновлять ту, которая взаимодействует с веб-приложением, чтобы у ваших пользователей была прочитанная копия их баланса.Таким образом, даже если пользователь может изменить данные, чтобы увеличить свой баланс на миллион долларов, вы знаете, что их истинный баланс находится в отдельном месте.По сути, вам никогда не придется доверять данным на стороне веб-приложения - они будут исключительно информационными для ваших пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...