2012-07-06 36 views
4

存儲過程的代碼:語法錯誤從創建變量給出用戶名和密碼,用戶

CREATE DEFINER = `root` @`localhost` PROCEDURE `P_CreateUser3` (
    IN _Username NVARCHAR(30), IN _Password NVARCHAR(32), IN _DBName VARCHAR(20)) 
BEGIN 
    CREATE USER _Username @'localhost' IDENTIFIED BY _Password ; 
    GRANT SELECT, UPDATE, DELETE, INSERT 
    ON _DBName.* 
    TO _Username @'localhost' 
    WITH GRANT OPTION ; 
END $$ 

錯誤代碼:1064 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法以在'_Password; GRANT SELECT,UPDATE , DELETE,INSERT ON ` 公關」第6行

請幫助我。

+2

在CREATE USER或GRANT語句中不支持使用存儲過程輸入參數作爲密碼[記錄在此錯誤中](http://bugs.mysql.com/bug.php?id=28406) 。 – 2012-07-06 20:19:31

+1

嗯,我甚至都沒有試過。剛剛達到執行exec('SomeQuery') – 2012-07-06 20:28:45

+0

@eggyal看起來像我最初的答案。我恢復並刪除它。 – 2012-09-04 16:20:31

回答

3

不幸的是,在一個或CREATE USER語句GRANT使用存儲過程輸入參數如密碼是documented in this bug不受支持。所以你實際上不能做你想做的事情。

這將有可能PREPAREEXECUTE這是由CONCAT()建在新的密碼來連接一個說法,但這是不是一種安全的方法,因此不推薦使用。如果你這樣做,你會失去存儲過程的所有安全優勢。