2013-02-12 17 views
3

J'ai quelques problèmes avec GRANT et les variables ensemble dans MySQL.Comment utiliser GRANT avec des variables?

SET @username := 'user123', @pass := 'pass123'; 

GRANT USAGE ON *.* TO @[email protected]'%' IDENTIFIED BY @pass; 
GRANT INSERT (header1, header2, headern) ON `data` TO @[email protected]'%'; 
GRANT SELECT (header1, header2) ON `data2` TO @[email protected]'%'; 

Je voudrais mettre le nom d'utilisateur et mot de passe dans les variables au début du script, puis les utiliser plus tard dans GRANT

Au lieu de cela:

GRANT USAGE ON *.* TO 'user123'@'%' IDENTIFIED BY 'pass123'; 

I'D aiment utiliser quelque chose comme ceci:

GRANT USAGE ON *.* TO @[email protected]'%' IDENTIFIED BY pass; 

Je serais vraiment reconnaissant, si quelqu'un pouvait me montrer la bonne déclaration s. Merci d'avance!

+0

devrait pas être 'Identifié par @ pass', vous avez manqué' '@ – asifsid88

+0

Merci, je l'ai corrigé, mais cela ne résout le principal problème. :( – Pho3nixHun

+0

Les variables ne peuvent être utilisées que lorsque SQL autorise les expressions, les instructions GRANT ne contiennent pas d'expressions, vous pouvez le faire avec SQL dynamique – Barmar

Répondre

3
SET @object = '*.*'; 
SET @user = '''user1''@''localhost'''; 

SET @query = CONCAT('GRANT UPDATE ON ', @object, ' TO ', @user); 
PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

DROP PROCEDURE IF EXISTS `test`.`spTest`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spTest`(varLogin char(16), varPassword char(64)) 
BEGIN 
    DECLARE varPasswordHashed CHAR(41); 
    SELECT PASSWORD(varPassword) INTO varPasswordHashed; 

    # Any of the following 3 lines will cause the creation to fail 
    CREATE USER [email protected]'localhost' IDENTIFIED BY varPassword; 
    GRANT USAGE ON test.* TO [email protected]'localhost' IDENTIFIED BY varPassword; 
    GRANT USAGE ON test.* TO [email protected]'localhost' IDENTIFIED BY PASSWORD varPasswordHashed; 

    ## The following 3 lines won't cause any problem at create time 
    CREATE USER [email protected]'localhost' IDENTIFIED BY 'AnyPassordString'; 
    GRANT USAGE ON test.* TO [email protected]'localhost' IDENTIFIED BY 'AnyPassordString'; 
    GRANT USAGE ON test.* TO [email protected]'localhost' IDENTIFIED BY PASSWORD 'AnyPassordString'; 
END$$ 

DELIMITER; 
+0

Merci beaucoup, ça fonctionne comme un charme :) – Pho3nixHun

Questions connexes