2011-11-02 18 views
17

Utilizzo il sito di hosting gratuito this per lo sviluppo e il test.comando di negazione per l'utente

Non è stato possibile utilizzare un comando MySQL UPDATE per modificare i valori del database, anche se si suppone che l'utente possa utilizzare tutti i comandi da cPanel.

Quindi, ho provato lo stesso con un utente predefinito, non funzionerà ancora. Tuttavia, funziona bene sul mio sistema.

L'errore MySQL è

UPDATE command denied to user 'test'@'localhost' for table 'content'

Altri comandi stanno lavorando bene.

Perché sta succedendo? E come può essere prevenuto? O qualche soluzione per questo?

E sono molto sicuro che gli utenti abbiano il permesso di utilizzare il comando UPDATE perché posso utilizzare phpMyAdmin con lo stesso utente e modificare i campi MySQL.

Non capisco perché alcuni comandi MySQL di PHP siano negati per un utente a cui sono stati dati tutti i privilegi e che può fare tutto tramite phpMyAdmin. Dato questo script, phpMyAdmin e l'host SQL si trovano sullo stesso server.

+0

perché questa domanda è stata votata? – pahnin

+0

Non vedo una domanda ... – Widor

+3

bene. la domanda è qual è la soluzione o la soluzione per questo. aggiornato – pahnin

risposta

24

Per tutti quelli che hanno provato a rispondere a questa domanda ecco i miei sinceri ringraziamenti. Ho trovato il problema e la soluzione.

mia query SQL è come questo

UPDATE `dblayer`.`test` SET `title` = 'hello a' WHERE `test`.`id` =1; 

che ho ricevuto da phpMyAdmin e funziona perfettamente sul mio sistema. Ma quando lavoro sui server non funziona e si dice comando negato può essere perché

`dblayer`.`test` 

sto cercando di selezionare la tabella a livello globale (o qualcosa del genere, non sono sicuro), ma se la mia query sql è

UPDATE `test` SET `title` = 'hello a' WHERE `test`.`id` =1; 

funziona anche sul mio server.

+0

contrassegnato come risposta corretta alla mia domanda! LOL – pahnin

4

Il tuo utente non ha le autorizzazioni necessarie. È necessario dare l'accesso al comando UPDATE, in questo modo:

GRANT UPDATE ON database.* TO [email protected]'localhost' IDENTIFIED BY 'password'; 

Se si utilizza uno strumento grafico per gestire il database - ad esempio PHPMyAdmin o SQLYog, ecc. Dovresti essere in grado di utilizzare questi strumenti per abilitare anche queste autorizzazioni.

+0

l'utente dispone delle autorizzazioni. perché posso modificare il contenuto tramite phpmyadmin. – pahnin

+0

Ma piuttosto GRANT SELECT dovrebbe essere GRANT UPDATE, o se si vuole dare all'utente il permesso completo: GRANT ALL – Oldskool

+0

e quando si effettua il login tramite phpmyadmin si usa lo stesso username/password come utente 'test'? Molto probabilmente questo non è il caso. – Icarus

2

il mio errore SQL viene comando UPDATE negato all'utente 'test' @ 'localhost' per la tabella 'contenuti'

perché sta succedendo questo? E come prevenirlo? O qualsiasi soluzione per questo?

Sta accadendo per quello che dice che sta accadendo: l'utente test non dispone di autorizzazioni di aggiornamento sulla tabella content. Qualcosa del genere dovrebbe concedere all'utente l'autorizzazione necessaria:

GRANT UPDATE ON database.content TO [email protected]'localhost' IDENTIFIED BY 'password'; 

* password di cui sopra è solo un segnaposto. Dovresti usare quello vero.

+0

Ho aggiornato la domanda plzz chk – pahnin

+1

