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注入有人吗?可怜的小鲍比,你说得对。但我还是想知道这种行为背后的原因。我现在很好奇