Föreläsning 6 Databaser och säkerhet



Relevanta dokument
Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

ÖVERVAKNING AV SQL SERVER

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Databaser design och programmering. Transaktionshantering och säkerhet säkerhetsproblem fleranvändarproblem transaktioner låsning

MySQL. Maths Göthe. 25 februari Inledning Några konventioner Licens... 2

Essential Php Security Författare: Shiflett, Chris Antal sidor: 124 Förlag: O'Reilly

Nya webbservern Dvwebb.mah.se

Databaser - Design och programmering. Säkerhetsproblem. SQL-injektion. Databashanteraren. Transaktion. Exempel. Transaktionshantering och säkerhet

LEX INSTRUKTION LEX LDAP

VAD GÖR DU / VEM ÄR DU?

Databaser design och programmering Säkerhetsproblem Databashanteraren SQL-injektion

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Webbprogrammering, grundkurs 725G54

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

Översikt av kapitlet. Ge databasen ett lösenord. Förhindra ändringar av koden i databasen

Databaser och Datamodellering Foreläsning IV

1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Rebus Backup för SQL-databaser

Innehåll. MySQL Grundkurs

Projekt Foreläsning VI

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

KAP 16 BACKUP, RESTORE OCH RECOVERY

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

OBS! Figuren visar inte alla aspekter och objekt som är inblandade i säkerhetssystemet.

version: Sidan 1 av 5

VAD GÖR DU / VEM ÄR DU?

Webprogrammering och 729G28 databaser Webprogrammering och databaser Kursöversikt Webprogrammering Designprocessen Lösningsförslag

Skapa din egen MediaWiki

Innehåll Security. Chapter 4 och 7 Beginning SQL Server 2008 for Developers

Föreläsning 4 Dagens föreläsning går igenom

Ny användare i Hogia Personal

Introduktion till MySQL

Installera SoS2000. Kapitel 2 Installation Innehåll

Online modulen är en tilläggsmodul som också ger tillgång till Näsgård Mobile.

Storegate Pro Backup. Innehåll

Lektion 5 HTML, CSS, PHP och MySQL

Föreläsning 7: Transaktioner

WCMS-15, Webbutvecklare CMS

Administrationsmanual ImageBank 2

TNMK30 Elektronisk publicering HT 2014 Laboration 5: PHP och MySQL

729G28 Webprogrammering och databaser. Föreläsning 1: Diverse praktiskt om kursen Webprogrammering Databaser, terminologi

LB-M-EX Innehåll

Administrationsmanual ImageBank 2

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Övningar i SQL. SQLAccess.doc Ove Lundgren

Trafla databasen vi hämtar data från (remote export) ligger på en godtycklig maskin i nätverket. Den här databasen är en MIMER databas.

Stored procedure i ASP.NET

Föreläsning 3 Dagens föreläsning går igenom

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst

Capitex dataservertjänst

Databasteknik för D1, SDU1 m fl

Funktionsbeskrivning

Dokumentation för VLDIT AB. Online classroom

Databasutveckling Introduktion till SQL och TSQL

Följ dessa steg för att försäkra dig om att ditt konto aktiveras på rätt sätt. Aktivera PayPal i Jetshops gränssnitt

Klientprogrammering mot databaser

Innehållsförteckning. Användarmanual för Lockbee Backup Databas 2009

DRAFT. CVS kurs laboration 1 Checka in, ut och uppdatera. Marcus Rejås. 17 november 2002

Modul 5 Joomla! Översikt. Denna moduls mål: - Få kunskaper om Joomla! - Få kunskap om installation och konfiguration.

Quadri DCM Handledning för administratörer och användare i projekt som kör Quadri DCM. Version

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

1DV423 Databas med Administration

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Kontoersättning i Pyramid - Arbetsgång

1.Lär känna MS SQL Observera. Tips. Förberedelse

Starta MySQL Query Browser

1. Logga in som Wordpress-administratör till den sajen som ni vill säkerhetskopiera.

Handledning för installation och komma igång med Joomla

Vad är en databas? Databasutveckling Med MySQL/MariaDB

Installation/uppdatering av Hogia Personal fr.o.m. version 13.1

Installation xvis besökssystem, Koncern

LEX INSTRUKTION REPLIKERING UPPGRADERING

Handbok Dela Skrivbord. Brad Hards Översättare: Stefan Asserhäll

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

Detta dokument skall ge en kortfattad introduktion till Jasmine installationen vid DSV.

Din manual ARCHOS 604 WIFI

ARX på Windows Vista, Windows 7 eller Windows 2008 server

Structured Query Language (SQL)

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