@pahnin non hai specificato se la tua app si collega localmente al server o in remoto. Si noti che l'utente può disporre delle autorizzazioni per UPDATE solo da localhost. Se ci si connette da remoto, deve essere concesso in modo specifico nel modo "GRANT UPDATE ... to [email protected] ..." – Icarus

+0

lo script viene eseguito localmente. – pahnin

0

Fornire l'accesso completo per testare l'utente con ip come localhost. Controllare la tabella utente da mysql db.

Effettuare il login come root e accedere al database mysql e quindi alla tabella utente. Si troveranno i privilegi attuali dell'utente di test.

4

Come tutti hanno detto, è un problema di autorizzazione. Sono sicuro che probabilmente hai controllato, ma per ogni evenienza.Dopo l'accesso in phpmyadmin, eseguire il seguente:

SELECT USER(); 

Questo dovrebbe sputare 'test' @ 'localhost' come indicato in tutti i commenti sopra

Quindi eseguire

SHOW GRANTS FOR 'test'@'localhost' 

Questo dovrebbe darti tutti i privilegi per quell'utente Quando ottieni risultati, seleziona "Opzioni", Testo completo e fai clic su per ottenere il testo completo.

Assicurarsi autorizzazioni nel uscita hanno qualcosa di simile:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `your_database`.* TO 'test'@'localhost' 

Potrebbe non essere in grado di ottenere GRANT ALL su alcune configurazioni di hosting ma finché hai INSERT, UPDATE, DELETE si dovrebbe assolutamente essere in grado di aggiornare i dati

+0

I've got GRANT ALL – pahnin

+0

Potresti incollare tutto il risultato GRANT ALL. È GRANT ALL su 'your_database'. * TO 'test' @ 'localhost'? o GRANT ALL su solo alcuni tavoli. Un altro (forse ovvio) passo sarebbe contattare il fornitore di hosting. Se hai tutte le autorizzazioni impostate e non puoi aggiornare la tabella, dovrebbero essere in grado di aiutarti –

2

A volte è un problema sensibile al maiuscolo/minuscolo.

MySQL dice anche che l'accesso è negato anche se la tabella non è disponibile. Assicurati di non avere problemi relativi alla distinzione tra maiuscole e minuscole.

+0

Ho avuto questo problema con un file sql (un file di aggiornamento della struttura db dell'applicazione). Avevo concesso a un utente dell'account dell'applicazione l'accesso completo al database dell'app, ma continuavo a ottenere l'autorizzazione negata. Dopo aver tirato fuori metà dei miei capelli, ho finalmente notato che alcune manopole avevano codificato il nome del tavolo in un unico comando nel mezzo di questo enorme file. Il nome della tabella era il nome dell'app, non il nome della tabella, quindi non mi è rimasta impressa. :/ – dannysauer

3

Ho avuto lo stesso problema, il permesso era giusto ma funzionava in alcuni ambienti e non in altri. Stavo usando un nome di tabella come

scheme.TABLE_NAME.

Senza cambiare il permesso, ma utilizzando solo

nome_tabella

lavorato in tutti gli ambienti.

-1

con MySQL si può solo fare SELECT * mysql.user

Guardate i privilegi e quindi aggiornare quelli che si desidera. Mi piace più personalmente, quindi, usando i comandi sopra riportati perché posso vedere tutte le mie opzioni disponibili in quella tabella.

UPDATE mysql.user 
SET Insert_priv = 'Y', 
Update_priv = 'Y' 
WHERE user.Host = 'localhost' AND user.User = 'test'; 

Dopo aver aggiornato i privilegi ho notato che avrei dovuto riavviare il server MySQL per il cliente di vederli:

/etc/init.d/mysql restart 

Poi avrebbe funzionato bene

1

Un errore di UPDATE command denied può su alcuni gli host web sono il risultato del raggiungimento del limite di spazio del database MySQL.

+0

Ho avuto esattamente questo problema. Su ClearDb per Azure – AxelWass

Problemi correlati