Stored-Procedures

讀取儲存過程中的輸入參數值

  • August 13, 2014

我正在使用目前版本的 MariaDB 10.0.12 。

我為以下問題創建了一個已接受的答案中指定的儲存過程:

https://stackoverflow.com/questions/2950054/let-mysql-users-create-databases-but-allow-access-to-only-their-own-databases

為此,我使用 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

但答案還有一個後續問題。

引用自:https://dba.stackexchange.com/questions/73811