eric писал(а):1) Хранимые процедуры
2) Подготовленные выражения (gnoblin+1)
3) Распределение уровня доступа на уровне БД (рут - отдельно, для игроков - отдельно, выставить доступ на уровне таблиц по необходимости операций, рут не использовать)
4) Избегать динамически формируемых запросов в процедурах или жестко проверять/приводить к типу.
Желательно применять все 3 первых пункта.
1 - а чем они тут помогут ? =) ... в любом случае даже если инсерт в процедуре, ей на вход мы подаём юзер строку .. а там можно чёрта лысого ... (или давайте пример где она спасёт)
2 - не подготовленные а параметризованные .. тут я уже согласился и благо юзаю это не задумываясь уже давно
3 - простите .. что ? ... у нас есть игровой сервер ... он под рутом как ни крути сидит на базе. пакеты прилетают в игровой сервер, он выполняет действия... на кой чёрт юзера ваапще пускать в базу? этож муветон.. тут как раз сервер-рут и больше никого в SQL сервер не пускать. я даже SQL внешние конекты запретил как таковые. только локал хост.
4 - отлично .. тип - строка от юзера ... и что ?! ) (неясно к чему речь о приведении типов)
тут шла речь об иньекции. это когда юзер подсовывает адекватный SQL код в поле ввода в клиенте.. а сервер его нечаянно исполняет.
решения как избежать этого, я озвучил в крайнем своём посте под словами "сухой отстаток"