FÖ 13: Databaskursen 1. Olika kodexempel 2. Säkerhet 3. Autentisering 4. Auktorisering i 5. Dataintegritet 6. Data privacy 7. PuL 8. Personuppgifter 9. Säkerhetspolicy 1 Pär Douhan, pdo@du.se
Procedurer, funktioner och triggrar Kodexempel 2
Ny lön PERSONAL anstr fnamn enamn lön 1 Anders Magnusson 36280 2 Maria Bergdahl 41250 3 Amir Nirbashiri 39500 4 Ann-Christin Eriksson 39000 create or replace trigger testa_ny_lön before update on personal for each row begin if (:new.lön <= :old.lön) then raise_application_error( -20001,'För låg ny lön!'); end if; end; 5 Folke Bengtsson 75400 Uppgift: Skapa en trigger som ser till att den nya lönen, efter den årliga löneförhöjningen, inte kan bli lägre än den gamla lönen. 3
Kontrollera att triggern fungerar PERSONAL anstr fnamn enamn lön 1 Anders Magnusson 36280 2 Maria Bergdahl 41250 3 Amir Nirbashiri 39500 4 Ann-Christin Eriksson 39000 5 Folke Bengtsson 75400 update personal set lön = 36280 where anstnr = 1; commit; Error starting at line : 12 in command - update personal set lön = 36280 where anstnr = 1 Error report - SQL Error: ORA-20001: För låg ny lön! ORA-06512: vid "TEST.KOLLANYLÖN", rad 3 ORA-04088: fel vid körning av triggern 'TEST.KOLLANYLÖN' Triggern verkar fungera: Som vi ser så stoppar triggern transaktionen och skiver ut ett felmmedelande: ORA -20001: För låg ny lön! 4
Räkna personal AVDELNING avdnr avdnamn antal PERSONAL anstnr fnamn enamn lön anstdatum avdnr 100 Ekonomi 0 200 Produktion 0 300 Marknadsföring 0 Uppgift: Skapa en trigger som ser till att hålla reda på hur många anställda det jobbar på varje avdelning. Om en person anställs ska triggern öka värdet med 1 i kolumnen AVDELNING(antal). Om en person slutar ska triggern minska värdet med ett, och om en anställd byter avdelning ska även det lösas av triggern. 5
Checklista Anställning: En insert i tabellen personal betyder att en person anställs på en viss avdelning. Efter insert på tabellen personal ska triggern alltså uppdatera tabellen avdelning genom att öka på antalet anställda med +1. Anställning upphör: En delete på tabellen personal betyder att en person avslutar sin anställning på företaget. Efter delete på tabellen personal ska triggern uppdatera tabellen avdelning genom att minska på antalet anställda med 1. Byte av avdelning: 6 En update på tabellen personal och kolumnen avdnr, betyder att en person byter avdelning på jobbet, d.v.s. får andra arbetsuppgifter. Efter update på tabellen personal och kolumnen avdnr ska triggern uppdatera tabellen avdelning genom att minska på antalet anställda med 1 på den avdelning som personen jobbade på, och slutligen öka antalet med +1 på den nya avdelningen som personen börjar jobba på.
Vad behöver vi? Tre procedurer som utför update på tabellen avdelning: 1. öka med 1 2. minska med 1 3. öka med 1 och minska med 1 4. Procedurerna kommer att behöva avdnr som inparameter. Detta för att veta vilken avdelning som ska uppdateras Tre triggrar som anropar procedurerna efter DML (insert, update och delete) på tabellen personal: 1. After insert on personal 2. After delete on personal 3. After update on personal of avdnr 7
Procedurer Vi börjar med att skapa procedurer: -- Procedur som ser till att antalet ökas med 1 vid anställning create or replace procedure do_anställning( p_avdnr in avdelning.avdnr%type) as begin update avdelning set antal = antal + 1 where avdnr = p_avdnr; end; -- Procedur som ser till att antalet minskas med 1 vid avsked create or replace procedure do_avsked( p_avdnr in avdelning.avdnr%type) as begin update avdelning set antal = antal - 1 where avdnr = p_avdnr; end; 8
Procedurer En procedur kvar: /* Procedur som ser till att antalet minskas med 1 och ökas med 1 vid byte av jobb */ create or replace procedure do_byt_jobb( _ p_avdnr_old in avdelning.avdnr%type, p_avdnr_new in avdelning.avdnr%type) as begin update avdelning set antal = antal - 1 where avdnr = p_avdnr_old; update avdelning set antal = antal + 1 where avdnr = p_avdnr_new; end; Testa att procedurerna fungerar! 9
Översikt avdelning # avdnr antal update update update P P P T T T personal # anstnr (#) avdnr T Trigger after insert: anropar procedur: do_anställning(:new.avdnr) T Trigger after delete: anropar procedur: do_avsked(:old.avdnr) T Trigger after update: anropar procedur: do_byt_jobb(:old.avdnr,:new.avdnr) 10
Triggrar Bara att köra på! -- Triggern startar efter insert på tabellen personal create or replace trigger fixa_anställning after insert on personal for each row begin do_anställning(:new.avdnr); Anrop av proceduren do_anställning end; -- Triggern startar efter delete på tabellen personal create or replace trigger fixa_avsked after delete on personal for each row begin do_avsked(:old.avdnr); end; 11
Triggrar En trigger kvar: /* Triggern startar efter update på tabellen kund och bara när avdnr uppdateras. OBS! Triggern måste skicka med både old och new-värden till proceduren i rätt ordning old = den gamla avdelningen som personen slutat på, och new = den nya avdelningen som personen börjar jobba på. */ create or replace trigger fixa_byt_jobb after update of avdnr on personal for each row begin do_byt_jobb(:old.avdnr,:new.avdnr); end; 12
Testa att after insert fungerar AVDELNING avdnr avdnamn antal PERSONAL anstnr fnamn enamn lön anstdatum avdnr 100 Ekonomi 01 1 Lars Berg 42500 20090217 100 200 Produktion 0 300 Marknadsföring 0 insert into personal(anstnr,fnamn,enamn,lön,anstdatum,avdnr) values(1,'lars','berg',42500,to_date('20090217','yyyymmdd'),100); commit; select * from avdelning; AVDNR AVDNAMN ANTAL ----- ---------------------- ------ 100 Ekonomi 1 200 Produktion 0 300 Marknadsföring 0 13
Testa att after insert fungerar insert into personal(anstnr,fnamn,enamn,lön,anstdatum,avdnr) values(2,'maria','ek',45000,to,,45000,to_date( date('20120610','yyyymmdd'),100); commit; select * from avdelning; AVDNR AVDNAMN ANTAL ----- ---------------------- ------ 100 Ekonomi 2 200 Produktion 0 300 Marknadsföring 0 Vi ser att triggern räknar upp efter anställning g av en ny personal. insert into personal(anstnr,fnamn,enamn,lön,anstdatum,avdnr) values(3,'hasan','fley',43000,to_date('20110502','yyyymmdd'),100); commit; select * from avdelning; AVDNR AVDNAMN ANTAL ----- ---------------------- ------ 100 Ekonomi 3 200 Produktion 0 300 Marknadsföring 0 14
Testa att after delete fungerar AVDELNING avdnr avdnamn antal 100 Ekonomi 32 200 Produktion 0 300 Marknadsföring 0 PERSONAL anstnr fnamn enamn lön anstdatum avdnr 1 Lars Berg 42500 20090217 100 2 Maria Ek 45000 20120610 100 3 Hasan Fley 43000 20110502 100 delete from personal where anstnr = 3; commit; select * from avdelning; AVDNR AVDNAMN ANTAL ----- ---------------------- ------ 100 Ekonomi 2 200 Produktion 0 300 Marknadsföring 0 15
Testa att after update fungerar update personal set avdnr = 300 where anstnr = 1; commit; Alla triggrar och procedurer verkar fungera som de ska! select * from avdelning; AVDNR AVDNAMN ANTAL ----- ---------------------- ------ 100 Ekonomi 1 200 Produktion 0 300 Marknadsföring 1 column fnamn format a14 column enamn format a14 select * from personal; Kan användas för att formatera utskriften i t.ex. SQL Developer eller SQL Plus. Om man har fnamn varchar2(50) så blir det onödigt breda kolumner i resultatet. a14 = 14 tecken bred kolumn. ANSTNR FNAMN ENAMN LÖN ANSTDATUM AVDNR ------ -------------- -------------- ---------- ------------ ------ 2 Maria Ek 45000 2012-06-10 100 1 Lars Berg 42500 2009-02-17 300 16
Behörighetskontroll PASSERKORT SALSBEHÖRIGHET SAL pkortnr user radnr pkortnr salsnr salsnr sittplatser t 114588 pdo 332255 hro 124589 h14ankre 235147 afm 25 114588 B349 26 114588 B311 27 114588 B320 28 332255 B320 B349 20 B311 60 B320 60 B319 30 985214 h12ermag 29 124589 B349 B310 60 Tabellen Salsbehörighet innehåller information om vilka passerkort som öppnar dörrar till vissa salar. Vi ser att kort 114588 öppnar dörren till salar B349, B311 och B320. En insert i tabellen Salsbehörighet innebär att ägaren till ett unikt passerkort har rätt att komma in i en viss sal. Kombinationen av (pkortnr, salsnr) i tabellen Salsbehörighet är unik. 17
Uppgift SALSBEHÖRIGHET radnr pkortnr salsnr 25 114588 B349 26 114588 B311 27 114588 B320 28 332255 B320 Vi antar att all data som finns i tabellen Salsbehörighet är den som vi ser i tabellen här bredvid. Om en person med passerkort 332255 försöker gå in i sal B349, så kommer det inte att gå. Detta följer av att det finns 0 (noll) rader i tabellen där pkortnr = 332255 OCH salsnr = B349. 29 124589 B349 Uppgift: Skapa en funktion med namnet open_door som returnerar 1 (ett) om en person är behörig till en viss sal, och 0 (noll) om personen är obehörig. 18
Räkna rader create or replace function open_door( p_pkortnrpkortnr salsbehörighet.pkortnr%type, p_salsnr salsbehörighet.salsnr%type) return number as v_ resultat number(1); begin select count(radnr) into v_resultat Kan bara innehålla 1(ett) eller 0(noll) from salsbehörighet where pkortnr = p_pkortnrpkortnr and salsnr = p_salsnr; return v_resultat; Returnerar således alltid 1 eller 0 end; select open_door(114588,'b349') from dual; OPEN_DOOR ---------- 1 19
En annan lösning create or replace function open_door( p_pkortnr salsbehörighet.pkortnr%type, p_salsnr salsbehörighet.salsnr%type) return number as v_resultat number(1); begin select radnr into v_resultat from salsbehörighet where pkortnr = p_pkortnr and salsnr = p_salsnr; return 1; exception when no_data_found then return 0; end; Om vi inte hittar någon rad, så innehåller v_resultat NULL. Om v_resultat innehåller NULL så kastas undantaget no_data_found och funktionen returnerar 0 select open_door(114588,'b349') from dual; OPEN_DOOR ---------- 1 20
Säkerhet Grundläggande begrepp 21
1. Authentication Vi börjar med att titta på fyra olika grundbegrepp som är relaterade till säkerhet: 1. Authentication Autentisering: visa "att jag är jag". Att koppla samman en användare med ett användarkonto och kontrollera att användaren har rätt till detta, kallas autentisering (eftersom det kontrollerar att användaren är autentisk). En alternativ benämning är inloggning (speciellt då autentiseringen sker med lösenord). Mobilt BankID och e-legitimation. 22
Centraliserad autentisering Centraliserad autentisering och "Single Sign-on" Centraliserad autentisering ger också fördelen av single sign-on (SSO) för användarna. Single sign-on möjliggör för användare att få tillgång till flera konton och applikationer med ett enda lösenord. En användare behöver bara logga in en gång och kan sedan automatiskt ansluta till någon annan tjänst utan att behöva ge ett användarnamn och lösenord igen. Single sign-on eliminerar behovet för användaren att komma ihåg och administrera flera lösenord, vilket minskar den tid du loggar in flera tjänster. 23
Steg för steg Så här fungerar centraliserad nätverks-autentisering: 1. En användare (klient) begär autentiseringstjänster och tillhandahåller identifieringsinformation, såsom en token eller lösenord. 2. Autentiseringsservern validerar klientens identitet, och skickar sedan tillbaka autentiseringsuppgifter, ett certifikat, (som kan innehålla en giltighetstid) till klienten. 3. Klienten skickar dessa autentiseringsuppgifter till Oracle-servern tillsammans med en begäran att få en databasuppkoppling. 4. Oracle-servern skickar certifikatet tillbaka till autentiseringsservern för autentisering. 5. Om autentiseringsservern accepterar certifikatet så meddelar autentiseringsservern Oracle-servern om att allt är OK och klienten får sin databasuppkoppling. 6. Om autentiseringsservern inte accepterar certifikatet så meddelar autentiseringsservern Oracle-servern om att autentiseringen misslyckades. Klienten nekas sin databasuppkoppling. 7. Oracle har stöd för följande industristandarder (protokoll): Kerberos RADIUS (Remote Authentication Dial-In User Service) DCE (Distributed Computing Environment) Secure Sockets Layer (with digital certificates) Entrust/PKI 24
2. Authorization 2. Authorization Auktorisering, bemyndiga eller godkänna. När klienten väl har auktoriserats (loggat in), vad har klienten rätt att göra? Vilka behörigheter har klienten i systemet? RBAC, Role-Based Access Control (Rollbaserad åtkomst). Innebär att roller skapas som motsvarar vissa arbetsuppgifter på ett företag eller i en organisation. Dessa roller tilldelas sedan olika behörigheter som krävs för att utföra de arbetsuppgifter som är kopplade till rollen. Några exempel på behörigheter kan vara: "Skapa kundorder", "titta på lagersaldo" etc. Slutligen tilldelar man en eller flera roller till användarna. Behörigheter delas aldrig ut direkt till användarna. PERMISSIONS USERS ROLES OBJECTS OPERATIONS (UA) (PA) Permission User Assignment Assignment 25
3. Data integrity 3. Data integrity ty Dataintegritet betyder att ett meddelande inte förändras under transport över ett nätverk. Detta kan realiseras med krypterade checksummor som skickas tillsammans med meddelandet. Till exempel: MD5 och SHA-1 hash algoritmer. 26
4. Data privacy 4. Data privacy Data privacy eller data protection innebär att ingen ska kunna spionera på data som transporteras över ett nätverk. Olika krypteringstekniker med privat och publik nyckel. 27
Säkerhet Datainspektionen och PuL 28
Fakta Personuppgifter Med personuppgifter avses all slags information som direkt eller indirekt kan kopplas till en fysisk person som är i livet. Exempel på sådan information är namn, personnummer och kundnummer. En bild kan också vara en personuppgift om det går att se vem personen/personerna på bilden är. Personuppgiftsansvarig Personuppgiftsansvarig g kallas den som bestämmer varför och hur personuppgifter ppg ska behandlas. En personuppgiftsansvarig kan till exempel vara en kommun, myndighet, organisation eller ett företag. Det är alltså är inte chefen på en arbetsplats eller en anställd som är personuppgiftsansvarig. Undantagsvis kan en fysisk person vara personuppgiftsansvarig, till exempel en enskild företagare. 29
Publicering på Internet Vad får man lägga ut på webben? I personuppgiftslagen (PuL) finns inga särskilda regler för publicering på internet. Personuppgiftslagens generella regler för behandling av personuppgifter gäller även när man publicerar personuppgifter på webbplatser, bloggar och liknande. Om personuppgifter publiceras i en löpande text på internet, till exempel i en blogg, är publiceringen i princip tillåten så länge man inte kränker den som personuppgifterna handlar om. Det är inte möjligt att generellt slå fast vad som är en kränkning av den personliga integriteten utan man måste göra en bedömning i varje enskilt fall och väga in samtliga omständigheter. Faktorer som påverkar bedömningen är bland annat syftet med publiceringen, vilka uppgifter som publiceras, var dessa publiceras, vilken information som har lämnats och hur länge uppgifterna publicerats på internet. Att publicera personuppgifter i syfte att skandalisera eller "hänga ut" någon är tydliga exempel på publicering som normalt är kränkande enligt personuppgiftslagen. 30
Undantag Det finns undantag för journalistiska s a ändamål Ibland publiceras personuppgifter på internet på ett sätt som är kränkande utan att publiceringen står i strid med personuppgiftslagens bestämmelser. Det beror bland annat på att det i personuppgiftslagen finns ett undantag för journalistiska ändamål. Att informera och debattera om personal som missköter sitt arbete och om situationen vid ett vårdboende kan vara tillåtet med stöd av detta undantag trots att det kan finnas information som kan uppfattas som kränkande för personalen. 31
Känsliga personuppgifter Bedöm hur känsliga uppgifterna är Enligt personuppgiftslagen gäller särskilda begränsningar för behandling av vissa kategorier av personuppgifter. I lagen betecknas dessa uppgifter som känsliga personuppgifter. Känsliga personuppgifter är enligt personuppgiftslagen sådana som avslöjar: ras eller etniskt ursprung politiska åsikter religiös eller filosofisk övertygelse medlemskap i fackförening uppgifter som rör hälsa eller sexualliv. 32
Säkerhetskrav Personuppgiftslagens (1998:204) krav på säkerhet vid behandling av personuppgifter: Säkerhetskraven innebär enligt 31 personuppgiftslagen att den personuppgiftsansvarige ska vidta lämpliga tekniska och organisatoriska åtgärder för att skydda de personuppgifter som behandlas. Åtgärderna ska åstadkomma en säkerhetsnivå som är lämplig med beaktande av: de tekniska möjligheter som finns, vad det skulle kosta att genomföra åtgärderna, de särskilda risker som finns med behandlingen av personuppgifterna, och hur pass känsliga de behandlade personuppgifterna är. 33
Organisation Personalen Personalen är den viktigaste resursen i säkerhetsarbetet. Man kan ha bra och dyr teknisk utrustning för säkerhet, men om utrustningen inte används rätt är investeringen bortkastad. Fungerande administrativa rutiner är väl så viktiga som tekniska lösningar. Säkerhetspolicy En personuppgiftsansvarig bör, i vart fall om en omfattande behandling av personuppgifter utförs eller om känsliga personuppgifter behandlas, ha en fastställd säkerhetspolicy. I en säkerhetspolicy bör man lämpligen redovisa organisationens säkerhetsstrategi, ansvarsfördelning och övergripande mål för säkerheten. En säkerhetspolicy bör vara tydlig samt lätt att förstå och tillämpa i praktiken. 34
Mänskliga misstag Den personuppgiftsansvarige bör se till att personalen informeras om vikten av att följa gällande säkerhetsrutiner. Den personuppgiftsansvarige bör göra klart för personalen att det är viktigt att: inte skriva upp lösenord, logga ut när man lämnar arbetsstationen, låsa arbetsrummet när man inte är där, inte ha bildskärmen vänd så att obehöriga kan läsa informationen, inte dela med sig information till någon annan utan att vara säker på att den personen är behörig att få ta del av informationen, inte skriva ut känslig information på en skrivare som obehöriga har eller lätt kan skaffa sig tillgång till. 35
Andra åtgärder När det gäller åtgärder mot otillbörlig åtkomst bör den personuppgiftsansvarige även se över behovet av till exempel: rutiner vid besök, rutiner och regler vid distansarbete och Internetanvändning, rutiner för att ta bort inaktuella användarkonton, installation av aktuella programuppdateringar från leverantörerna för att motverka säkerhetshål i programvaror. 36
The End 37