1. Kvalitetsbegreppet 2. Kommunikation 4. Olika typer av datalagring. 5. Databas 6. DBMS 7. Molntjänster 8. Tabeller. 10. SQL 11.

Elektronisk publicering TNMK30

Structured query language (SQL)

JobOffice SQL databas på server

C64 4G-router 4G-router för VAKA fjärradministration, IP-porttelefoni och internetbokning.

Kapitel 4 Arkivmenyn Innehåll

Workshop IBA internet based assessment

Din manual F-SECURE PSB AND SERVER SECURITY

Telia Centrex IP Administratörswebb. Handbok

Transkript:

Databasbaserad publicering Föreläsning 6 1 Föreläsning 6 Databaser och säkerhet & Läs kapitel 13 i Databasteknik och kapitel 9 i boken PHP & MySQL: Novice to Ninja

Databasbaserad publicering Föreläsning 6 2 Olika typer av säkerhet säkerhet mot intrång av obehöriga säkerhet mot olämpliga inmatningar/ändringar av behöriga säkerhet vid driftstörningar, datorkrascher, strömavbrott mm säkerhet kan dels hanteras av SQL, dels av PHP, vanligtvis av en kombination

Databasbaserad publicering Föreläsning 6 3 SQL-hantering av säkerhet mot intrång av obehöriga Administration av rättigheter Med SQL-kommandot GRANT kan man ge användare olika typer av rättigheter till tabeller: SELECT-rätt att hämta data ur tabeller UPDETE-rätt att ändra existerande poster i tabellen DELETE-rätt att ta bort poster INSERT-rätt att lägga in nya poster Dessutom kan man få rättigheter till själva databasen: CREATE-rätt att lägga till tabeller i en databas DROP-rätt att ta bort tabeller ur en databas Med kommandot REVOKE kan man ta bort rättigheter.

Databasbaserad publicering Föreläsning 6 4 Exempel: GRANT SELECT,INSERT ON album TO elev ger användaren elev rätt att hämta data och lägga till data till tabellen album. REVOKE INSERT ON album TO elev tar bort möjligheten att lägga till poster för elev. GRANT UPDATE(catalognumber) ON album TO elev ger elev rätten att ändra kolumnen catalognumber (men inte övriga kolumner) GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON mytunes.* TO elev@localhost IDENTIFIED BY 'hemlig'

Databasbaserad publicering Föreläsning 6 5 ger elev rätt att hämta poster, lägga till poster, ändra poster, ta bort poster för alla tabeller i databasen mytunes samt skapa nya tabeller i mytunes. Det förutsätter att elev ansluter från localhost, dvs samma dator som databashanteraren samt att lösenordet 'hemlig' används. GRANT SELECT ON mytunes.* TO elev@'%' ger elev rätt hämta data oavsett vilken dator han ansluter ifrån. GRANT SELECT ON mytunes.* TO elev@'%.mah.se' ger elev rätt att hämta data om han ansluter från godtycklig dator inom mah.se. OBSERVERA: Om man ansluter till SQL-servern via en PHP-server, är det PHP-serverns adress som är det intressanta. I exemplet ovan kan man hämta data från mytunes även från datorer utanför mah om man går via en PHPserver inom mah.

Databasbaserad publicering Föreläsning 6 6 GRANT ALL ON mytunes.* TO elev ger elev i stort sett alla rättigheter. GRANT Ofta behöver en hel grupp av användare samma rättigheter till en databas. Man kan då skapa roller med kommandot CREATE ROLE. En grupp kan tex vara kurssekreterare som kan ha vissa rättigheter, en annan grupp kan vara kursansvariga lärare som har andra rättigheter. Alla som tillhör en viss grupp (roll) kan då ges samma rättigheter. MySQL v 4 stöder inte roller. SQL-injection attacks SQL-injection betyder att obehöriga användare försöker lura ett system genom att infoga SQL-kod i inmatningsfält, vanligtvis i ett webbformulär.

Databasbaserad publicering Föreläsning 6 7 Antag att man har ett formulär med fälten user och password. Om man i fältet password matar in texten user elev password xxx' or 'a'='a Antag vidare att fälten user går vidare till PHP-variabeln $user och password går vidare till $password. Om nu detta hanteras av mottagande PHP-sida på följande vis: $sql="select privileges FROM security WHERE user='$user' and password='$password' "; kommer SQL-kommandot att bli SELECT privileges FROM security WHERE user='elev' and password='xxx' or 'a'='a'

