View Full Version : [MySQL] Aiuto con gestione permessi: negare SELECT ad un utente
fbcyborg
07-03-2010, 13:13
Salve a tutti,
sto sviluppando un software gestionale (in Java) e fin'ora ho usato sempre l'utente root per accedere al database, ma è previsto che si debbano usare anche altri utenti.
A tal proposito, ho creato un altro utente che dovrebbe poter fare tutte le operazioni (insert/update/delete/select) che fa in questo caso root, ma vorrei fare in modo che la SELECT sia impedita su una certa tabella.
Non ci riesco.
Sto usando phpmyadmin, e sto anche tenendo sott'occhio le query SQL che vengono generate.
Dunque, quando creo un utente, gli do i privilegi globali: SELECT, INSERT, UPDATE, DELETE, FILE.
Poi vado per dargli i privilegi sulla singola tabella e gli do solo la UPDATE:
REVOKE ALL PRIVILEGES ON `database`.`TABELLA` FROM 'user'@'%';
GRANT UPDATE (
`TOTALE`
) ON `database`.`TABELLA` TO 'user'@'%';
Il problema è che non funziona. Forse sono i privilegi globali che "sovrascrivono" quelli che imposto per la tabella, ma prima vorrei capire dove sto sbagliando.
fbcyborg
08-03-2010, 11:45
Nessuno mi sa dare nemmeno un consiglio?
Sto leggendo e rileggendo la documentazione di MySQL ma non riesco a darmi una risposta.
Mi spiace ma non si è capito niente :D vuoi garantire solo la SELECT o l'UPDATE?
Non puoi dare i privilegi globali su tutte le operazioni tranne quella che vuoi limitare, e poi aggiungere il privilegio su quella operazione solo per una tabella?
fbcyborg
08-03-2010, 13:45
Ok, cerco di rispiegare più sinteticamente e (spero) chiaramente:
Vorrei fare in modo che nel mio database ci siano due tipi di utenti:
1) utenti che possono fare SELECT, UPDATE, INSERT, DELETE, e quindi tutte le operazioni su tutto il database
2) utenti come sopra, ma che su una tabella in particolare possano fare solo l'UPDATE. Quindi non devono poter visualizzare i dati contenuti in una tabella ma devono poterli modificare (per motivi relazionali - se serve posso fare un esempio).
Quindi, creato un utente con tutti i privilegi su un certo database, come impedisco che possa fare una select su una data tabella?
fbcyborg
08-03-2010, 14:03
Principalmente il mio problema è questo:
riesco a creare un utenza che abbia nessun privilegio, e riesco ad assegnargli uno ad uno tutti i privilegi che voglio, ma non riesco a fare il contrario.
Es. supponiamo di voler creare un utenza che possa fare INSERT,UPDATE,DELETE,SELECT su TUTTO il database in questione.
In questo modo è facile, creo un utente che ha i privilegi GLOBALI di fare queste cose.
Io vorrei inoltre, creare un utente che possa fare tutto ciò che fa il suddetto utente, tranne la SELECT su una certa tabella.
In pratica riesco a fare in modo che un utente NON abbia alcun privilegio e poi gliene assegno io quanti ne voglio, ma non il contrario, ovvero dargli tutti i privilegi e togliergliene solo alcuni.
Non so se è chiaro :)
Tutto questo, semplicemente perché faccio prima.
Da quel che ho letto non si può. Cercando grant all privileges except (http://www.google.it/#hl=it&source=hp&q=grant+all+privileges+except&btnG=Cerca+con+Google&meta=&aq=1&oq=grant+all+privileges+except&fp=24375fdc13d490e1) su google trovi questo (http://forums.mysql.com/read.php?10,143877,144060#msg-144060), in cui c'è un utente che chiede:
I think the easiest way would be to give the user all privileges to all databases, and then remove the privileges for the 'mysql' database (or only give the user the SELECT privilege)
e le risposte sono:
No, you can not do it this way. If you grant privileges on all databases i.e. use ON *.* these privileges are defined on global level and stored in user table. No privileges defined on database level. So if you try to revoke privileges from mysql db only you'll get an error that no such grant defined.
you granted all privileges on all databases.
then you gave redudant SELECT privilege (redudant because this user already has SELECT privilege on all databases and database mysql as well).
Now you user has all privileges defined on global level and SELECT privilege defined on database level.
Quindi non puoi dare tutti i privilegi e poi togliere quelli che ti servono, perchè sono su due livelli diversi. Dovresti dare i privilegi per ogni tabella tranne quella che ti interessa.
fbcyborg
08-03-2010, 14:46
Ok, grazie, concetto chiarito.
In effetti già mi sono messo a lavoro per fare l'operazione "inversa".
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.