HELIA TIKO-05 1 (23) Näkymät ja tiedon suojaus Näkymät...2 Eri tyyppisiä relaatioita...2 Taulu - Tallennettu relaatio...2 Tulosrelaatio - Kyselyn tulos...2 Työtaulut - Väliaikaisiksi luodut taulut...2 Näkymä - Virtuaalirelaatio...3 Otetaulut - Tauluun tallennettu tulosrelaatio...3 Näkymien määrittely...4 Sarakkeiden uudelleen nimeäminen...5 Näkymien poisto...6 Näkymien käsittely...7 Näkymien kautta päivitettävyys / SQL-92...8 Hyödyt...9 Vaarat... 12 Suositus... 13 Käyttöoikeuksista ja tiedon suojauksesta... 14 Käyttäjätunnukset... 15 Tunnuksen luominen... 16 Oikeudet / Valtuudet... 17 Oikeuksien hallinta SQL:ssä... 18 Suojaustarkkuus?... 19 Roolit... 20 Suojausten suunnittelu... 22
HELIA TIKO-05 2 (23) Näkymät Eri tyyppisiä relaatioita Taulu - Tallennettu relaatio Nimetty Itsenäinen Fyysisesti olemassa, ts. RDBMS tallentaa taulut ja niiden sisällön johonkin fyysiseen paikkaan levyllä. Tietojen olemassaolo riippuu taulun olemassaolosta Määritellään CREATE TABLE lauseella Tulosrelaatio - Kyselyn tulos Tietyn kyselyn tulos (tietyllä ajanhetkellä) Määritellään SELECT lauseella Työtaulut - Väliaikaisiksi luodut taulut Temporary table Nimetty Tuhotaan automaattisesti määriteltynä hetkenä esim. commit:n yhteydessä Esim. alikyselyissä
HELIA TIKO-05 3 (23) Näkymä - Virtuaalirelaatio Nimetty Johdettu kyselyn avulla Ei fyysisesti olemassa Tietojen olemassaolo ei riipu näkymän olemassaolosta Näyttää tietosisällön ajantasaisesti Määritellään CREATE VIEW lauseella Otetaulut - Tauluun tallennettu tulosrelaatio Tilannevedos, snapshot Nimetty Johdettu kyselyn avulla On fyysisesti olemassa Vain luku sallittu Virkistetään (refresh) määräajoin Käyttö tyypillisesti hajautetuissa tietokannoissa Ei SQL-92 standardissa! (eikä käsitellä tällä kurssilla)
HELIA TIKO-05 4 (23) Näkymien määrittely SQL-92 syntaksi CREATE VIEW view_name [( view_column_list ) ] AS query_expression CREATE VIEW w_lehtori AS SELECT opettajanro, sukunimi, etunimi, puh FROM opettaja WHERE nimike = LEHTORI Kaikenlaiset SQL-lauseet kelpaavat: (toimittajakohtaisia rajoituksia voi olla...) Laskutoimitukset ( col1 + col2 ) * 1,22 Funktiot SUM( col1 ) Valintalauseet WHERE col5 > 10 Ryhmitys GROUP BY Liitokset FROM table1 JOIN table2 Joukko-operaatiot UNION / INTERSECT /... Alikyselyt Duplikaattien karsinta DISTINCT Order by määritystä ei voi antaa!
HELIA TIKO-05 5 (23) Sarakkeiden uudelleen nimeäminen Kyselyssä poimitut sarakkeet voidaan nimetä uudelleen Etenkin johdetut sarakkeet (esim. funktiot) kannattaa nimetä Standardin mukaan nimeäminen tehdään a) määrittelemällä sarakenimien lista (kaikki) suluissa näkymän nimen jälkeen CREATE VIEW w_esim (puhelin) AS SELECT DISTINCT puh FROM henkilo b) antamalla itse kyselyssä sarakkeelle toinen nimi as -lausekkeella CREATE VIEW w_esim AS SELECT DISTINCT puh AS puhelin FROM henkilo Tietokantatoimittajilla on (myös) standardista poikkeavia sarakkeiden uudelleennimeämistapoja
HELIA TIKO-05 6 (23) Näkymien poisto DROP VIEW view_name; Vain näkymän määrittely poistetaan; dataan ei kosketa
HELIA TIKO-05 7 (23) Näkymien käsittely Näkymät voivat olla myös uusien kyselyjen (ja näkymien) lähtökohtana aivan kuten taulut SELECT sukunimi, etunimi puh FROM w_lehtori WHERE puh = 300 Näkymät eivät aseta rajoituksia kyselyille Näkymät asettavat rajoituksia datan päivitettävyydelle (erilaisia eri tietokantatuotteissa)
HELIA TIKO-05 8 (23) Näkymien kautta päivitettävyys / SQL-92 Näkymän kautta voidaan päivittää taustalla olevan, pysyvän relaation dataa INSERT-, UPDATE- JA DELETE-kommennoilla, jos näkymän määrittävän kyselyn rakenne täyttää seuraavat ehdot: 1. Kysely kohdistuu vain 1 tauluun 2. Distinct määrettä ei saa käyttää 3. Group by ei saa olla käytössä 4. Where-ehdossa ei saa olla alikyselyä 5. Kyselyssä valittavien sarakkeiden tulee kattaa kaikki ko. relaation not null määritetyt sarakkeet, joille ei ole määritelty oletusarvoa Säännöillä pyritään varmistamaan, että päivitys kohdistuu vain ja ainoastaan siihen tietueeseen, mihin on tarkoitettukin Päivitettävyyden ehdot vaihtelevat eri RDBMS:ssä
HELIA TIKO-05 9 (23) Hyödyt Käyttäjä(ryhmä)kohtainen näkökulma Eri käyttäjät voivat nähdä saman datan sovitettuna omaan näkökulmaansa Tietoriippumattomuuden lisääminen Mikäli tietokantaan joudutaan tekemään muutoksia, näkymän avulla voidaan käyttäjälle / ohjelmille tarjota entisenkaltainen rajapinta tietoon. Ts. muutokset tietokannan tauluissa eivät välttämättä aseta muutosvaatimuksia sovellusohjelmille / käyttäjien kyselyille
HELIA TIKO-05 10 (23) Tietorakenteen yksinkertaistaminen Eri tauluihin kootut tiedot voidaan yhdistää näkymässä ts. purkaa tietokannan monimutkaisuutta tiedon luotettavuuden (ristiriidattomuuden) kärsimättä (keskeinen osassa Data Warehouse tuotteita, esim. Business Objects) Monimutkaisten kyselyjen tallentaminen näkymiksi a) vähentää virhemahdollisuuksia b) parantaa hallittavuutta modulaarisempi rakenne! + SQL:n rajoitusten kiertäminen (tyypillisesti ryhmäfunktioiden yhteydessä) Tietosuojan rakentaminen Näkymien avulla voidaan rajata a) Sarakkeita b) Rivejä (tietueita) Jotka ovat eri käyttäjäryhmien nähtävissä / päivitettävissä (...tähän palataan myöhemmin...)
HELIA TIKO-05 11 (23) Esim. 1: Rakenteen yksinkertaistaminen TUOTERYHMÄ (tuoteryhmano, tuoteryhman_nimi) TUOTE (tuoteno, tuotteen_nimi, tuoteryhmano) CREATE VIEW W_TUOTTEET (tuoteno, nimi, ryhma) AS SELECT t.tuoteno, t.tuotteen_nimi, tr.tuoteryhman_nimi FROM tuote t LEFT JOIN tuoteryhma tr ON t.tuoteryhmano = tr.tuoteryhman; Esim. 2: Koodiston avaaminen HENKILO (hetu, nimi, osoite, sukupuoli) CREATE VIEW W_HENKILOT (hetu, nimi, osoite, sukupuoli) AS SELECT hetu, nimi, osoite, case sp when 'N' then 'nainen' when 'M' then 'mies' else 'muu' end FROM henkilo;
HELIA TIKO-05 12 (23) Vaarat Hallittavuuden katoaminen Näkymien luonti kevytmielisesti jokaiseen tarpeeseen kasvattaa näkymien määrän kontrolloimattomaksi Näkymien sarakkeiden nimeäminen toisistaan ja tietokannan tauluista poikkeavasti voi johtaa sekavuuteen Tehottomuus Kysely saattaa muodostua monesta päällekkäisestä kyselystä, joita RDBMS:n optimoijan voi olla vaikea optimoida Päivitettävyyden rajoitukset Näkymien suunnittelussa otettava huomioon päivitystarpeet ja valitun RDBMS:n tarjoamat mahdollisuudet
HELIA TIKO-05 13 (23) Suositus Tavoittele tietoriippumattomuutta! Älä viittaa ohjelmissa koskaan suoraan tauluihin! Käytä välissä näkymää
HELIA TIKO-05 14 (23) Käyttöoikeuksista ja tiedon suojauksesta Yhteiskäyttöisissä tietokannoissa on huolehdittava tiedon suojauksesta (tietojen luvaton luku, muuttaminen, tuhoaminen, ) Myös suojaukset on suunniteltava 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 TIKO-05 15 (23) Käyttäjätunnukset SQL-92 / -99 ei sano mitään käyttäjistä (users) se tuntee vain käsitteen <authorizationid> AuthorizationID 1. Käyttäjä (User) 2. Rooli (Role) + PUBLIC käsittää kaikki käyttäjät Käyttäjätunnusten luonti ja ylläpito yleensä DBA:n (tietokannan hoitajan) tehtävä
HELIA TIKO-05 16 (23) Tunnuksen luominen SQL-92 / -99 ei määrittele käyttäjän luontilausetta! Oraclen syntaksi Tunnuksen luonti: CREATE USER <user_name> IDENTIFIED BY <password> CREATE USER mina IDENTIFIED BY salasana1; Tunnuksen muuttaminen: ALTER USER <user_name> IDENTIFIED BY <password> ALTER USER mina IDENTIFIED BY salasana2; Tunnuksen poisto: DROP USER <user_name> DROP USER mina;
HELIA TIKO-05 17 (23) Oikeudet / Valtuudet SQL-standardi Oikeus Taulu Näkymä Sarake Select X X X Insert X X X Update X X X Delete X 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 TIKO-05 18 (23) Oikeuksien hallinta SQL:ssä Oikeuksien myöntö: GRANT <privilege_list> ON <object_name> TO <authorizationid_list> [WITH GRANT OPTION] GRANT SELECT, UPDATE ON tilaus TO vieno WITH GRANT OPTION; Oikeuksien poisto REVOKE [GRANT OPTION FOR] < privilege_list> ON <object_name> FROM < authorizationid _list> [CASCADE RESTRICT ] REVOKE SELECT, UPDATE ON tilaus FROM vieno;
HELIA TIKO-05 19 (23) Suojaustarkkuus? Tyypillisesti oikeudet myönnetään taulukohtaisesti Usein on tarvetta rajata käyttöoikeuksia 1. rivitasolla 2. saraketasolla Kaikki tiedonhallintaohjelmistot eivät tue saraketason suojausta Mikään tiedonhallintajärjestelmä ei (suoraan) tue rivitason suojausta Näkymät avuksi ts. oikeus annetaan taulun sijasta näkymään Näkymissä voidaan tarvittaessa rajata pois sekä rivejä että sarakkeita
HELIA TIKO-05 20 (23) Roolit SQL-92:ssa oikeudet voidaan antaa vain käyttäjä(tunnus)kohtaisesti SQL-99:ssä sekä monissa tiedonhallintajärjestelmissä oikeudet voidaan antaa ryhmä-/roolikohtaisesti Helpottaa suuresti käyttöoikeuksien ylläpitoa 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
HELIA TIKO-05 21 (23) Roolin myöntö: CREATE ROLE <role_name> CREATE ROLE bb_myyja; Roolin poisto: DROP ROLE <role_name> DROP ROLE bb_myyja; Roolin käyttö: Rooleille myönnetään oikeudet kuten käyttäjille + Käyttäjille (tai rooleille) myönnetään oikeudet (taulujen sijasta) rooleihin GRANT bb_myyja TO vieno;
HELIA TIKO-05 22 (23) Suojausten suunnittelu Lähtökohtana käyttäjien työtehtävät Tieto käyttäjäryhmä matriisit / -taulukot mikä käyttäjäryhmä tarvitsee mitäkin tietoa esim. Tieto käyttäjäryhmä taulukko: Bachelor s Books BB-myyjä Asiakas Asiakas S, I, U S, I, U (omat) Tilaus S, I, U S, I (omat) Tilausrivi S, I, U, D S, I (omat) Kirja S, I, U, D S Kirjan tekija S, I, U, D S S = Select I = Insert U = Update D = Delete
HELIA TIKO-05 23 (23) Tehtävä: Suunnittele roolit ja käyttöoikeudet oppilashallinnon tietokantaan OPE OPPILAS KURSSI KURSSI- TOTEUT. SUORI- TUS