![Page 1: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/1.jpg)
Unità D3Unità D3Sicurezza e concorrenza
nelle basi di dati
![Page 2: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/2.jpg)
Sicurezza nelle basi di Sicurezza nelle basi di datidati
• Una base di dati è sicura quando soddisfa i seguenti parametri:o regola l’accesso ai dati protetti;o evita la modifica o la manipolazione dei dati da parte di utenti non
autorizzati;o è disponibile (nel momento in cui deve essere consultata è presente,
consistente e coerente).
![Page 3: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/3.jpg)
Controllo Controllo accessoaccesso
• DAC – controllo discrezionaleo Il proprietario decide chi può accedere alle risorse
• MAC – a ogni risorsa viene associata una label (livello di privilegio che deve possedere l’utente per accedere)
• RBAC – gli utenti sono associati a uno o più ruoli (gruppi) le risorse sono accessibili solo a ruoli specificati
![Page 4: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/4.jpg)
Protezione e integrità Protezione e integrità datidati
• Autenticazione (login – password)• Tracciabilità – registrazione delle
operazioni effettuate da un utente (file di log)
• Integrità mediante “giornale” (file di log database) che registra i dati coinvolti e le operazioni effettuate su questi.
• Checkpoint e ripristino• Backup
![Page 5: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/5.jpg)
Autenticazione e Autenticazione e
autorizzazioneautorizzazione
![Page 6: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/6.jpg)
T-SQL T-SQL (Esempio sicurezza)(Esempio sicurezza)
CREATE DATABASE [ProvaSicurezza]Use ProvaSicurezzaCREATE TABLE [dbo].[Studenti](
[nome] [varchar](50) NOT NULL,[cognome] [varchar](50) NOT NULL
)
INSERT INTO Studenti VALUES ('Alberto', 'Paganuzzi')
INSERT INTO Studenti VALUES ('Alberto', 'Ferrari')
![Page 7: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/7.jpg)
Nuovo utenteNuovo utente-- Creo un account di login sull'istanza DB AttualeCREATE LOGIN Utente1 WITH password = 'PassUtente1'USE ProvaSicurezzaSELECT * FROM dbo.Studenti -- funziona perchè eseguito da owner
-- Mi impersonifico in ‘Utente1'EXECUTE AS LOGIN = 'Utente1' -- non è possibile: l'utente non è inserito in quelli che possono-- accedere localmente al db ProvaSicurezza
-- Aggiungo l'utente a quelli autorizzati all'accesso di ProvaSicurezzaCREATE USER Utente1EXECUTE AS LOGIN = 'Utente1' -- così funziona l'impersonificazioneSELECT * FROM dbo.Studenti -- non funziona l’utente non ha i diritti
![Page 8: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/8.jpg)
Diritti all’utenteDiritti all’utenteREVERT -- il controllo torna all'utente precedente-- autorizzo la selectGRANT SELECT ON ProvaSicurezza.dbo.Studenti TO Utente1EXECUTE AS LOGIN = 'Utente1' SELECT * FROM dbo.Studenti -- ora funziona utente autorizzatoREVERT-- nego l'autorizzazione per la selectREVOKE SELECT ON ProvaSicurezza.dbo.Studenti TO Utente1EXECUTE AS LOGIN = 'Utente1' SELECT * FROM dbo.Studenti -- non funziona autorizzazione
negataPRINT USER -- Visualizzazione utentREVERTPRINT USERDROP DATABASE [ProvaSicurezza]
![Page 9: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/9.jpg)
RBAC RBAC (Role-based access control)(Role-based access control)• Gli utenti sono associati a uno o più ruoli (gruppi)
le risorse sono accessibili solo a ruoli specificati• Esempio: associo Utente1 al ruolo che gli permette
l'accesso in lettura al databaseEXEC sp_addrolemember db_datareader, Utente1
• Accesso in scrittura:EXEC sp_addrolemember db_datawriter, Utente1
• Negazione dell’accesso in scritturaEXEC sp_droprolemember db_datawriter, Utente1
![Page 10: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/10.jpg)
Consistenza di una Consistenza di una Base di datiBase di dati
• Modello : rappresentazione della realtà mediante un formalismo
• Inconsistenza : sfasamento fra realtà e modello che la rappresenta (database)(es. il DVD del film “…” è stato prestato ma risulta presente nel database)
• Consistenza : nessuna discrepanza tra la realtà fisica e il modello che la rappresenta.
![Page 11: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/11.jpg)
Accesso Accesso concorrenteconcorrente
• Accesso concorrente: più utenti accedono a una stessa risorsa nello stesso istante.
• L’accesso concorrente è una delle cause principali dei problemi di inconsistenza delle basi di dati.
• Le soluzioni ai problemi di accesso concorrente sono basate su blocchi (lock) che operano come semafori e regolano il “traffico” verso le risorse.
![Page 12: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/12.jpg)
Accesso concorrenteAccesso concorrente
![Page 13: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/13.jpg)
TransazioniTransazioni• Una transazione è un insieme di
operazioni o indivisibili (atomiche)o corrette anche in presenza di concorrenza o con effetti definitivi.
![Page 14: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/14.jpg)
Caratteristiche di una Caratteristiche di una transazione ACIDtransazione ACID
• atomicità (Atomicity). Una transazione viene portata a termine completamente o non viene effettuata;
• consistenza (Consistency). Prima e dopo la transazione la base di dati è sempre in uno stato consistente;
• isolamento (Isolation). Il database non viene modificato finchè la transazione non è conclusa (nessuno può vedere un risultato intermedio);
• permanenza (Durability). Una volta conclusa la transazione i dati sono in uno stato consistente e non possono essere ripristinati allo stato precedente.
![Page 15: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/15.jpg)
commit - commit - rollbackrollback
• Transazione terminata con successo (COMMIT)
• Transazione abortita (ROLLBACK)
![Page 16: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/16.jpg)
Anomalie derivanti da Anomalie derivanti da accessi concorrentiaccessi concorrenti
• Perdita di aggiornamentio T1 aggiorna Xo T2 aggiorna Xo T1 fallisce (rollback)o T2 termina (commit)
• Letture non riproducibilio T1 legge Xo T2 aggiorna Xo T2 commito T1 rilegge X
• Letture fantasmao T1 aggiorna Xo T2 legge Xo T1 fallisce (rollback)
![Page 17: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/17.jpg)
Soluzioni ai problemiSoluzioni ai problemi• Lock in lettura (compatibile con altri lock in
lettura)• Lock in scrittura (blocco esclusivo della risorsa)
![Page 18: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/18.jpg)
Utilizzo delle Utilizzo delle transazionitransazioni
• Inizio transazione:BEGIN TRANSACTION <nome Transazione>
• Transazione terminata con successo:COMMIT TRANSACTION <nome Transazione>
• Transazione abortita:ROLLBACK TRANSACTION <nome
Transazione>
![Page 19: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/19.jpg)
Esempi transazioni in Esempi transazioni in SQLServerSQLServer
CREATE DATABASE [ProvaTransazioni]Use ProvaTransazioniCREATE TABLE [dbo].[Studenti](
[nome] [varchar](50) NOT NULL,[cognome] [varchar](50) NOT NULL
)
![Page 20: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/20.jpg)
Transazione senza Transazione senza errorierrori
-- Primo esempio (in questo caso la transazione ha successo)BEGIN TRY -- costrutto try catch BEGIN TRANSACTION -- inizio transazione INSERT INTO Studenti VALUES ('Alberto', 'Paganuzzi') INSERT INTO Studenti VALUES ('Alberto', 'Ferrari')
COMMIT TRANSACTION -- se non ci sono errori transazione completataEND TRYBEGIN CATCH ROLLBACK TRANSACTION -- se ci sono errori transazione abortitaEND CATCH
![Page 21: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/21.jpg)
Transazione con erroriTransazione con errori-- Secondo esempio di transazione -- (la transazione NON ha successo perché non viene rispettato -- il vincolo not null)BEGIN TRY BEGIN TRANSACTION INSERT INTO Studenti VALUES ('Giuseppe', null) COMMIT TRANSACTIONEND TRYBEGIN CATCH ROLLBACK TRANSACTIONEND CATCH
![Page 22: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/22.jpg)
Transazione con errori Transazione con errori (2)(2)
-- Terzo esempio di transazione -- (la transazione NON ha successo)-- Non viene eseguita neppure al prima INSERT -- (anche se questa è corretta)BEGIN TRY BEGIN TRANSACTION INSERT INTO Studenti VALUES ('Paolo', 'Rossi') INSERT INTO Studenti VALUES ('Giuseppe', null) COMMIT TRANSACTIONEND TRYBEGIN CATCH ROLLBACK TRANSACTIONEND CATCH
![Page 23: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/23.jpg)
HOLDLOCKHOLDLOCK/* Permette di bloccare (in questo caso la tabella) in modo SHARE non permette che altri eseguano UPDATE ma permette altre
SELECT*/BEGIN TRANSACTIONSELECT * FROM Studenti WITH (HOLDLOCK) WHERE cognome = 'Paganuzzi'-- visualizza lo stato di lockSELECT resource_type,
resource_associated_entity_id,request_mode,request_status FROM sys.dm_tran_locks dml INNER JOIN sys.dm_tran_current_transaction dmt ON dml.request_owner_id = dmt.transaction_idCOMMIT TRANSACTION
![Page 24: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/24.jpg)
Prova HOLDLOCKProva HOLDLOCK/* In parallelo alla precedente transazione PRIMA di effettuare il
COMMIT*/-- per la SELECT non ci sono problemiSELECT * FROM Studenti
-- l’UPDATE rimane bloccata fino al commit della transazione precedente
UPDATE Studenti SET nome = 'Jack' WHERE cognome = 'Ferrari’
![Page 25: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/25.jpg)
Blocco esclusivoBlocco esclusivo-- UPDATE blocca la tabella in modo esclusivoBEGIN TRANSACTIONUPDATE Studenti SET nome = 'Alberto' WHERE cognome = 'Ferrari'-- visualizza lo stato di lockSELECT resource_type,
resource_associated_entity_id,request_mode,request_status FROM sys.dm_tran_locks dml INNER JOIN sys.dm_tran_current_transaction dmt ON dml.request_owner_id = dmt.transaction_idCOMMIT TRANSACTION
![Page 26: Unità D3 Sicurezza e concorrenza nelle basi di dati](https://reader035.vdocuments.net/reader035/viewer/2022062701/5542eb4b497959361e8b75ef/html5/thumbnails/26.jpg)
Prova blocco esclusivoProva blocco esclusivo• /* in parallelo testare le operazioni */• SELECT * FROM Studenti-- attende la conclusione della
transazione
• -- Possibile stabilire il tempo di attesa prima di abortire una transazione
• SET LOCK_TIMEOUT 3000 -- aspetta 3 secondi• SELECT * FROM Studenti