Databaser design och programmering 1 Säkerhetsproblem 2 Transaktionshantering och säkerhet säkerhetsproblem fleranvändarproblem transaktioner låsning Informationen i databasen måste vara pålitlig (inte kunna ändras eller försvinna av misstag) får inte spridas av misstag måste vara åtkomlig när den behövs Men: om datorn hänger sig, hårddisken kraschar, obehöriga försöker ta sig in... eller någon är bara nyfiken? 3 4 Databashanteraren SQL-injektion Har rutiner för många av dessa problem inloggning för åtkomstkontroll grant och revoke grant select on employee to nnnmm123 vyer Not om statistiska databaser och åtkomst Källa: xkcd.com/327/ 5 6 Exempel Transaktion Du ska betala en räkning genom att överföra pengar från ett konto till ett annat. Begär överföring från eget konto till mottagaren. Tryck bekräfta beloppet dras från det ena kontot sedan hänger sig systemet. insättningen registrerades inte Definition: Logiskt sammanhängande serie interaktioner med databasen, som är: Atomära (Atomic) : odelbara Konsistenta (Consistent): integritetsbevarande Isolerade (Isolated): oberoende av annat som görs i db. Bestående (Durable): inte kunna försvinna.
Allt eller inget Start och slut på transaktion lagra interaktioner i loggfil 1.start transaction 5.Y=read(Y) 2.X= read (X) 6.Y = Y + uttag 3.X=X - uttag 7.write (Y) 4.write (X) 8.commit transaction Commit (klart, korrekt) 7 Loggfil start (t234) read (t234, X) write (t234, X, 360, 260) read (t234, Y) write (t234, Y, 120, 220) commit (t234) Vid hängning eller annat problem: Rollback 8 Logg och Rollback Återställa databasen i konsistent skick Backup om hårddiskproblem Transaktioner som ej slutförts rivs upp Transaktioner som slutförts repeteras Hur långt tillbaka som helst? Checkpoint Skriv till loggfilen först, sedan till databasen 9 Problem med parallella transaktioner (isolering) Varor Artikelnr Namn i lager Pris 2398475 Rosor, 10-p 3 79,90 9834576 Tulpan, 10-p 15 49,90 Transaktioner Artikelnr Antal Dag PerDag 2398475 3 120506 9834576 1 120507 2398475 2 120507 10 11 12 Bortkastad uppdatering Inläsning av ogiltigt värde (smutsig läsning) ROLLBACK T1
Felaktig summering: Tid: 1 2 3 4 5 6 7 8 9 10 11 T1: Read(x) x=x-m Write(x) Read(y) y=y+m Write(y) T2: Sum=0 Read(x) Sum=Sum+x Read(y) Sum=Sum+y 13 : lås Problem med Isoleringen och Konsistensen Lösning: reservera åtkomsträttigheten för en artikel till en transaktion: lås Lock (X), Unlock (X) (Alternativ: t.ex. serialiserbarhet och tidsstämpling, studeras ej) 14 Låsning - binära lås Två tillstånd: Låst, Olåst. Protokoll för binära lås: 1.Lock(X) måste utföras innan någon Read(X) eller Write(X)-operation utförs. 2.Unlock(X) måste utföras när läsning och skrivning av X är klar. 3.man får inte göra Lock(X) om man redan har låst X. 4.man får inte göra Unlock(X) om man inte har låst X för tillfället. 15 Summering: 1.sum=0 2.lock(x) 3.read (x) 4.sum=sum+1 5.unlock(x) 6.lock(y) 7.read(y) Exempel lås 8.sum=sum+y 9.unlock(y) OBS: mindre listig lösning 16 Läs- och skrivlås Parallell läsning fungerar bra: skilj på läsning och skrivning. ReadLock (X) WriteLock (X) Unlock(X) ReadLock fås om inget WriteLock är satt. WriteLock fås om inget lås alls är satt. 17 Läs- och skrivlås: protokoll: 1.Innan någon Read(X)-operation utförs måste ReadLock(X) eller WriteLock(X) utföras. 2.Innan någon Write(X)-operation utförs måste WriteLock(X) utföras. 3.Unlock(X) måste utföras när läsning och skrivning av X är klar. 4.man får inte göra ReadLock(X) om man redan har låst X. 5.man får inte göra WriteLock(X) om man redan har låst X för skrivning. 6.man får inte göra Unlock(X) om man inte har låst X för tillfället. 18
Men... 19 Tvåfaslåsning 20 Inte släppa något lås förrän allt som behövs för transaktionen har låsts Men: om problem uppstår så någon transaktion får avbrytas? Exempel 21 Kaskad-rollback 22 Fel trots commit vid parallella transaktioner Även commit-ade transaktioner kan behöva rullas tillbaka. Tvåfaslåsning inte tillräcklig Förbättrad tvåfaslåsning 23 Men... 24 Rigorös tvåfaslåsning Strikt tvåfaslåsning
Dödläge (deadlock): 25 Deadlock, strategier 26 Definition: Korsvis (eller cirkulär, om flera transaktioner är inblandade) låsning av objekt i databasen, sådan att ingen kan släppa en artikel förrän den fått låsa en artikel som är låst av någon som väntar på den artikel man redan låst. Förebyggande: 1. Konservativ tvåfaslåsning 2. Dataobjekten låses alltid i en viss ordning Upptäckande 1. Time-out 2. undersöka wait-for-grafen Transaktioner och säkerhet - summering Säkerhet (inloggning, back-up) Korrekthet - Transaktioner: odelbara, konsistensbevarande, isolerade och bestående. 27 Hur? Loggfil, (commit, rollback) Låsningssystem (tvåfaslåsning, deadlock)