Databasbaserad publicering Föreläsning 6 8 Eftersom 'a' alltid är lika med 'a' kommer SELECT att hitta poster även om man angivt fel lösenord för elev, och eventuellt få rättigheter trots att man egentligen saknar det. PHP har ett antal funktioner man kan använda för att undvika apostrofer kommer med i inmatningsfält. Användbara funktioner är tex stripslashes och addslashes. Läs mer på http://se2.php.net/mysql_real_escape_string. Det finns även en inställning i PHP som man kan använda, "magic quotes". Läs mer på http://se2.php.net/manual/sv/ref.info.php#ini.magic-quotes-gpc.

Databasbaserad publicering Föreläsning 6 9 Säkerhet mot olämpliga inmatningar/ändringar av behöriga användare Att skydda mot detta kan vara väl så svårt eller till och med svårare än att skydda mot intrång av obehöriga. Användare med rättighet att ändra data kan ställa till stor skada om de ändrar data på olämpligt sätt. Det finns inget generellt sätt att skydda sig mot detta, men följande försiktighetsåtgärder kan man vidta: Regelbunden backup. Om en användare råkat ta bort en post kan man förhoppningsvis återskapa den från en backup. Loggning av alla ändringar. Om en post tas bort eller ändras kan en kopia av den sparas i en historik-tabell. Väl utformat gränssnitt med lämpliga varningsmeddelanden. En varningsruta i stil med

Databasbaserad publicering Föreläsning 6 10 kan kanske förhindra att man utför en olämplig handling. Å andra sidan borde man i detta specifika fall troligtvis förhindrat möjligheten för en användare att utföra denna handling.

Databasbaserad publicering Föreläsning 6 11 Säkerhet vid driftstörningar, datorkrascher, strömavbrott mm I första hand bör man naturligtvis undvika att det sker datorkrascher och strömavbrott med UPS (uninterruptable power supply) och liknande. Trots försiktighetsåtgärder kan man inte skydda sig helt mot till exempel hårdvarufel. Vissa av säkerhetsåtgärderna är de samma som tidigare, till exempel backup, men det finns några viktiga fall där man använder en teknik som kallas transactions eller transaktioner. En transaktion är en serie av SQL-kommandon som måste utföras tillsammans.

Databasbaserad publicering Föreläsning 6 12 Ett klassiskt exempel: antag att vi ska överföra pengar (785 kr) från ett konto till ett annat. Då börjar vi med att dra pengar från ett konto: UPDATE konto SET saldo=saldo-785 WHERE kontonr='113-335-7891'; Sedan sätter vi in på annat konto: UPDATE konto SET saldo=saldo+785 WHERE kontonr='113-684-4322'; Vad händer om servern kraschar efter att vi dragit pengar men inte hunnit sätta in? Jo, pengarna försvinner helt och hållet! Om en databas är inställd för att hantera transaktioner utförs inte SQLkommandon förrän man ger kommando COMMIT.

Databasbaserad publicering Föreläsning 6 13 Vi kan då komplettera vårt exempel: UPDATE konto SET saldo=saldo-785 WHERE kontonr='113-335-7891'; UPDATE konto SET saldo=saldo+785 WHERE kontonr='113-684-4322'; COMMIT; Raderna är till en början transitoriska dvs de sparas inte permanent i databasen förrän man utför commit. Om servern kraschar mellan rad 1 och rad 2 kommer inga ändringar att ha sparats i databasen eftersom man inte utfört COMMIT. Tidigare versioner av mysql saknade transaktioner men det finns i de senaste versionerna. Transaktioner påverkar prestanda, och ibland väljer man att ha det avstängt för att öka prestanda. Ett skäl till att prestandan minskar är att man vanligtvis måste låsa tabeller under en transaktion, så att en andra användare inte kan komma in och ändra i en tabell innan en första användare har avslutat en transaktion.

Databasbaserad publicering Föreläsning 6 14 Det kan vara andra skäl till att man avbryter en transaktion än hårdvarufell. Om det visar sig efter att man dragit pengar från ett konto och det visar sig att det inte fanns tillräckligt med pengar på kontot kan man göra ROLLBACK. UPDATE konto SET saldo=saldo-785 WHERE kontonr='113-335-7891'; SELECT saldo FROM konto W HERE kontonr='113-335-7891'; ROLLBACK; Eftersom vi här gör ROLLBACK innan vi hunnit göra COMMIT kommer inte ändringen på rad 1 att sparas.

Databasbaserad publicering Föreläsning 6 15 Säkerhetshantering PHP Se kapitel 9 i PHP & MySQL: Novice to Ninja. Cookies, sessions and access control. Spara aldrig lösenord i klartext i tabeller. Spara kodade lösenord. Boken använder en kodningsmetod som kallas MD5, som har vissa säkerhetsbrister men som vi kommer att använda som exempel i labbarna. MD5 finns både i PHP och i MySQL.