|
Il controllo degli accessi Il db mysql ha una struttura come quella mostrata in figura, contenente le sueguenti tabelle: columns_priv, db,func,host,tables_priv e user. 
Fig. 1 Il controllo degli accessi Quando ci connettiamo al server MySQL, ad esempio tramite una classe java, viene controllato se nella tabella user esiste un record contenente tre cose: - l'host da cui parte la connessione
- il nome dell'utente (user)
- se l'utente utilizza una password di protezione
in mancanza di questi requisiti MySQL si rifiuta di aprire la connessione: Error No. 1045 Access denied for user: 'root@127.0.0.1'(Using password:YES) | se invece trova i requisiti: - controlla se nel record è presente un flag di autorizzazione
- se non c'è, MySQL passa alla tabella db e controlla se c'è un record contenente user, host e database
- se c'è controlla se nella tabella host è presente un record contenente host e database
in definitiva si può dire che le autorizzazioni più importanti sono nelle tabelle user e db ma è possibile limitare l'accesso anche in base all' host e tramite le tabelle columns_priv e tables_priv anche a livello di tabella e colonna. E' importante notare che i privilegi concessi nella tabella user sono privilegi da amministratore (root) e valgono per tutti i database le autorizzazioni sono impostate nella tabella user in base ai valori dei campi, select_priv, Insert_priv, Update_priv e così via, che a volte avranno valore Y a volte N. Il campo Host potrà essere impostato con il carattere % (carattere Jolly) ad indicare qualsiasi Host. Vediamo alcuni esempi di aggiunta e modifica di autorizzazioni su un database chiamato test Creazione del database create database test; Inserire un nuovo utente INSERT INTO user(host,user,password) VALUES(127.0.0.1,'eleanor_rigby',password('pennylane')); n cui 127.0.0.1 è l'IP predefinito per il localhost, seguito da user e psw. Inserimento di un record nella tabella db INSERT INTO db (host,db,;user,Select_priv,insert_priv,update_priv,delete_ priv,create_priv,drop_priv) -> VALUES ('127.0.0.1','test','eleanor_rigby','Y','Y','Y','Y','Y','Y'); per fare in modo che i nuovi privilegi diventino operativi è necessario il comando: FLUSH PRIVILEGES Mofidifica dell'utente UPDATE db SET user='get_back' WHERE user='eleanor_rigby'; Eliminazione dell'utente DELETE FROM user WHERE user='get_back'; DELETE FROM db WHERE user='get_back'; Autorizzazioni GRANT GRANT SELECT INSERT UPDATE DELETE ON test.* TO eleanor_rigby; autorizza l'utente eleanor-rigby alla selezione, all'inserimento, all'aggiornamento e alla cancellazione, su tutte le tabelle del db test GRANT SELECT INSERT UPDATE DELETE ON test.* TO eleanor_rigby@localhost; idem come sopra ma si specifica la macchina dalla quale ci si può connettere, in caso contrario se non si specifica l'host si autorizza l'utente a connettersi da qualsiasi macchina GRANT SELECT INSERT UPDATE DELETE ON test.* TO eleanor_rigby@localhost IDENTIFIED BY pennylane; autorizzazione con password Revoca di autoririzzazioni con REVOKE REVOKE SELECT INSERT UPDATE DELETE ON test.* FROM eleanor_rigby@localhost;
|