FÖ 13: Databaskursen 1. Olika kodexempel 2. Säkerhet 3. Autentisering 4. Auktorisering 5. Dataintegritet 6. Data privacy 7. GDPR 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 100 Ekonomi 01 PERSONAL anstnr fnamn enamn lön anstdatum avdnr 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_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 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 114588 pdo 332255 hro 124589 h14ankre 235147 afm 985214 h12ermag 25 114588 B349 26 114588 B311 27 114588 B320 28 332255 B320 29 124589 B349 B349 20 B311 60 B320 60 B319 30 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_pkortnr 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_pkortnr 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 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
GDPR Datainspektionen och Dataskyddsförordningen (GDPR, General Data Protection Regulation) 28
Från PuL till GDPR I nära nog 20 år har personuppgiftslagen, PUL, styrt hur och vem som får hantera personuppgifter. Nu är de dagarna över. Från och med 25 maj 2018 är det Dataskyddsförordningen, GDPR General data protection regulation som slår fast reglerna för all form av behandling av information som direkt eller indirekt kan knytas till en person. För myndigheter, företag och organisationer kan detta komma att betyda en hel del förändringar. Sanktionsavgifter Mest påtagliga blir förändringarna för de som inte sköter sig. Personuppgiftslagen har tidigare anklagats för att vara tandlös. Så väntas det inte bli med GDPR, eller dataskyddsförordningen som den kallas i Sverige. Om ett företag brister i sin behandling av personuppgifter kan de tvingas betala en så kallad administrativ sanktionsavgift på upp till 20 miljoner euro eller fyra procent av deras globala omsättning. Spara inte uppgifterna längre än nödvändigt. Se till att ni har stöd i lagen för att samla in uppgifterna. 29
GDPR gäller i EU från 25 maj 2018 Vad är en personuppgift? Personuppgifter är all slags information som kan knytas till en fysisk person som är i livet. Typiska personuppgifter är personnummer, namn och adress. Även foton på personer klassas som personuppgifter. Ja, till och med ljudinspelningar som lagras elektroniskt kan vara personuppgifter även om det inte nämns några namn i inspelningen. Insamling av personuppgifter Samla inte in fler personuppgifter än nödvändigt och enbart för ett visst, i förväg bestämt ändamål. Spara inte uppgifterna längre än nödvändigt. Se till att ni har stöd i lagen för att samla in uppgifterna. 30
Insamling och användning När får personuppgifter samlas in? Personuppgifter får bara samlas in för särskilda, uttryckligt angivna och berättigade ändamål och inte senare behandlas på ett sätt som är oförenligt med dessa ändamål, säger förordningen. Alltså, uppgifter som samlas in för ett visst syfte, får inte sedan användas för helt andra syften. Ett företag kan till exempel utrusta sina bilar med speciell GPS utrustning som används för elektroniska körjournaler för att förenkla redovisningen till Skatteverket. Men, arbetsgivare får inte använda uppgifterna som GPS:en samlar in för att kontrollera hur långa raster de anställda tar 31
Stöd i lagen Man måste också ha stöd i lagen för att hantera personuppgifter. Det finns några olika rättsliga grunder som företag kan använda. De viktigaste är: RÄTTSLIG FÖRPLIKTELSE: I vissa fall är företag skyldiga att registrera personuppgifter, som exempelvis för att uppfylla bokföringsskyldigheten i bokföringslagen. AVTAL: Anställningsavtal, kundavtal och leverantörsavtal är exempel på avtal som innebär att företag måste registrera och hantera personuppgifter (men bara de uppgifter som behövs för att uppfylla avtalet). SAMTYCKE: Ett annat alternativ är att be personen ifråga att få registrera uppgifter om denne. Det kallas för att få personens samtycke. Ett samtycke är enligt förordningen varje slag av frivillig, specifik, informerad och otvetydig viljeyttring, genom vilken den registrerade, antingen genom ett uttalande eller genom en entydig bekräftande handling, godtar behandling av personuppgifter som rör denne. INTRESSEAVVÄGNING: Det är också möjligt att hantera personuppgifter efter en så kallad intresseavvägning om företaget kan visa att dess intresse av att hantera uppgifterna väger tyngre än den enskildes rätt till privatliv. (Marknadsföring och direktreklam). 32
Exempel på rättsliga grunder Dataregister Lönesystem Kundregister Register med potentiella kunder Webbplatsen Rättslig grund Avtal Avtal. För vissa uppgifter krävs samtycke. Intresseavvägning Samtycke eller intresseavvägning 33
Känsliga personuppgifter Känsliga personuppgifter är enligt dataskyddsförordningen 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. genetiska uppgifter biometriska uppgifter som entydigt identifierar en person Genetiska och biometriska uppgifter är nya kategorier som lagts till som känsliga uppgifter i dataskyddsförordningen jämfört med personuppgiftslagen. 34
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 Ett dataskyddsombud (DPO, Data Protection Officer) ska 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. 35
Mänskliga misstag Dataskyddsombudet ska se till att personalen informeras om vikten av att följa gällande säkerhetsrutiner. Dataskyddsombudet ska 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. 36
Andra åtgärder När det gäller åtgärder mot otillbörlig åtkomst ska dataskyddsombudet ä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. 37
The End 38