Stored-Procedures
讀取儲存過程中的輸入參數值
我正在使用目前版本的 MariaDB 10.0.12 。
我為以下問題創建了一個已接受的答案中指定的儲存過程:
為此,我使用 mysql-client 以 root 身份登錄並輸入以下命令:
-> create user 'myUser'@'localhost'; -> create database myStoredProcedures; -> grant execute on myStoredProcedures.* to 'myUser'@'localhost'; -> use database myStoredProcedures; -> delimiter // -> CREATE -> DEFINER = CURRENT_USER -> PROCEDURE myuser_create_db (IN dbName VARCHAR(255)) -> SQL SECURITY DEFINER -> BEGIN -> CREATE DATABASE dbName; -> GRANT ALL PRIVILEGES ON dbName.* TO 'myUser'@'localhost'; -> END; -> // -> delimiter ;
如果我以 myUser@localhost 登錄,使用數據庫 myStoredProcedures,然後呼叫儲存過程:
call myuser_create_db('testit');
數據庫 dbName 已創建,我可以將其作為 myUser 刪除。然而,數據庫的名稱實際上是 ‘dbName’ 而不是 ’testit’!為什麼會這樣,我該如何解決?
(現在我考慮了一下……是否可以在這裡使用sql注入?是否可以使用包含新數據庫名稱中的sql命令的參數呼叫myuser_create_db?那會很糟糕。但我無法測試這個現在是sql注入的想法,因為MariaDB將dbName解釋為字元串’dbName’。)
謝謝。
在這裡尋找這個問題的可能答案。
https://dba.stackexchange.com/questions/73931/prevent-sql-injection-inside-stored-procedure
但答案還有一個後續問題。