Mariadb 存储过程中临时表的行为
我一直在开发一个允许用户编写自己的查询的平台,我正在考虑使用存储过程进行行级访问。这就是它的工作原理;用户使用存储过程调用查询,该过程将检查是否有权访问行,如果通过检查,则返回结果。这是我遇到麻烦的部分的一个简化版本 你们可以复制粘贴这些代码来理解我的意思Mariadb 存储过程中临时表的行为,mariadb,Mariadb,我一直在开发一个允许用户编写自己的查询的平台,我正在考虑使用存储过程进行行级访问。这就是它的工作原理;用户使用存储过程调用查询,该过程将检查是否有权访问行,如果通过检查,则返回结果。这是我遇到麻烦的部分的一个简化版本 你们可以复制粘贴这些代码来理解我的意思 CREATE TABLE student_tests ( name CHAR(10), test CHAR(10), score TINYINT, test_date DATE ); INSERT INTO student_tes
CREATE TABLE student_tests (
name CHAR(10), test CHAR(10),
score TINYINT, test_date DATE
);
INSERT INTO student_tests
(name, test, score, test_date) VALUES
('Chun', 'SQL', 75, '2012-11-05'),
('Chun', 'Tuning', 73, '2013-06-14'),
('Esben', 'SQL', 43, '2014-02-11'),
('Esben', 'Tuning', 31, '2014-02-09'),
('Kaolin', 'SQL', 56, '2014-01-01'),
('Kaolin', 'Tuning', 88, '2013-12-29'),
('Tatiana', 'SQL', 87, '2012-04-28'),
('Tatiana', 'Tuning', 83, '2013-09-30');
DELIMITER //
CREATE or REPLACE PROCEDURE proc1 (IN qry LONGTEXT)
NOT DETERMINISTIC
READS SQL DATA
SQL SECURITY DEFINER
BEGIN
EXECUTE IMMEDIATE CONCAT("create or replace temporary table tab1 as (",qry,");");
SELECT * from tab1;
END
//
DELIMITER ;
#this works perfectly
call proc1 ("select * from student_tests");
#it doesnt work when I try to select columns
## Unknown column 'db.tab1.score' in 'field list'
call proc1 ("select name,test from student_tests");
我相信这与tab1中的行
SELECT*有关存储过程中的代码>。有人能告诉我发生了什么事吗?我想我没有正确理解临时表/存储过程。sql注入有人吗?可怜的小鲍比,你说得对。但我还是想知道这种行为背后的原因。我现在很好奇