permessi MySQL - non possono creare funzioni anche con la concessione 'CREATE ROUTINE'
-
10-10-2019 - |
Domanda
Quando ci si connette al server (da una macchina diversa) ottengo
Error Code: 1044 Access denied for user 'username'@'%' to database 'dbname'
quando cerco di creare una funzione. Ma quando guardo i miei permessi
SHOW GRANTS FOR CURRENT_USER;
ho
'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE ROUTINE ON *.* TO ''username''@''%'' IDENTIFIED BY PASSWORD ''--stripped--'' WITH GRANT OPTION'
In particolare, questo include CREATE ROUTINE. Perchè non riesco a fare una funzione? Come posso modificarlo in modo che posso?
Soluzione
Penso che ci sia un CREATE FUNCTION
che è separato dalla CREATE ROUTINE
. Ma in entrambi i casi, in quanto sembra che l'utente ha il 100% l'accesso completo in ogni caso si potrebbe fare:
GRANT ALL PRIVILEGES ON *.* TO user@'%' INDENTIFIED BY 'password' WITH GRANT OPTION
Tuttavia vorrei far notare che sarebbe stato molto meglio per impostare il '%' a 'localhost' e accedere solo il database in questo modo da una macchina locale (o almeno un attendibile IP). La mancanza di sicurezza con questo potrebbe causare problemi.
Sicuramente non si usa questo utente / password per la connessione al database da uno script web!
Modifica Ho dimenticato: le routine e le funzioni debbano essere concesse a livello globale . L'aggiunta di . tenta di aggiungere la concessione ai tavoli stessi, che è il motivo per cui non funziona. Prova:
GRANT ALTER ROUTINE,CREATE ROUTINE, EXECUTE ON * TO user@'%' IDENTIFIED BY 'password'
C'è una descrizione più lunga di qui: http: // dev. mysql.com/doc/refman/5.0/en/grant.html