Я пытаюсь написать функцию в MySQL, которая получает пароль для имени пользователя, заданного как параметр, и избегая инъекции SQL.Как безопасно извлекать данные sql с помощью хранимой функции
Вот мой код:
CREATE FUNCTION get_password_for_user (p_username varchar(30))
returns varchar(32)
BEGIN
declare passwd varchar(32) default "";
PREPARE stmt FROM 'select password into @passwd from users where name=?';
SET @name = p_username;
EXECUTE stmt USING @name;
DEALLOCATE PREPARE stmt;
return passwd;
END $$
Когда я пытаюсь создать его, он выдает ошибку Dynamic SQL:
Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger
Я нашел решение, связанное с CONCAT в Интернете, но это означает быть уязвимым для SQL-инъекции, и я, очевидно, этого не хочу.
Есть ли что-то, что я могу сделать по этому поводу? Или существует какой-либо другой способ справиться с этой ситуацией?
использовать фреймворк (который вызывает функцию), который обрабатывает инъекции. не используйте динамический sql для его обработки. –