gpt4 book ai didi

mysql - 如何使用存储函数安全地检索 sql 数据

转载 作者:行者123 更新时间:2023-11-29 11:34:43 24 4
gpt4 key购买 nike

我正在尝试在 MySQL 中编写一个函数,该函数获取作为参数给出的用户名的密码,同时避免 SQL 注入(inject)。

这是我的代码:

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 注入(inject)攻击,我显然不希望这样。

对此我能做些什么吗?或者有其他正确的方法来处理这种情况吗?

最佳答案

为什么使用动态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 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com