2013-08-28 17 views
23

creo il mio database e user navid nel mio server condiviso con cpanel (databases -> [email protected] Databases -> add new user), e quindi selezionato TUTTI I PRIVILEGI per l'utente navid. Stavo importando mydatabase.sql quando mi sono trovato di fronte a questo errore.SUPER privilegio (s) per questa operazione


come posso correggere l'errore? la procedura di archiviazione ha funzionato correttamente in localhost.


cos'è il privilegio SUPER?

Error 
SQL query: 
DELIMITER $$-- 
-- Procedures 
-- 
CREATE DEFINER = `navid`@`%` PROCEDURE `d_answer` (OUT `sp_out` INT(11) , IN `sp_id` INT(11)) NO SQL BEGIN DELETE FROM `tblname` WHERE `a_id` = sp_id; 
SET sp_out = ROW_COUNT() ; 
END$$ 

MySQL said: Documentation 
#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation 
+1

Perché il downvote? – Ben

+0

@ Ben - cosa intendi? – navid

+0

non so come posso concedere i privilegi SUPER per questa operazione sul server condiviso – navid

risposta

34

Dal documentation (il corsivo è mio):

Il privilegio SUPER consente un account per usare CHANGE MASTER TO, UCCIDERE o mysqladmin kill per uccidere i thread appartenenti ad altri account (si può sempre kill your own threads), PURGE BINARY LOGS, configurazione modifiche utilizzando SET GLOBAL per modificare le variabili di sistema globali, il comando di debug mysqladmin , abilitando o disabilitando la registrazione, eseguendo gli aggiornamenti anche se la variabile di sistema read_only è attivato, partendo e arresto replica su server slave, specificazione di qualsiasi account nell'attributo DEFINER dei programmi memorizzati e viste, e permette di collegare (una volta) anche se il limite di connessione controllata dalla variabile di sistema max_connections è raggiunto.

Dal momento che si è già navid al database, non è necessario impostare l'attributo DEFINER nella stored procedure; l'aggiunta di questa linea sta causando la visualizzazione dell'errore. Se rimuovi questa dichiarazione, la procedura verrà creata e non otterrai l'errore di autorizzazione.

Hai solo bisogno di impostare DEFINER se si sta configurando la stored procedure per qualche altro utente, per impostazione predefinita la stored procedure ottiene lo stesso contesto di protezione as the user that is creating it:

tutti i programmi memorizzati (procedure, funzioni, e trigger) e le viste possono avere un attributo DEFINER che identifica un account MySQL. Se l'attributo DEFINER viene omesso da un programma memorizzato o una definizione di vista, l'account predefinito è l'utente che crea l'oggetto.

+0

Davvero? Non è necessario utilizzare definer nella procedura del mio negozio? – navid

+1

No, lo fai solo se stai impostando la procedura memorizzata per conto di un altro utente; e per fare _that_ hai bisogno del privilegio 'SUPER'. –

+0

@Burhan Khalid - sì, hai ragione, grazie :) – navid

8

Ho ottenuto anche il problema e l'ho risolto in MySQL Workbench. Nel mio caso è perché "Invia a SQL Editor> Crea istruzione" contiene elementi aggiuntivi che impediscono l'utilizzo senza modifiche.

Qualcosa di simile a questo:

CREA ALGORITMO = DEFINER UNDEFINED = schemax @localhost SQL SICUREZZA DEFINER VISTA viewName AS SELECT ....

Change a questo:

CREATE VIEW viewName AS SELECT ....

sembra funzionare ora, non c'è bisogno di aggiornare le autorizzazioni. ** Io sono l'unico utente del mio database ..

+0

Grazie mille. – Divakarcool

+0

Controllare il definitore, non dovrebbe essere 'username @ localhost' se non esplicitamente necessario, ma' username @% ' –

1

Ho avuto lo stesso problema: sul mio server di sviluppo locale andava bene, ma sul mio server hostato (tramite PHPMyAdmin) mi ha dato l'errore di cui sopra.

Rimuovere l'attributo definer sembrava essere il modo più semplice per risolvere il problema se si è soddisfatti del fatto che il definitore sia l'utente corrente.

+0

Controllare il definitore, non dovrebbe essere' username @ localhost' se non esplicitamente necessario, ma 'username @%' –

0

Non fare affidamento sui valori predefiniti, se lo svuotamento del campo definitore in phpMyAdmin o altri programmi non risolverà, controllare il definitore, non dovrebbe essere [email protected] se non esplicitamente necessario, ma [email protected]%.

1

è sufficiente rimuovere la DEFINER attributo e con il suo valore, ad esempio:

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW ... 
Problemi correlati