2012-08-14 8 views
8

Mi piacerebbe fare questo:MySQL CREA UTENTE con una variabile?

#Variables 
SET @username="jdoe", @password="secret"; 

# Insert a new MySQL User 
CREATE USER @[email protected]'localhost' IDENTIFIED BY @password;GRANT USAGE ON *.* TO @[email protected]'localhost' IDENTIFIED BY @password WITH MAX_QUERIES_PER_HOUR 120 MAX_CONNECTIONS_PER_HOUR 60 MAX_UPDATES_PER_HOUR 60 MAX_USER_CONNECTIONS 2; 

Ma ottengo:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@[email protected]'localhost' IDENTIFIED BY @password' at line 2 

Come si usa una variabile nell'istruzione CREATE USER?

+0

possibile duplicato del [errore di sintassi da Crea utente con le variabili che danno il nome utente e la password] (http://stackoverflow.com/questions/11368966/syntax-error-from -create-user-with-variables-giving-username-and-password) – aleroot

+1

@aleroot Non sono sicuro che sia lo stesso problema poiché riguarda la creazione di una stored procedure. – Nick

risposta

9

È possibile utilizzare dynamic SQL come:

SET @query1 = CONCAT(' 
     CREATE USER "',@username,'"@"localhost" IDENTIFIED BY "',@password,'" ' 
     ); 
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt; 

SET @query1 = CONCAT(' 
    GRANT USAGE ON *.* TO "',@username,'"@"localhost" IDENTIFIED BY "',@password,'" WITH 
      MAX_QUERIES_PER_HOUR 120 MAX_CONNECTIONS_PER_HOUR 60 MAX_UPDATES_PER_HOUR 60 
      MAX_USER_CONNECTIONS 2' 
     ); 
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
+0

Questo non sembra funzionare ... Prendo '# 1064 - Hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'secret; GRANT USAGE * * * per jdoe @ 'localhost' IDENTIFICATO dal segreto 'alla riga 1 ' – Nick

+0

quote errate. prova la query aggiornata – Omesh

+1

Eccellente, grazie! – Nick