NodeJS и MariaDB. Избегайте запросов для каждого столбца - PullRequest
0 голосов
/ 15 ноября 2018

Я использую NodeJS и MariaDB. У меня есть много таблиц, где некоторые пользователи могут изменить значение с помощью запросов. Я не хочу готовить запросы для каждого столбца, который пользователь хочет обновить, например:

module.exports.updateName = (name,id) =>{
    return pool.query("UPDATE Users SET name=? WHERE user_id=?;", [name,id])
}
module.exports.updateAge = (name,id) =>{
    return pool.query("UPDATE Users SET age=? WHERE user_id=?;", [age,id])
}

Я хочу построить с.т. как шаблон, который ожидает таблицу, столбцы и значения. Для предотвращения атак SQL-инъекций я уже использую? заполнители для значений. К сожалению MariaDB не поддерживает заполнители для таких идентификаторов, как ??. Я не чувствую себя в безопасности, если просто объединить имя таблицы или столбцы со строкой запроса, например:

"SELECT INTO " + tablename +"(" + columns + ")" ...

Моя идея заключалась в том, чтобы при каждом запуске запрашивать, какие имена таблиц и столбцов существуют в моей базе данных, и сохранять их в списке. Тогда я мог бы проверить, являются ли переданные строки таблицы и столбца действительными или нет.

Имеет ли эта идея смысл или это распространенный способ? Как бы справиться с этой проблемой? Я благодарен за каждый совет!

Привет

1 Ответ

0 голосов
/ 15 ноября 2018

Что бы я сделал, это создал бы хранимую процедуру с параметрами, пользователем, столбцом, значением, и внутри нее решал бы, какой оператор обновления использовать, например так:

create procedure updateValues (in uid int, in columnid int, in value int)...
begin
    if columnid = 0 then
       update users set name = value;
    else if columnid = 1 then
       update users set age = value;
    end if
end
...