Andmebaasid II praktikum Andmebaaside administreerimine Andmete sisestamine
KESKKOND, KASUTAJAD, ÕIGUSED
Mõisted Tabelid, vaated, trigerid, jpm on objektid Objektid on grupeeritud skeemi Skeemid moodustavad kataloogi Kataloogid asuvad klastris
SQL keskkond
Create schema (SQL 99) CREATE SCHEMA {<skeemi nimi> [<skeemi nimi>] AUTHORIZATION <authid>}[ <skeemi elementide loend>] skeemi elementide loend ::= CREATE TABLE käsud CREATE VIEW käsud.. GRANT käsud
Create schema (SQL Anywhere) Näiliseks ühilduvuseks nimeta skeem! CREATE SCHEMA AUTHORIZATION <uid> [tabelite loomise käsud vaadete loomise käsud õiguste andmise käsud] Skeem tekib objektide loomisega kasutajale!
Skeem Objektide kogum ühes andmebaasis Üks omanik <AuthorizationID> Kellele kuuluvad andmed andmebaasis ope?
AuthID??! Standardiväline: Operatsioonisüsteemi kasutajad Informix, DB2 Eraldi spetsiaalse käsuga loodud kasutajad Sybase, Oracle Lisaks sissekirjutatud süsteemsed kasutajad dba ja sys
Kasutajate haldus Kasutaja loomine: GRANT CONNECT TO <uid> [IDENTIFIED BY <password>] (Ka parooli muutmiseks) Loome kasutaja nimega tudeng parooliga tud: GRANT CONNECT TO tudeng IDENTIFIED BY 'tud' (võtke ühendust andmebaasiga kasutajana tudeng)
Milline seis nüüd? SELECT * FROM inimesed Permission denied SELECT * FROM dba.inimesed Permission denied Grupi liikmed näevad grupi liikme poolt tehtud tabeleid ilma omaniku liideseta
Kasutajagrupi haldus Loome grupi ehk laiendatud õigustega kasutaja (userextended role) GRANT GROUP TO dba (Saab määrata grupile liikmeid) GRANT MEMBERSHIP IN GROUP dba TO tudeng ( Konkreetne kasutaja pandi gruppi) Uuemates versioonides mõistet GROUP ei kasutata
Kasutajate grupid ja õigused Kasutaja kuulub gruppi: Näeb objekte (otse, kuna kuulub gruppi) Ei tarvitse saada midagi teha Kasutajal on õigused määratud: Ei näe otse objekte (ei kuulu gruppi) Saab teha õigustega määratud tegevusi
Õiguste andmine GRANT {õigused} ON <tabel> TO <uid> Õigused: ALL ALTER DELETE INSERT SELECT [(veerg1,...)] UPDATE [(veerg1,...)]
Õiguste andmise näiteid GRANT SELECT (eesnimi) ON inimesed TO tudeng SELECT eesnimi FROM inimesed SELECT * FROM inimesed ok! viga! (Kui pole antud vaatamisõigust kõigile veergudele, siis annab SELECT * FROM vea!) Selleks, et anda mingi õigus kõigile grupi liikmetele, tuleb anda õigus grupile GRANT SELECT ON inimesed TO dba (Nüüd näevad kõik grupi dba liikmed andmeid tabelist inimesed)
Grupi kaotamine, õiguste ära võtmine REVOKE MEMBERSHIP IN GROUP dba FROM tudeng Ühe kasutaja eemaldamiseks REVOKE GROUP FROM dba Grupi mõiste kaotamiseks, üksiti eemaldatakse kõik kasutajad grupist REVOKE SELECT ON inimesed FROM tudeng Tabeli vaatamise keelamiseks
Harjutage andmebaasiga (mitu kasutajat) Ühenduse võtmine Kirjete vaatamine, lisamine, muutmine Õigused: Kasutaja loomine Grupi loomine Grupi liikme lisamine Grupi liikme eemaldamine Grupi eemaldamine Ühenduse katkestamine
Näide harjutamiseks 1. Luua 2 kasutajate gruppi: grup1 ja grup2 2. Anda neile õigus luua tabeleid (resource) GRANT RESOURCE TO <kasutaja> 3. Luua mõlema kasutajaga (eelnevalt tuleb vastava kasutajaga isql avada) tabel Test milles on vaid varchar(30) väli ja sisestada kasutaja nimi (vastavalt kasutajale). 4. Seejärel lisada kasutaja tudeng mõlemasse gruppi ja anda õigus vaadata tabelit Test mõlemas grupis 5. Millise tulemuse annab tudengi päring SELECT * FROM Test?
TABELID
Tabelite liigid Baastabel (reaalselt eksisteeriv, sisaldab andmeid, andmeid saab muuta) Ajutine baastabel (sessioonipõhine) Vaade (lihtsustus, andmeid võib saada muuta) (edaspidi vaadet tabeliks ei kutsu!)
Süntaks CREATE TABLE <nimi> (...); Sulgudes (komaga eraldatult): Veergude definitsioonid Tabeli üldised kitsendused (constraints)
Veeru definitsioon Veeru nimi Veeru andmetüüp [NOT NULL] [DEFAULT <vaikeväärtus>] [kitsendused]
Andmetüübid (1) CHAR 1 sümbol VARCHAR (maksimaalne pikkus) (sümbolid = string) LONG VARCHAR (=TEXT) INTEGER - 4 baiti, SMALLINT - 2 baiti BIGINT - 8 baiti NUMERIC (kogupikkus, komatagune pikkus) FLOAT 4 baiti reaalarv
Andmetüübid (2) DATE, DATETIME, TIME BIT (NULL pole lubatud) BINARY (xx), LONG BINARY (ehk BLOB)
Vaikeväärtused CURRENT... CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, CURRENT_USER AUTOINCREMENT NULL (taastamiseks)
Vaikeväärtused (SQL Anywhere) CURRENT - alakriipsu asemel tühik! CURRENT TIMESTAMP,... TIMESTAMP Täiendavalt, NB! Ilma sõnata CURRENT! GLOBAL AUTOINCREMENT Replikeerimise jaoks
Veeru kitsendused [CONSTRAINT <nimi>] {UNIQUE PRIMARY KEY CHECK (tingimus)} NB! Tingimus sisaldab veeru nime kaugus INTEGER NOT NULL CHECK (kaugus > 50) (SQL Anywhere) veel lisaks: COMPUTE (avaldis) (Tekib read-only veerg)
Tabeli kitsendused Hõlmavad üldjuhul rohkem kui ühte veergu CONSTRAINT pk_isik PRIMARY KEY (eesnimi, perenimi, synnipaev); CONSTRAINT chk_palk CHECK (brutopalk > netopalk);
Ajutised tabelid CREATE GLOBAL TEMPORARY TABLE paha ( nimi VARCHAR(40) NOT NULL, CONSTRAINT pk_paha PRIMARY KEY (nimi)) ON COMMIT PRESERVE ROWS; INSERT INTO paha (nimi) VALUES ('Mari'); SELECT * FROM paha; Tehke läbi iseseisvalt. Andke erinevatele kasutajatele õigus vaatamiseks ja muutmiseks. Kas kasutaja näeb teise kasutaja poolt sisestatud andmeid?
Tabeli kustutamine DROP TABLE <nimi>;
Ülesanne nr 2 Lisada oma andmebaasi eelpool näidatud ajutine tabel paha. Luua 3 kasutajat ja anda neile õigus seda tabelit vaadata ja andmeid sisestada (teha kodus). Luua 4 tavalist tabelit ja sisestada andmed tabelitesse klubi ja isik: Isik Id integer not null default autoincrement primary key Eesnimi varchar (50) not null Perenimi varchar(50) not null Isikukood varchar(11) Klubi integer Unique (eesnimi, perenimi)
Ülesanne nr 2 (järg) Klubi Id integer not null default autoincrement primary key Nimi varchar(100) not null unique Turniir Id integer not null default autoincrement primary key Nimetus varchar(100) not null unique Toimumiskoht varchar(100) Alguskuupaev date not null Loppkuupaev date
Ülesanne nr 2 (järg) Partii Id integer not null default autoincrement primary key Turniir integer not null Algushetk datetime not null default current timestamp Lopphetk datetime Valge integer not null Must integer not null Valge_tulemus smallint check (valge_tulemus in (0,1,2)) Musta_tulemus smallint check (musta_tulemus in (0,1,2)) Kokkuvote varchar(5000)
MASSANDMED SISESTAMINE FAILIST
INPUT INPUT INTO <tabel> FROM <fail> FORMAT {ASCII DBASEIII FOXPRO...} [{veerud}] [DELIMITED BY <eraldaja>]; Formaadil ASCII on vaikimisi eraldaja koma (,) Eraldajaks võib olla suvaline string. Tab- eraldatud faili kasutamiseks kood 9
INPUT näited INPUT INTO klubi FROM 'klubi.txt' FORMAT ASCII DELIMITED BY '\x09'; INPUT INTO isik FROM 'isik.txt' FORMAT ASCII DELIMITED BY '\x09' (id, eesnimi, perenimi, klubi); Andmed Moodle is: Praktikumid -> Andmed (pakitud zip-failina)
Meeldetuletus Ärge unustage lisamast kolme kasutajat, kes võivad vaadata ja sisestada andmeid tabelisse paha. Vaadake mida need kasutajad sellest tabelist näevad.