MySQL
Sicurezza tramite GRANT
Ricerca…
La migliore pratica
Limitare root (e qualsiasi altro utente con privilegi SUPER) a
GRANT ... TO root@localhost ...
Questo impedisce l'accesso da altri server. Dovresti distribuire SUPER a pochissime persone e dovrebbero essere consapevoli delle loro responsabilità. L'applicazione non dovrebbe avere SUPER.
Limita gli accessi delle applicazioni a un database che utilizza:
GRANT ... ON dbname.* ...
In questo modo, qualcuno che esegue l'hacking nel codice dell'applicazione non può superare dbname. Questo può essere ulteriormente perfezionato tramite uno di questi:
GRANT SELECT ON dname.* ... -- "read only"
GRANT ... ON dname.tblname ... -- "just one table"
Il readonly può anche avere bisogno di cose 'sicure' come
GRANT SELECT, CREATE TEMPORARY TABLE ON dname.* ... -- "read only"
Come dici tu, non esiste una sicurezza assoluta. Il mio punto qui è che puoi fare alcune cose per rallentare gli hacker. (Lo stesso vale per le persone oneste che fanno finta.)
In rari casi, potrebbe essere necessario che l'applicazione esegua qualcosa disponibile solo per il root. questo può essere fatto tramite una "stored procedure" che ha SECURITY DEFINER
(e root lo definisce). Ciò esporrà solo ciò che fa l'SP, che potrebbe, ad esempio, essere una determinata azione su un particolare tavolo.
Host (dell'utente @ host)
L'host può essere un nome host o un indirizzo IP. Inoltre, può comportare wild card.
GRANT SELECT ON db.* TO sam@'my.domain.com' IDENTIFIED BY 'foo';
Esempi: Nota: questi di solito devono essere citati
localhost -- the same machine as mysqld
'my.domain.com' -- a specific domain; this involves a lookup
'11.22.33.44' -- a specific IP address
'192.168.1.%' -- wild card for trailing part of IP address. (192.168.% and 10.% and 11.% are "internal" ip addresses.)
L'utilizzo di localhost
si basa sulla sicurezza del server. Per la procedura consigliata, la root
dovrebbe essere consentita solo tramite il localhost. In alcuni casi, questi significano la stessa cosa: 0.0.0.1
e ::1
.