如何使用存储函数安全地检索 sql 数据
How to safely retrieve sql data using a stored function
我正在尝试在 MySQL 中编写一个函数来获取作为参数给定的用户名的密码,同时避免 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 $$
当我尝试创建它时,出现动态 SQL 错误:
Error Code: 1336. Dynamic SQL is not allowed in stored function or
trigger
我在网上找到了涉及 CONCAT 的解决方案,但这意味着容易受到 SQL 注入的攻击,我显然不希望这样。
我能做点什么吗?或者有什么其他合适的方法来处理这种情况?
为什么要使用动态 sql?
CREATE FUNCTION get_password_for_user (p_username varchar(30))
returns varchar(32)
BEGIN
declare passwd varchar(32) default '';
select passwd := u.password
from users u
where u.name = p_username;
return passwd;
END $$
我正在尝试在 MySQL 中编写一个函数来获取作为参数给定的用户名的密码,同时避免 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 $$
当我尝试创建它时,出现动态 SQL 错误:
Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger
我在网上找到了涉及 CONCAT 的解决方案,但这意味着容易受到 SQL 注入的攻击,我显然不希望这样。
我能做点什么吗?或者有什么其他合适的方法来处理这种情况?
为什么要使用动态 sql?
CREATE FUNCTION get_password_for_user (p_username varchar(30))
returns varchar(32)
BEGIN
declare passwd varchar(32) default '';
select passwd := u.password
from users u
where u.name = p_username;
return passwd;
END $$