HELIA 1 (15) Luento 2.6 Käyttöoikeuksista ja suojauksesta... 2 Suojausten suunnittelu... 3 Käyttäjätunnukset... 4 Tunnuksen luominen... 5 Tunnuksen muuttaminen... 6 Tunnuksen poistaminen... 6 Oikeudet / Valtuudet... 7 Oikeuksien hallinta SQL-92:ssa... 8 Suojaustarkkuus?... 9 Roolit... 10 Oracle 7 & 8:... 11 Roolien käytön suunnittelu... 13 Roolien hierarkia?... 13 Roolien keskinäinen suhde?... 13 Rivitason suojaus... 14 Käytön seuranta... 15
HELIA 2 (15) Käyttöoikeuksista ja suojauksesta Yhteiskäyttöisissä tietokannoissa on huolehdittava tiedon suojauksesta Ä (tietojen luvaton luku, muuttaminen, tuhoaminen, ) Ä Myös suojaukset on suunniteltava, muuten tulee sotkua... Ä Muista laki ja hyvät tavat Ä Pääsyä tietokannan tietoihin kontrolloidaan 1. Tunnistamalla käyttäjät (identifiointi / autentikointi) 2. Antamalla käyttäjille käyttöoikeuksia (auktorisointi)
HELIA 3 (15) Suojausten suunnittelu Ä Lähtökohtana a) Tehtäväanalyysi b) Tietotarveanalyysi Tieto käyttäjä matriisit / -taulukot mikä käyttäjäryhmä tarvitsee mitäkin tietoa (Tieto toiminto matriisit / -taulukot) mitä tietoa mihinkin tehtävään tarvitaan mikä käyttäjäryhmä tekee mitäkin tehtäviä esim. Tieto käyttäjä matriisi: Ratsastuskilpailu Seuran Jäsensihteersihteeri Kilpailu- Jäsen Kaikki hallitus Seura S, I, U S S S S Kilpailu S, I, U, D S S, U S S Luokka S, I, U, D S S, U S S Lähtö S S S, U S, I S Jäsen S S, I, U S S, I - Ratsu S - S, I, U, D I - Maksu S S, I, U - - - Tehtävä I, U, D S S, U S S Tehtäväkilpailuissa S S S, I, U, D S, I S Ohjelma I, U, D S S, U S S S = Select I = Insert U = Update D = Delete
HELIA 4 (15) Käyttäjätunnukset Ä SQL-92 ei sano mitään käyttäjistä (users) se tuntee vain käsitteen <authorization identifier> Authorization identifier user name + PUBLIC käsittää kaikki käyttäjät Ä Käyttäjätunnusten luonti ja ylläpito yleensä DBA:n huoli...
HELIA 5 (15) Tunnuksen luominen Ä SQL-92 ei määrittele käyttäjien luontitapaa! Å Oracle syntaksi: CREATE USER.<user-name> IDENTIFIED BY <password>.. [DEFAULT TABLESPACE <tablespace_name>] [TEMPORARY TABLESPACE <tablespace_name>] [QUOTA <space_amount> UNLIMITED on <tablespace_name>]... [PROFILE <profile_name> CREATE USER lintu IDENTIFIED BY koskelo DEFAULT TABLESPACE linnut_ts TEMPORARY TABLESPACE temp_ts QUOTA UNLIMITED ON linnut_ts QUOTA 10M ON temp_ts QUOTA 5M on system PROFILE perus Ä Tunnuksen luomisen lisäksi sille on annettava käyttöoikeus tietokantaan <-- tarkista ORACLE 8 GRANT CONNECT TO <user_name>
HELIA 6 (15) Tunnuksen muuttaminen ALTER USER <user_name>... DEFAULT ROLE <role_name> Kaikki samat määritykset annettavissa kuin CREATE USER lauseessa ALTER USER lintu DEFAULT ROLE ALL EXCEPT poikanen Tunnuksen poistaminen DROP USER <user_name> [CASCADE]
HELIA 7 (15) Oikeudet / Valtuudet SQL-92: Oikeus Taulu Näkymä Sarake Domain Select X X Insert X X X Update X X X Delete X X References X X Usage X Ä Oikeuksissa ja niiden toteutuksissa tiedonhallintajärjestelmäkohtaisia eroja! Ä Objektien omistajalla on aina kaikki oikeudet omistamiinsa objekteihin Å Muille käyttäjille oikeudet annettava erikseen Ä PUBLIC käyttäjäryhmälle annetut oikeudet periytyvät kaikille käyttäjille
HELIA 8 (15) Oikeuksien hallinta SQL-92:ssa GRANT <privilege-list> ON <object-name> TO <user-list> [WITH GRANT OPTION] GRANT SELECT, UPDATE ON henkilo TO kayttaja WITH GRANT OPTION REVOKE [GRANT OPTION FOR] < privilege-list> ON <object-name> FROM <user-list> [CASCADE RESTRICT] REVOKE SELECT, UPDATE ON henkilo FROM kayttaja
HELIA 9 (15) Suojaustarkkuus? Tyypillisesti oikeudet myönnetään taulukohtaisesti Usein on tarvetta rajata käyttöoikeuksia rivitasolla Useimmat tiedonhallintaohjelmistot eivät tue rivitason suojausta, toteutus... a) Sovellusohjelmassa b) Tietokannassa näkymien avulla Usein on tarvetta rajata käyttöoikeuksia kenttätasolla Useat tiedonhallintaohjelmistot eivät tue kenttätason suojausta (standardista huolimatta), toteutus... Tyypillisesti näkymien avulla SQL-92:ssa oikeudet annetaan käyttäjä(tunnus)kohtaisesti monissa tiedonhallintajärjestelmissä oikeudet voidaan antaa ryhmä-/roolikohtaisesti (helpottaa ylläpitoa)
HELIA 10 (15) Roolit Ä E mukana SQL-92:ssa Ä Mukana SQL3:ssa Idea: Käyttäjä 1 Taulu 1 Käyttäjä 2 Taulu 2 Käyttäjä n. Taulu n Käyttäjä 1 Taulu 1 Käyttäjä 2 Rooli 1 Taulu 2 Käyttäjä n. Taulu n Helpottaa suuresti käyttöoikeuksien ylläpitoa
HELIA 11 (15) Oracle 7 & 8: CREATE ROLE <role_name> [IDENTIFIED BY <password> ALTER ROLE <role_name> [IDENTIFIED BY <password> DROP ROLE <role_name> Å Rooleille myönnetään oikeudet kuten käyttäjille GRANT INSERT, UPDATE, DELETE ON lähtö TO kilpailusihteeri + Käyttäjille (tai rooleille) myönnetään oikeudet (taulujen sijasta) rooleihin GRANT kilpailusihteeri TO janne + Rooli on lisäksi aktivoitava tai se on määriteltävä yhdeksi oletusrooleista (DEFAULT ROLE määrittely ALTER USER lauseessa) SET ROLE <role_list> ALL ALL EXCEPT <role_list> NONE Ä Aktivoimalla rooli sovelluksen käynnistyksen yhteydessä ja deaktivoimalla se sovelluksen käytön päätyttyä voidaan tietokannan käyttö sovellusohjelman ohi estää
HELIA 12 (15) Oraclessa useita järjestelmätason oikeuksia ja rooleja ns. SYSTEM PRIVILEGES ja SYSTEM ROLES Esim system privileges ALTER ANY ROLE ALTER ANY TABLE ALTER USER CREATE ANY INDEX CREATE ANY TABLE CREATE USER... Esim: System roles: CONNECT RESOURCE DBA... Ä Oracle ei enää suosittele systeemi-roolien käyttöä...
HELIA 13 (15) Roolien käytön suunnittelu Roolien hierarkia? a) Vain 1-tasoisia rooleja? b) 2-tasoiset roolit: 1. sovelluskohtaiset roolit oikeudet tauluihin 2. tehtäväkohtaiset roolit oikeudet sovellusrooleihin 3. käyttäjät oikeudet tehtävärooleihin c) Useampitasoisia rooleja? Roolien keskinäinen suhde? a) eksklusiiviset roolit? b) inklusiiviset roolit?
HELIA 14 (15) Rivitason suojaus Esim. Kunkin osaston työntekijät saavat nähdä vain oman osastonsa projektitiedot. Osastoja on ainakin 20.... TYOLAINEN(henkilo#, hlon_nimi, osasto#, user_id,...) OSASTO(osasto#, osaston_nimi,...) PROJEKTI(projekti#, projektin_nimi, osasto#,...) CREATE VIEW w_projekti_os AS SELECT Projekti#, Projektin_nimi,... FROM projekti, tyolainen WHERE tyolainen.user_id = USER AND projekti.osasto# = tyolainen.osasto#
HELIA 15 (15) Käytön seuranta Ä Joskus saattaa olla tarkoituksenmukaista kerätä lokitietoa tietokantaan tehdyistä muutoksista Kuka on muuttanut Roihun palkkatietoja? Milloin tämä tuote on tullut myyntiin? Å Usein tauluun liitetään ylimääräisiä kenttiä lokitiedon tallennusta varten: Luonti-pvm Luonti-kjatunnus Paivitys-pvm Paivitys-kjatunnus Ä Päivitystietoihin jää merkintä vain viimeisestä päivityksestä Ä Poistosta ei voi tallentaa tietoa poistetun tietueen yhteyteen Ä Joissakin tiedonhallintajärjestelmissä voidaan tallentaa kaikki tietokantaan tehdyt päivitykset erilliseen lokitiedostoon (voi kasvaa nopeasti varsin suureksi) Ä Tietokantasuunnittelussa voidaan myös varautua lokitietojen tarpeellisuuteen (esim. käyttötilin tietoihin ei kirjata saldon tilan muutosta, vaan kukin tapahtuma omalle rivilleen)