Laboratorio di Basi di dati Dr. Luca Tomassetti Dipartimento di Fisica – Università di Ferrara Tabella user (1) ● ● ● ● ● ● ● ● ● ● Host user }Primary key Password Select_priv Insert_priv Update_priv Delete_priv Create_prov Drop_priv Reload_Priv ● ● ● char(60) char(16) char(16) enum('N','Y') NOTE Nessun campo ha 'null' come valore possibile Tutti i _priv hanno 'N' come default 1 Tabella User (2) ● ● ● ● ● ● ● Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Host e user possone essere stringa nulla; in questo caso valgono % (vengono trattati come se...) Tabella User (3) Host user => => Accettano valori con il carattere jolly % => anat%a comprende anatomia, anatolia, anatra User => Accetta nobody, che si comporta come un singolo % Select, Insert, => Update, Delete => Create => Possibilta' di eseguire i comandi SQL standard corrispondenti Possibilita' di eseguire il comando SQL CREATE, o di creare database 2 Tabella user (4) - Drop => Possibilita' di cancellare db - Reload => Ricaricare info sull'accesso mediante mysqladmin reload - Shutdown => Fermare mysqld mediante mysqladmin shutdown - Process => Possibilita' di gestire i thread del server mysqld - File => Possibilita' di aprire e leggere file SELECT INTO DATA LOAD DATA INFILE Tabella user (5) - Grant => Possibilita' di assegnare a terzi al massimo i propri privilegi - Index => Possibilita' di creare o distruggere indici - Alter => Possibilita' di eseguire ALTER TABLE 3 Privilegi Amministrativi (2) Sono concentrati nella tabella USER e non compaiono nelle altre tabelle del database mysql. A ciascuno di essi corrispondono uno o piu' privilegi/azioni - Reload_priv => reload, refresh, flush-privileges, flush-host,flushlogs, flush-tables - Shutdown_priv - Process_priv => shutdown => processlist, kill Privilegi Amministrativi (2) INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('%', 'boris', password('ciao'), 'Y', 'Y', 'Y', 'Y') INSERT INTO user (Host, User, Password, Select_priv) VALUES('pcsegreteria_azienda.it', 'Luca', '', 'Y') UTENTE AVANZATO SEGRETARIA, OSPITE 4 Privilegi Amministrativi (3) INSERT INTO user (Host,User,Password) VALUES ('%', 'nobody', '') INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, [..tutti...], Drop_priv) VALUES ('dbadmin.azieda.it', ' ', 'ciao','Y', 'Y', 'Y', 'Y', [...Y..], 'N') RESTO DEL MONDO AMMINISTRATORE PRUDENTE => PARANOICO Verifica Dati Sicurezza (1) -La tabella 'user' e' ...una tabella=> i record sono NON ORDINATI -Un utente invia al server mysqld una richiesta d'accesso che, ovviamente, e' nella forma [email protected] cioe' senza caratteri jolly - il server confronta [email protected] con i campi “User” e “Host” della tabella user - Poiche' nella tabella 'user' ci possono essere i '%', se [email protected] ha piu' di una corrispondenza, qual'e' il criterio? 5 Verifica Dati Sicurezza (2) CRITERI CONFRONTO DATI UTENTE CON RECORD TABELLA USER 1) Prima gli host (le macchine) che NON contengono '%', poi quelli che contengono il jolly. I campi vuoti, al solito, valgono '%' 2) Se l'host (la macchina) e' la stessa, gli utenti SENZA '%' vengono prima di quelli col jolly. Campi vuoti = '%' 3) La prima corrispondenza e' l'unica considerata, ed il processo di autenticazione termina 6 Laboratorio di Basi di dati Dr. Luca Tomassetti Dipartimento di Fisica – Universita' di Ferrara Tabella db (1) ● ● ● ● ● ● ● ● ● Host Db }Primary key user Select_priv Insert_priv Update_priv Delete_priv Create_prov Drop_priv ● ● ● char(60) char(32) char(16) enum('N','Y') NOTE Nessun campo ha 'null' come valore possibile Tutti i _priv hanno 'N' come default Host e user e Db possone essere stringa nulla; in questo caso valgono % (vengono trattati come se...) 1 Tabella db (2) ● ● ● References_priv Index_priv Alter_priv Tabella Host (1) ● ● ● ● ● ● ● ● Host Db }Primary key Select_priv Insert_priv Update_priv Delete_priv Create_prov Drop_priv ● ● char(60) char(32) enum('N','Y') NOTE Nessun campo ha 'null' come valore possibile Tutti i _priv hanno 'N' come default 2 Tabella Host (2) ● ● ● References_priv Index_priv Alter_priv Tabella Tables_priv Host => Db => User => Table_name => Table_priv => Column_priv => P r i m a r y K e y char (60) NOTE: char (64) Il campo timestamp ammette null char (16) char (60) set (i) set(ii) Timestamp timestamp (14) Grant char (77) i= 'Select', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', ' Index', 'Alter' ii='Select', 'Insert', 'Update', 'References' 3 Tabella Colums_priv Host => Db => User => Table_name => Column_name=> Column_priv => Timestamp P r i m a r y K e y char (60) NOTE: char (64) Il campo timestamp ammette null char (16) char (60) char(64) set(i) i='Select', 'Insert', 'Update', 'References' timestamp (14) Caratteri Jolly e Blank nelle tabelle MYSQL (1) - Host - User USER '%' consentito any host '-' consentito ' ' consentito verif. tabella host '%' NON consentito ? '-' NON consentito ' ' consentito OK per ogni nome ma l'utente diventa 'nobody' -Password '%' consentito inutile come jolly nel senso '-' consentito che per mysql e' una pwd ' ' consentito NESSUNA pwd, non qualsiasi pwd 4 Caratteri Jolly e Blank nelle tabelle MYSQL (2) - Host Db '%' consentito any host '-' consentito ' ' consentito verif. tabella host - Db '%' consentito any database '-' consentito ' ' consentito any database -User '%' consentito non sono jolly '-' consentito non sono jolly ' ' consentito OK per ogni nome ma l'utente diventa 'nobody' Caratteri Jolly e Blank nelle tabelle MYSQL (3) Host - Host - Db '%' consentito any host '-' consentito ' ' consentito verif. tabella host '%' consentito any database '-' consentito ' ' consentito any database 5 Caratteri Jolly e Blank nelle tabelle MYSQL (4) Tables_pivot - Host - Db '%' consentito any host '-' consentito ' ' consentito any host '%' NON consentito '-' NON consentito ' ' NON consentito Caratteri Jolly e Blank nelle tabelle MYSQL (4/bis) Tables_pivot - Table_name - User '%' NON consentito '-' NON consentito ' ' NON consentito '%' NON consentito '-' NON consentito ' ' consentito => 'utente nobody' 6 Caratteri Jolly e Blank nelle tabelle MYSQL (5) Columns_priv - Host '%' consentito any host '-' consentito ' ' consentito any host - Db '%' NON consentito Table_name '-' NON consentito Column_name ' ' NON consentito Column_priv Caratteri Jolly e Blank nelle tabelle MYSQL (5/bis) Column_priv - User '%' NON consentito '-' NON consentito ' ' consentito => 'utente nobody' 7 Calcolo Logico Dei Privilegi user privileges OR ( db privileges AND host privileges) OR tables_priv privileges OR columns_priv privileges I privilegi di amministratore sono limitati alla tabella user Il Comando GRANT GRANT priv_type [(column_list)] [,priv_type[(column_list)]...] ON {tbl_name|*|**|db_name.*} TO user_name [IDENTIFIED BY 'password'][user_name [IDENTIFIED BY 'password'] [WITH GRANT OPTION] 8 Il Comando REVOKE REVOKE priv_type [(column_list)] [,priv_type[(column_list)]...] ON {tbl_name|*|**|db_name.*} FROM user_name [, user_name....] [WITH GRANT OPTION] Note sui comandi GRANT e REVOKE user_name va inteso nella forma user@host se user_name manca della seconda parte,ossia c'e' solo il nome, il server capisce user@% ossia “quell'utente da qualsiasi host” ● il comando GRANT crea l'user (sempre nel sensao user@host) se esso non esiste ● l'opzione * nella parte ON ha due significati diversi a seconda che si sia 'dentro' un database o no: ● se si, significa “tutte le tabelle” ● se no, significa “ tutte le tabelle di tutti i database”!!!!! ● ● 9 Esempi di comandi GRANT e REVOKE GRANT USAGE ON db_test.* TO anon Garantisce l'accesso senza alcun privilegio all'utente anon(da qualsiasi host) ------------------------------GRANT SELECT ON agenda.* TO consult@%.ditta.it Accesso con privilegio SELECT sul db agenda (tutte le tabelle) all'utente consult da qualsiasi macchina del dominio ditta.it --------------------------------GRANT INSERT,UPDATE (Nome, Cognome, Tel) ON agenda.contatti to segret@%.ditta.it La segreteria puo' inserire record e/o modificare solo in parte nella tabella contatti del db agenda da qualsiasi host del dominio ditta.it 10