1 Wykład 22.04.2004 Asercje, wyzwalacze i prawa. 2 Elementy aktywne bazy Chcielibyśmy, aby baza danych zapewniała nam pewne własności lub niezmienniki.

Slides:



Advertisements
Podobne prezentacje
Indeksy w bazie danych Oracle
Advertisements

Język C/C++ Funkcje.
Związki w UML.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Skrypty, procedury przechowywane i wyzwalane
Wzorce.
SQL – Strukturalny język zapytań
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Język SQL Część II.
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
MS Access 2003 Kwerendy Paweł Górczyński.
MS Access 2000 Kwerendy Piotr Górczyński 25/08/2001.
Bazy danych II Instrukcja INSERT Piotr Górczyński 25/08/2001.
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 7: Relacje i ograniczenia integralnościowe Język definiowania danych - DDL (Data Definition.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 8: Perspektywy i sekwencery.
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
ZSBD PL/SQL CZĘŚĆ 3 Wykład 5 Prowadzący: dr Paweł Drozda.
Język definicji danych (Data Definition Language)
Język definicji danych (Data Definition Language)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Wykład 2 Wojciech Pieprzyca
Bezpieczeństwo danych
Język SQL (Structured Query Language) DDL (Data Definition Language)
Bezpieczeństwo baz danych
Teoria relacyjnych baz danych
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
OPERACJA DZIELENIA W SQL
SQL – Structured Query Language (3)
Podstawy programowania
Podstawy programowania II
MySQL – ODBC - ACCESS.
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
SQL – Structured Query Language (1)
Linux - polecenia.
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
SQL - Structured Query Language
Jak zacząć w MS SQL? USE master; GO IF DB_ID (Nbaza') IS NOT NULL DROP DATABASE baza; GO CREATE DATABASE baza; GO USE baza; GO.
Wybrane zagadnienia relacyjnych baz danych
Systemy Zarządzania Bazami Danych
Komendy SQL do pracy z tabelami i bazami
Wykład 5: Zaawansowany SQL
PL/SQL – dalsza wędrówka
SQL – część II.
Projektowanie bazy danych
Łódź 2008 Banki danych WYKŁAD 2 dr Łukasz Murowaniecki T-109.
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Systemy Baz Danych Wykład III
Michał Krawczykowski kl. IIIB
Programowanie strukturalne i obiektowe C++
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
Projektowanie relacyjnych baz danych – diagramy związków encji
1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6.
Komendy SQL do pracy z danymi
SQL – JDD (DDL) Język definicji danych (Data Definition/Description Language)
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Bazy Danych Wprowadzenie
Polecenie chmod change mode - zmiana atrybutu. chmod [opcje] uprawnienia plik Opis klas użytkowników u - użytkownik (user) g - grupa (group) o - inni.
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
1 Definicja danych: Do utworzenia tabeli służy instrukcja CREATE TABLE, wymagająca podania nazwy tworzonej tabeli, nazwy każdej kolumny w tej tabeli, typu.
Temat: Tworzenie bazy danych
Widoki (views) - Perspektywy:
DDL język definiowania danych
Strukturalny język zapytań SQL - historia
Technologie Informacyjne Bazy danych
Własności relacji: Baza danych jest zbiorem relacji, o następujących własnościach: każda relacja w bazie danych jest jednoznacznie określona przez swoją.
Haskell Składnia funkcji.
Zapis prezentacji:

1 Wykład Asercje, wyzwalacze i prawa

2 Elementy aktywne bazy Chcielibyśmy, aby baza danych zapewniała nam pewne własności lub niezmienniki. Chcielibyśmy mieć możliwość zapisania tych własności do schematu bazy a baza powinna sama zapewniać, że cały czas będą spełnione. Te elementy schematu, które nam te własności zapewniają można określić jako elementy aktywne. Do elementów aktywnych zaliczamy:

3 Elementy aktywne bazy cd. 1 Klucze (primery key,unique) Integralność referencyjną i klucze obce (foreign key) Więzy wartości atrybutów –Więzy NOT-NULL –Więzy check –Więzy dziedziny

4 Elementy aktywne bazy cd. 2 Więzy globalne –Więzy check deklarowanie więzów dla pojedynczej relacji check ( ) –Asercje (assertion) –Wyzwalacze (triggers)

5 Asercje Po co nam asercje? Wszystkie dotychczasowe więzy dotyczyły pojedynczej krotki (więzy wartości atrybutów), ewentualnie prostych związków między krotkami z różnych relacji (więzy integralności) a my czasami chcielibyśmy napisać warunek, który dotyczy całej relacji lub paru relacji.Czasami taki warunek dałoby się napisać używając więzów check dotyczących relacji zapisanych w schematach relacji, których ten warunek dotyczy, jednak przy bardziej

6 Asercje skomplikowanych warunkach zapisanie takiego samego warunku używając samych więzów check może być bardziej pracochłonne oraz znacznie łatwiej popełnić błąd w wyniku którego baza nie będzie spełniała warunków, które wg. nas powinna spełniać. Co więcej niektórych warunków nie da się w ten sposób zapisać. Wynika to np. z różnic między asercjami a więzami krotkowymi dotyczącymi sprawdzania, kiedy są spełnione warunki których dotycza.

7 Składnia asercji CREATE ASSERTION CHECK ( ) Gdzie musi być typu logicznego Przykład Przyjmijmy, że mamy w bazie następujące relacje: Dyrektor(nazwisko:varchar(10),adres:varchar(10),cert:varcha r(10),cenaSieci:int) Studio(nazwa:varchar(10),adres:varchar(10),prezC:varchar (10) references Dyrektor(cert)) I chcielibyśmy, aby szefem studia była osoba, której sieć ma wartość co najmniej 10 mln $

8 Asercje Asercja opisująca ten warunek może wyglądać następująco: 1.CREATE ASSERTION BogatyPrez CHECK 2.(NOT EXISTS 3.(SELECT * 4.FROM Studio,Dyrektor 5.WHERE prezC=cert AND cenaSieci< ));

9 Asercje Zauważmy, że gdybyśmy chcieli zdefiniować to samo używając tylko więzów krotkowych i napisalibyśmy następująco definicję tabeli Studio: 1.CREATE TABLE Studio ( 2.nazwa CHAR(30) PRIMARY KEY, 3.adres VARCHAR(255), 4.prezC INT REFERENCES Dyrektor(cert), 5. CHECK (prezC NOT IN 6.(SELECT cert FROM Dyrektor 7.WHERE cenaSieci< ) 8.));

10 Asercje to (co na początku może budzić duże zdziwienie) nie uzyskamy tego samego efektu co przy pomocy asercji.Dzieje się tak ponieważ warunek, który jest opisany w więzie krotkowym, będzie sprawdzany przy wstawianiu i modyfikacji krotki tylko z relacji Studio. Przy zmianach w relacji Dyrektor więzy krotkowe w relacji Studio nie będą sprawdzane.

11 Porównanie krotkowych check i asercji Typ więzówKiedy uruchamiane Krotkowe check Przy wstawianiu lub zmianie wartości w krotce (NIE przy usuwaniu krotki z relacji) tylko z tej relacji Asercje Przy dowolnej modyfikacji relacji (wstawianie, modyfikacja lub usuwanie dowolnej krotki) której dotyczy ta asercja

12 Asercje Tak więc jeśli uczynimy kogoś prezesem studia a potem będziemy chcieli obniżyć wartość jego sieci to asercja na to nie pozwoli natomiast więz krotkowy tak, ponieważ on jest sprawdzany przy modyfikacji krotki z relacji Studio a nie krotki z relacji Prezes. DLACZEGO: ponieważ więzy krotkowe powinny dotyczyć krotek z danej relacji a w tej relacji nic się nie zmieniło. Ten sposób traktowania więzów krotkowych wynika głównie z wymogów wydajnościowych! Wyobraźmy sobie, jaką pracę musiałaby wykonać baza, gdyby musiała zapewnić wiele więzów krotkowych podobnych temu.

13 Asercje UWAGA NA MARGINESIE: można w bazie wymusić spełnienie warunku opisanego w asercji używając tylko więzów krotkowych. Trzeba po prostu dodać odpowiedni więz do relacji Prezes (łatwe ćwiczenie ). INNY PRZYKŁAD. Mamy relację: Film(tytuł:varchar(10),rok:date,długość:int,czyKolor:boolean, nazwaStudia:varchar(10),producentC:varchar(10)); I chcielibyśmy, aby długość wszystkich filmów w danym studiu miała co najmniej minut.

14 Asercje Asercja wygląda następująco: 1.CREATE ASSERTION SumDlugość 2. CHECK (10000 <= ALL 3. (SELECT SUM(długość) FROM Film 4. GROUP BY nazwaStudia)); W tym przypadku istnieje silna pokusa, aby zamiast tworzyć asercję dodać linijki 2-4 jako więz krotkowy do relacji Film.Wydaje się,że również zadziałałoby. Jednak również w tym wypadku zostalibyśmy niemile zaskoczeni.Zauważmy bowiem, co mogłoby się zdarzyć przy usuwaniu filmów!!

15 Po co wyzwalacze? Czasami chcielibyśmy reagować w bardziej aktywny sposób na sytuacje, gdy dochodzi do naruszenia jakiegoś warunku lub niezmiennika niż tylko nie dopuszczając do tych modyfikacji bazy danych, która ten warunek narusza (być może dla pewnych sytuacji umiemy temu zaradzić). Poza tym czasami to my chcielibyśmy decydować, kiedy warunek ma być sprawdzany (choćby ze względu na wydajność), a w przypadku np. asercji to system o tym decyduje. Poza tym asercje są „drogie”. Dlatego chcielibyśmy mieć coś „tańszego” od asercji, co pozwala nam na nakładanie pewnych więzów na bazę.

16 Cechy wyzwalaczy Wyzwalacze są testowane tylko przy zajściu określonego zdarzenia (dołączanie, usuwanie, modyfikacja krotki) określonego przez programistę (projektanta bazy) (w przypadku asercji i więzów krotkowych decyduje o tym SZBD) Testują warunek w chwili zajścia zdarzenia (a nie uprzedzają go) Jeśli warunek zostanie spełniony to przetwarzana jest akcja związania z wyzwalaczem

17 Składnia wyzwalaczy CREATE TRIGGER {BEFORE|INSTEAD OF |AFTER} [OF ] ON REFERENCING {OLD|OLD_TABLE} AS nazwa_zmiennej1 {NEW|NEW_TABLE} AS nazwa_zmiennej2 WHEN ( ) //akcja [FOR EACH ROW]

18 Cechy wyzwalaczy Akcja może być wykonana przed (BEFORE), po (AFTER) lub zamiast (INSTEAD OF) zdarzenia W akcji dostępne są wartości sprzed (OLD, OLD_TABLE) zajścia zdarzenia jak i nowe (NEW,NEW_TABLE) wartości Można określać czy akcja ma być wykonywana dla każdej modyfikowanej krotki (FOR EACH ROW) czy tylko raz dla wszystkich krotek zmodyfikowanych w pojedynczej operacji

19 Przykład wyzwalacza Uniemożliwienie obniżenie ceny sieci: 1.CREATE TRIGGER CenaSieciWyzw 2.AFTER UPDATE OF cenaSieci ON Dyrektor 3.REFERENCING 4.OLD AS Stara 5.NEW AS Nowa 6.WHEN (Stara.cenaSieci > Nowa.cenaSieci) 7.UPDATE Dyrektor SET cenaSieci= Stara.cenaSieci 8. WHERE cert = Nowa.cert 9.FOR EACH ROW

20 Inny przykład wyzwalacza Zabronienie spadku średniej ceny sieci poniżej CREATE TRIGGER WyzwalaczSrCenySieci 2.INSTEAD OF UPDATE OF cena sieci ON Dyrektor 3.REFERENCING 4.OLD_TABLE AS Stara 5.NEW_TABLE AS Nowa 6.WHEN ( <= (SELECT AVG(cenaSieci) FROM 7.((Dyrektor EXCEPT Stare) UNION Nowe)) 8.DELETE FROM Dyrektor WHERE (nazwisko,adres,cert,cenaSieci) IN Stare; 9.INSERT INTO Dyrektor (SELECT * FROM Nowe);

21 Prawa Dowolny SZBD powinien zapewniać również poufność naszych danych oraz możliwość regulowania oraz limitowania dostępu do danych. Dlatego w SQL-u zdefiniowano tzw. prawa, które właściciel obiektu może dać (GRANT) lub odebrać (REVOKE) innym użytkownikom. Istnieje też możliwość przekazania otrzymanych wcześniej praw. UWAGA: użytkownicy, są tworzeniu przed DBA i są oni właścicielami obiektów które stworzyli (czyli podobnie jak np. w unix-owym systemie plików).

22 Składnia do nadawania praw GRANT ON TO [WITH GRANT OPTION] Prawa, które można nadać to: SELECT, INSERT, DELETE, UPDATE, REFERENCES,USAGE (można też ALL PRIVILEGES) REFERENCES dotyczy możliwości odwołania się do danej struktury w więzach integralności (np. asercje,więzy integralności referencyjnej). USAGE nadaje się dla dziedzin i innych elementów schematu innych niż relacje i asercje.

23 Składnia GRANT ALL PRIVILEGES – skrót, dzięki któremu można przekazać wszystkie prawa, które posiada się względem danego obiektu. W miejsce nazwy użytkownik można również użyć słowa PUBLIC. Wtedy przekaże się prawa wszystkim użytkownikom w bazie danych (obecnym w chwili nadawania praw jak i tym, którzy zostaną stworzeni późnej).

24 Przykłady nadawania praw GRANT SELECT,INSERT ON Studio TO mariusz WITH GRANT OPTION; GRANT REFERENCES(nazwa), DELETE ON Studio TO mariusz; GRANT USAGE ON DOMAIN Imiona TO jacek,placek WITH GRANT OPTION;

25 Składnia REVOKE Odbieranie nadanych wcześniej praw (innych niż GRANT) REVOKE ON FROM [CASCADE|RESTRICT]; Odbieranie prawa GRANT REVOKE GRANT OPTION FOR ON FROM [CASCADE|RESTRICT]

26 Prawa Semantyka CASCADE i RESTRICT w zdaniu REVOKE jest identyczna jak ich semantyka w zdaniu DROP TABLE. PRZYKŁADY: REVOKE SELECT, INSERT ON Studio FROM mariusz CASCADE; REVOKE GRANT OPTION FOR DELETE ON Studio FROM mariusz RESTRICT;

27 REVOKE Podobne jak w przypadku GRANT w zdaniu REVOKE mogą wystąpić ALL PRIVILEGES oraz PUBLIC Jeśli ktoś otrzymał takie samo prawo od wielu użytkowników to odebranie praw przez jednego użytkownika nie powoduje odebrania tego prawa przyznanego przez innych użytkowników (czyli dopiero, gdy wszystkie osoby odbiorą to prawo zostanie ono utracone)

28 REVOKE Po wykonaniu następującego ciągu instrukcji: GRANT INSERT ON Film TO mariusz; GRANT INSERT(tytul) ON Film TO mariusz; REVOKE INSERT ON Film FROM mariusz; użytkownik mariusz nadal posiada prawo INSERT(tytul) ON Film, ponieważ odebranie praw ogólniejszych nie zabiera podzbioru tych praw nadanego osobnym poleceniem.

29 Diagram GRANT Root INSERT ON Film ** Mariusz INSERT ON Film Mariusz INSERT ON Film(Tytuł)

30 REVOKE Po wykonaniu następującego ciągu instrukcji: Root: GRANT INSERT ON Film TO mariusz WITH GRANT OPTION; Mariusz: GRANT INSERT ON Film TO jacek; Root:REVOKE GRANT OPTION FOR INSERT ON Film FROM mariusz CASCADE; użytkownik mariusz nadal posiada prawo INSERT ON Film, nie posiada już jednak prawa GRANT. Użytkownik jacek nie posiada już natomiast prawa INSERT ON Film (ponieważ zostało mu one nadane przez mariusz dzięki prawu GRANT, którego został on potem pozbawiony).

31 Diagramy GRANT Root INSERT ON Film ** Jacek INSERT ON Film Mariusz INSERT ON Film * Mariusz INSERT ON Film