Databashanteringssystem nikos dimitrakas nikos@dsv.su.se 08-162099 rum 6626 Connolly/Begg (3rd edition) Kapitel 18.1, 18.2, 6.2, 4.4 (inte 6.4.3, 6.4.4), 6.5, 6.6, 3.3, 8.2.7, 27.4.11, 19.1, 19.2, 19.3 (4th edition) Kapitel 19.1, 19.2, 6.2, 6.4 (inte 6.4.3, 6.4.4), 6.5, 6.6, 3.3, 8.2.7, 28.4.12, 20.1, 20.2, 20.3 (5th edition) Kapitel 20.1, 20.2, 7.2, 7.4 (inte 7.4.3, 7.4.4), 7.5, 7.6, 4.3, 29.4.12, 22.1, 22.2, 22.3
Databashanteringssystem Säkerhet Användare och behörigheter Integritet Backup och återställning Transaktionshantering Samtidighet (concurrency) Lås Rollback Återställning
Säkerhet Hot Avsiktliga eller oavsiktliga hot som kan påverka systemet och organisationen Stöld och bedrägeri Försämrad sekretess (confidentiality) Försämrad personlig integritet (privacy) Försämrad integritet/tillförlitlighet Försämrad tillgänglighet Säkerhet Skydd mot dessa hot
Sårbarhet – Potentiella hot Hårdvara Nätverk Applikation DBHS Användare Programmerare Administratör Databas
Botemedel Auktorisation (authorization) Tillåta tillgång till systemet Kräva identifiering och authenticering Åtkomsts-/Behörighetskontroll (access control) MAC vs DAC (Mandatory/Discretionary) Bevilja och häva tillgång/åtkomst till resurser/objekt SQL (DAC): GRANT / REVOKE Backup och återställning Integritet Vyer Kryptering RAID Prestanda Säkerhet pga redundans
Grant Beviljar ett subjekt (användare) vissa privilegier (läsa/skriva/etc) på ett objekt (tabell/vy/etc) Ge Kalle behörighet att titta i tabellen Person GRANT SELECT ON Person TO Kalle Förutsätter att man själv har behörighet att ge denna behörighet!
Grant GRANT privilegier ON objekt TO subjekt [WITH GRANT OPTION] SELECT, INSERT, UPDATE, DELETE, REFERENCES, USAGE, ALL PRIVILEGES, roll Specifika kolumner: UPDATE(adress) Objekt Tabell, vy, domän, etc Subjekt Användare, grupp, roll, PUBLIC WITH GRANT OPTION Tillåt subjektet att ge bort samma behörighet vidare
Backup & återställning Att ta en kopia Journaling Att spara en logg med alla ändringar Återställning Få tillbaka allt med hjälp av backup och loggar
Integritet Integrity Enhancement Feature Required Data (NOT NULL) Domain Constraint (CHECK, DOMAIN) Entity Integrity Referential Integrity General Constraint (ASSERTION) Enterprise Constraint (Trigger)
Entitetsintegritet Unika och identifierbara rader i varje tabell Ej NULL eller dubbletter i PN
Referensintegritet Främmande nycklar har Regler för främmande nycklar NULL, eller Ett värde som finns i den refererade kandidatnyckeln Regler för främmande nycklar Vad händer med FN när den refererade kandidatnyckeln förändras eller tas bort CASCADE SET NULL / NULLIFY RESTRICT / NO ACTION
Enterprise Constraint ECA Event Condition Action Trigger CREATE TRIGGER triggernamn AFTER/BEFORE händelse ON tabellnamn REFERENCING ny & gammal FOR EACH ROW/STATEMENT WHEN villkor logik att utföras
Vyer & Integritet VIEW WITH CHECK OPTION Man kan mata in data i vyn Inmatningarna måste uppfylla villkoret i vyn Inmatningarna sparas i tabellen (inte i vyn) De inmatade raderna måste alltså ingå i vyn CREATE VIEW personMK AS SELECT * FROM person WHERE kön IN (’m’, ’k’) WITH CHECK OPTION
Databashanteringssystem Säkerhet Användare och behörigheter Integritet Backup och återställning Transaktionshantering Samtidighet (concurrency) Lås Rollback Återställning
Transaktionshantering Ett logiskt sammanhängande jobb Egenskaper (ACID) Atomicity Allt eller inget Commit eller Rollback Consistency Integritet/Konsekvens före och efter transaktionen Isolation Oberoende av varandra Durability Permanent även vid krasch
Concurrency / Samtidighet Flera transaktioner parallellt Oberoende av varandra Potentiella problem Flera vill åt samma resurs (tabell/rad) Den förlorade uppdateringen Läsning av okommittade data (dirty read) Inkonsekvent analys (ej upprepningsbar läsning) Fantomproblemet
Den förlorade uppdateringen Transaktion A Transaktion B X Läs X (30) 30 Dra bort 20 (10) Lägg till 50 (80) Skriv X (10) 10 Skriv X (80) 80 tid
Läsning av okommittade data (dirty read) Transaktion A Transaktion B X Läs X (30) 30 Dra bort 20 (10) Skriv X (10) 10 Läs X (10) Ångra Lägg till 50 (60) Skriv X (60) 60 tid
Inkonsekvent analys (ej upprepningsbar läsning) Transaktion A Transaktion B X Y Sum (var) Sum = 0 30 80 Läs X (30) Läs Y (80) Sum =+ X Dra bort 40 från Y (40) Skriv Y (40) 40 Läs Y (40) Lägg till 40 till X (70) Sum =+ Y 70 Skriv X (70) tid
Fantomproblemet Transaktion A Transaktion B Hämta alla personer från Stockholm Ta bort Kalle (som bor i Stockholm) … tid Transaktion A Transaktion B Hämta alla personer från Stockholm Lägg till Kalle (som bor i Stockholm) …
Concurrency / Samtidighet Krav Serialiserbarhet Parallellt dock utan konflikt Återställbarhet Inga konflikter även vid rollback Lösningar Seriellt schema (inga parallella transaktioner) Lås Tidsstämplar
Lås Läslås (Shared lock) Skrivlås (Exclusive lock) Låsgranularitet Databas, tabell, …, rad, cell Deadlock 2 eller flera transaktioner väntar på varandra att släppa lås 2PL – Two-Phase Locking Växande fas – lås begärs Krympande fas – lås släpps Inga nya lås efter att något lås har släppts T1 T2 T3
Lås Deadlock T1 T2 T3 Förhindra Timeout Conservative 2PL Upptäck Wait-for graph Lös Offer (victim) Rollback (för senare återstart) Svältning (starvation) T1 T2 T3
Tidsstämpling Varje transaktion får en tidsstämpel vid start Varje dataelement markeras med två tidsstämplar Transaktionen som läste dataelementet senast Transaktionen som skrev dataelementet senast Varje gång en transaktion vill läsa eller skriva ett dataelement Jämför transaktionens tidsstämpel med dataelementets tidsstämpel Avgör om transaktionen skall fortsätta eller startas om
Återställning (Recovery) Databasåterställning Få tillbaka databasen (i korrekt tillstånd) efter systemfel Följande behövs Backup En kopia av databasen Full eller inkrementell Sparas separat Loggar Innehåller information om alla transaktioner Värden före en ändring (BEFORE IMAGE) Värden efter en ändring (AFTER IMAGE)