446 7. SYSTEMOWE ASPEKTY JĘZYKA SQL
PRZYKŁAD 7.18
Będziemy kontynuować rozważania na temat rezerwowania miejsc, rozpoczęte w przykładach 7.16 i 7.17. Przy założeniu, że funkcja wykonuje się przy poziomie izolacji - odczyt powtarzalny, miejsce, które było dostępne przy pierwszym wykonaniu zapytania, pozostaje niezajęte przy ponawianiu zapytania.
Załóżmy jednak, że relacja Rejsy zmieniła się. Na przykład mogły zostać zmienione samoloty i w ten sposób mogła się zwiększyć liczba dostępnych miejsc albo niektóre rezerwacje mogły zostać na przykład odwołane. Wówczas w odpowiedziach na kolejne zapytania mogą się pojawić nowe krotki z dostępnymi miejscami.
0
7.2.7. Ćwiczenia do podrozdziału 7.2
Ćwiczenie 7.2.1. Wszystkie ćwiczenia z tego rozdziału dotyczą następujących dwóch relacj i:
Produkt (producent, model, typ)
PC (model, szybkość, ram, hd, cd, cena)
Należy naszkicować programy wykonujące poniższe zadania, stosując instrukcje SQL osadzane w dowolnym języku podstawowym. Należy pamiętać o korzystaniu z instrukcji coMMZT i RoLLaACK wszędzie tam, gdzie jest to niezbędne, oraz zaznaczeniu we właściwych miejscach, że transakcje są tylko do odczytu.
a) Dla danych wartości szybkości i rozmiaru RAM (jako argumentów funkcji) należy wyszukać wszystkie PC o tej charakterystyce oraz wydrukować numer modelu i cenę każdego z nich.
*b) Dysponując numerem modelu, należy usunąć go z obu relacji Produkt i PC.
c) Dysponując numerem modelu, należy zwiększyć jego cenę o 100 $.
d) Przy zadanych wartościach: producenta, numeru modelu, szybkości, rozmiaru RAM, rozmiaru dysku twardego, szybkości CD oraz cenie należy stwierdzić, że ten model nie występuje w bazie. Jeśli jednak występuje, to należy podać komunikat dla użytkownika. Jeśli takiego modelu nie ma w bazie, to należy wstawić dane o tym produkcie do tabel Produkt i Pc.
!Ćwiczenie 7.2.2. Dla każdego programu z ćwiczenia 7.2.1 należy omówić problem niepodzielności, który może wystąpić podczas awarii systemu powstałej w trakcie przetwarzania tego programu.
!Ćwiczenie 7.2.3. Załóżmy, że transakcja T polega na wykonaniu jednego z czterech programów z ćwiczenia 7.2.1, a inne transakcje polegają na jednoczesnym wykonaniu tego samego programu lub któregoś z pozostałych. Jakie zachowania transakcji T są możliwe do zauważenia przy wykonywaniu na poziomie izolacji READ UNCOMMITTED, a które nie wystąpią przy poziomie izolacji SERIALIZABLE? Należy po kolei rozważyć wszystkie programy z ćwiczenia 7.2.1.
7.3. ŚRODOWISKO SQL 447
*!!Ćwiczenie 7.2.4. Załóżmy, że transakcja T jest funkcją nieskończoną, która co godzinę sprawdza, czy w bazie danych występuje PC o szybkości 200 i cenie poniżej 1000 $. Jeśli znajdzie się taki PC, to funkcja wypisuje komunikat i kończy dzialanie. W tym czasie mogą działać inne transakcje, które wykonują programy z ćwiczenia 7.2.1. Dla każdego z czterech poziomów izolacji: sekwencyjnego, powtarzalnego odczytu, odczytu zatwierdzonego i odczytu niezatwierdzonego należy ola-eślić wynik transakcji T.
7.3. Środowisko SQL
W bieżącym rozdziale omówimy systemy zarządzania bazami danych w sposób możliwie najszerszy. Zobaczymy, w jaki sposób definiuje się bazy danych, a następnie organizuje katalogi, klastry i schematy. Dowiemy się także, w jaki sposób łączy się programy z tymi danymi, na których mają być wykonywane. Wiele tych szczegółów zależy od konkretnej implementacji, a więc skupimy uwagę na podstawowych zasadach, które są objęte standardem SQL2.
7.3.1. Środowiska
Środowisko SQL stanowi ramę dla danych i operacji SQL, które na tych danych mogą być wykonywane. W praktyce środowisko SQL utożsamia się z konkretną instalacją systemu zarządzania baz danych. Jeśli na przykład firma ABC kupuje licencję systemu zarządzania bazami danych SQL firmy Dandy-DB i uruchamia ją na swoich systemach komputerowych ABC, to tak działający system nazywamy środowiskiem SQL.
Wszystkie omówione dotychczas elementy bazy danych: tabele, perspektywy, dziedziny i asercje są definiowane w środowisku SQL. Tworzą one hierarchiczne struktury i każda z nich odgrywa właściwą sobie rolę w systemie. Struktury definiowane według standardu SQL2 zostały przedstawione na rys. 7.1 I .
Oto ich krótka charakterystyka.
1. Schematy". Są to zbiory tabel, perspektyw, asercji, dziedzin i innych typów danych, o których nie wspominaliśmy (ale zostały wymienione w ramce zatytułowanej „Co jeszcze należy do schematu?" w p. 7.3.2). Schematy stanowią podstawowe jednostki w systemie i są pojęciowo najbliższe bazom danych, ale są czymś węższym niż baza danych, co wyniknie w punkcie 3.
Zauważmy, że w tym kontekście schemat oznacza schemat bazy danych, a nie relacji.
448
7. SYSTEMOWE ASPEKTY J~ZYKA SQL
Środowisko = Instalacja DBMS
Katalog
Klaster = maksymalny zakres
działań na bazie danych Schemat
Katalog
Schemat
RYSUNEK 7.11
Organizacja elementów bazy danych w środowisku
2. Katalogi. Są to zbiory schematów. Tworzą one jednostki jednolite terminologicznie. W każdym katalogu może znajdować się wiele schematów, każdy z nich w danym katalogu musi mieć jednoznaczną nazwę. Ponadto każdy katalog zawiera specjalny schemat nazwany INFORMATION SCHEMA, który obejmuje informacje o schematach należących do danego katalogu.
3. Klastry. Tworzą je zbiory katalogów. Każdemu użytkownikowi jest przypisany klaster, czyli zbiór tych katalogów, do których ma dostęp (w podrozdziale 7.4 opisano, w jaki sposób organizuje się dostęp do katalogów oraz nadzór nad innymi elementami). W SQL2 nie ma precyzyjnej definicji klastrów, na przykład nie wiadomo, czy może się zdarzyć, że klastry różnych użytkowników się nakładają, a jednocześnie nie są identyczne. Z punktu widzenia użytkownika klaster określa maksymalny zakres dla wykonania zapytania, a więc w pewnym sensie to właśnie klaster stanowi bazę danych dostępną dla użytkownika.
~.3. śxoDOmsKO sQL 449 7.3.2. Schematy
Najprostsza postać deklaracji schematu zawiera następujące elementy:
1. Słowo kluczowe CREATE SCHEMA. 2. Nazwa schematu.
3. Lista deklaracji elementów schematu: podstawowe tabele, perspektywy, asercje i dziedziny.
Schemat deklaracji jest więc następujący:
CREATE sCHEMA <nazwa schematu> <deklaracje elementów>
Deklaracje poszczególnych elementów zostały omówione w podrozdziałach 5.7, 5.8 i w rozdziale 6. Poza tym istnieją jeszcze inne rodzaje elementów schematu, które zostały wymienione w kolejnej ramce zatytułowanej „Co jeszcze należy do schematu?".
PRZYKŁAD 7.19
Można zadeklarować schemat obejmujący pięć relacji danych o filmach, z których korzystaliśmy w wielu przykładach, oraz inne elementy, takie jak perspektywy. Na rysunku 7.12 przedstawiono szkic deklaracji tego schematu.
CREATE SCHEMA SchematFilm
CREATE DOMAIN DziedzinaCert . . . jak w przykładzie 6.8 Deklaracje innych dziedzin
CREATE TABLE GwiazdaFilmowa . . . jak na rys. 6.4 Instrukcje tworzenia czterech innych tabel
CREATE VIEW FilmProd . . . jak w przykładzie 5.40 Deklaracje innych perspektyw
CREATE ASSERTION BogatyPrez . . . jak w przykładzie 6.10
RYSUNEK 7.12 Deklaracja schematu
O
Nie ma konieczności zadeklarowania całego schematu od razu. Można go bowiem aktualizować lub dodawać do niego nowe elementy, stosując znane już instrukcje CREATE, DROP lub ALTER, np. instrukcja CREATE TABLE, po której umieszcza się nazwę, stanowi definicję nowej tabeli w schemacie. Jedynym problemem może być określenie, do którego schematu ta nowa tabela ma zostać dołączona. Przy usuwaniu lub aktualizacji tabeli lub innego elementu schematu także może powstać problem identyfikacji schematu, ponieważ nazwy elementów mogą się powtarzać w rożnych schematach, a elementy są całkiem różne.
450
7. SYSTEMOWE ASPEKTY JĘZYKA SQI,
Schemat bieżący można modyfikować, stosując instrukcję SET SCHEMA. Na przykład:
SET SCHEMA SchematFilm;
powoduje, że od momenfu wykonania tej instrukcji schemat z rys. 7.12 staje się schematem bieżącym. Wówczas wszystkie instrukcje modyfikujące elementy schematu dotyczą schematu bieżącego, czyli w tym przypadku schematu bazy filmowej.
Co jeszcze należy do schematu?
Poza wspomnianymi już tabelami, perspektywami, asercjami i dziedzinami istnieją jeszcze cztery rodzaje elementów schematu. Przede wszystkim w schemacie można zdefiniować podstawowy zbiór znaków, który zawiera symbole oraz sposoby ich kodowania. Najbardziej znany jest zbiór znaków ASCII, ale w implementacji SQL mogą występować rożne inne możliwości, na przykład alfabet rożnych języków obcych.
Poza tym w schemacie określa się porzc~dek znaków. W punkcie 5.1.3 mówiliśmy już, że teksty są porządkowane leksykograficznie, przy czym wiadomo, co oznacza relacja mniejszości < między dwoma znakami. Porzą dek określa, który znak jest „mniejszy" niż inny. Można na przykład korzystać z porządku określonego przez kod ASCII albo można traktować litery małe i wielkie jako te same i nie porównywać znaków innych niż litery.
Do schematów można dołączać tłumaczenia, które umożliwiają zamianę znaków z jednego alfabetu na inny. Ostatni rodzaj elementów stanowi instrukcja GRANT, która umożliwia określanie praw dostępu do danych udzielanym użytkownikom. Określanie praw dostępu zostanie omówione w podrozdziale 7.4.
7.3.3. Katalogi
Tak jak elementy schematu są definiowane dla określonego schematu, wewnątrz określonego katalogu definiuje się przypisane mu schematy. W zasadzie sposób tworzenia i organizacji katalogów powinien być zbliżony do sposobu tworzenia i organizacji schematów. Jednakże w standardzie SQL2 nie przewidziano takiej instrukcji
CR~ATE CATALOG <nazwa katalogu>
po której wymieniałoby się listę nazw schematów należących do katalogu. Za to w SQL2 przewidziano instrukcję
SET CATALOG <nazwa katalogu>
7.3. ŚRODOWISKO SQL 451
Można dzięki temu ustalić, który katalog jest „bieżący"; definiowane schematy zostają przypisane do katalogu bieżącego, a modyfikacje schematów dotyczą schematów należących do katalogu bieżącego, dzięki czemu unika się konfliktu nazw.
7.3.4. Klient-serwer w środowisku SQL
Środowisko SQL jest czymś więcej niż tylko zbiorem katalogów i schematów. Zawiera ono również elementy, które wspierają działanie na bazach danych wpisanych w schematy i katalogi. W środowisku SQL istnieją dwa ważne typy procesów: klient SQL i serwer SQL. Serwer służy do wykonywania działań na elementach bazy danych, a klient umożliwia połączenie użytkownika z serwerem. Jak można się spodziewać, serwery SQL są instalowane na komputerach o wielkiej mocy obliczeniowej i dużej pamięci pomocniczej i przechowuje się tam zbiory baz danych, a z kolei klient jest instalowany na stacjach roboczych oddalonych od serwem. Jednakże można oba procesy i serwer i klienta posadowić na tym samym komputerze.
Pełna nazwa elementów schematu
Pod względem formalnym nazwa elementu schematu bazy danych jest złożona z nazwy katalogu, nazwy schematu i nazwy własnej elementu, które to fragmenty są oddzielane kropką. A zatem pełna nazw tabeli Film ze schematu schematFilm zapisanego w katalogu KatalogFilm wyglą da następująco:
KatalogFilm.SchematFilm.Film
Jeśli katalog jest standardowy lub bieżący, to można opuścić ten fragment nazwy. Jeśli element należy również do schematu standardowego lub bieżącego, to można pominąć i ten fragment nazwy, a więc można odwoływać się do elementu tylko poprzez jego nazwę własną. Jeśli jednak trzeba się odwołać do elementu nie należącego do bieżącego środowiska, to jest to możliwe dzięki podaniu pełnej nazwy.
7.3.5. Połączenia
Jeśli trzeba uruchomić program w języku SQL z komputera, na którym zainstalowano klienta SQL, to połączenie między klientem a serwerem można utworzyć, wykonując następującą instrukcję SQL: .
CONNECT TO <nazwa serwera> AS <nazwa połączenia>
4S2 7. SYSTEMOWE ASPEKTY J~ZYKA SQL
Nazwa serwem zależy od konkretnej instalacji. Można ją zastąpić słowem DEFAULT i wówczas instrukcja spowoduje dołączenie komputera klienta do tego serwera, który jest specyfikowany jako domniemany.
Nazwa połączenia może być istotna. Możemy się bowiem chcieć do niej odwoływać, jako że SQL2 umożliwia jednoczesne otwarcie kilku połączeń, ale tylko jedno jest aktywne w danej chwili. Aby przełączać się pomiędzy połączeniami stosujemy instrukcję SET CoNNECTION, np. przełączenie się do połączenia connl może być spowodowane w następujący sposób:
SET CONNECTION connl;
Połączenie aktywne uprzednio przechodzi w stan uśpienia aż do chwili ponownego uaktywnienia na skutek innego polecenia SET CONNECTION, w którym jest jawnie podana jego nazwa.
Z nazwy połączenia korzysta się również przy jego usuwaniu. Na przykład połączenie connl można unieważnić, korzystając z następującej instrukcji:
DISCONNECT connl;
Wykonanie tej instrukcji powoduje zakończenie połączenia connl, w tym przypadku nie jest ono w stanie uśpienia i nie można go już uaktywnić.
Jeśli jednak mamy pewność, że nie zajdzie potrzeba odwołania się do połączenia, to nie trzeba go nazywać i można AS i nazwę pominąć w instrukcji CoNNECT. Można także wcale nie korzystać z instrukcji CoNNECT To. Jeśli wydamy jakiekolwiek polecenie SQL, to system połączy stację klienta ze standardowym serwerem SQL.
Środowisko
Moduł Agent SQL
Połączenie Klient SQL Serwer SQL
Sesja
RYSUNEK 7.13 Współdziałanie klienta i serwera
7.3. ŚRODOWISKO SQL 453
7.3.6. Sesje
Działania w języku SQL, które są przetwarzane w trakcie połączenia, tworzą sesję. Istnienie sesji jest nieodłączne od połączenia, które ją rozpoczęło. Na przykład, jeśli połączenie przechodzi w stan uśpienia, to sesja także jest w uśpieniu i reaktywacja połączenia przez instrukcje SET CoNNECTZON uaktywnia także uśpioną sesję. Na rysunku 7.13 zostały przedstawione połączenie i sesja jako dwa elementy łącza między klientem a serwerem.
W każdej sesji istnieje katalog bieżący i schemat bieżący w ramach tego katalogu. Można je określić, wykonując instrukcje SET SCHEMA lub SET CATALOG, które omówiliśmy w p. 7.3.2 i 7.3.3. W każdej sesji istnieje także autoryzowany w niej użytkownik, co zostanie opisane w podrozdziale 7.4.
7.3.7. Moduły
ll~loduzz oznacza program użytkowy zapisany w języku SQL2. W standardzie SQL2 zostały wyróżnione trzy rodzaje modułów i każda implementacja powinna umożliwiać korzystanie co najmniej z jednego z nich.
1. Generyczny interfejs SQL. Użytkownik może wprowadzać instrukcje SQL bezpośrednio z terminala i są one natychmiast uruchamiane na serwerze. W tym trybie każda pojedyncza instrukcja stanowi moduł. Taki właśnie tryb przetwarzania braliśmy pod uwagę w przedstawianych przykładach, ale w praktyce korzysta się z niego raczej rzadko.
2. SQL osadzony. Ten styl programowania został omówiony w podrozdziale 7.1; tam instrukcje SQL byty zapisywane wewnątrz programów utworzonych w języku podstawowym i te wstawki SQL poprzedza się instrukcją ExEC SQL. Zakłada się, że instrukcje SQL są zastępowane przez preprocesor wywołaniami funkcji bibliotecznych i w stosownej chwili są one wykonywane przez system SQL w trakcie przetwarzania programu podstawowego.
3. Prawdziwe moduly. Najczęściej w języku SQL stosuje się moduły, które stanowią zbiory funkcji lub procedur, część z nich jest zapisana w języku podstawowym, część w SQL. Komunikują się one ze sobą za pośrednictwem parametrów lub zmiennych dzielonych.
Wykonanie modulu nazywa się agentem SQL. Na rysunku 7.13 przedstawiono moduł i agenta jako jeden element, uruchamiający klienta SQL po to, by utworzyć połączenie. Należy pamiętać jednak o tym, że różnica między modulem a agentem jest analogiczna do różnicy między programem a procesem, pierwszy z nich jest kodem, a drugi wykonaniem tego kodu.
4S4 7. SYSTEMOWE ASPEKTY JĘZYKA SQL
7.4. Bezpieczeństwo i autoryzacja użytkownika w języku SQL2
Wskazania SQL2 dotyczące bezpieczeństwa zawierają między innymi zalecenie, aby użytkownicy mieli identyfikatory (ID) autoryzujc~ce, najczęściej jest to po prostu nazwisko. Istnieje także wyróżniony identyfikator PUBLIC, z którego może korzystać dowolny użytkownik. Identyfikatorom przypisuje się prawa, których struktura pokrywa się z prawami systemu plików i systemu operacyjnego. Na przykład w systemie UNIX w zasadzie określa się trzy rodzaje praw: czytania odczytu, pisania i wykonywania. Taka lista praw ma sens, ponieważ w systemie UNIX chroni się pliki, a wymienione trzy prawa dobrze określają działania, które można wykonywać na plikach. Jednakże bazy danych są bardziej złożone niż system plików, a więc struktura praw w języku SQL2 jest proporcjonalnie bardziej złożona.
Najpierw dowiemy się, jakie prawa można w języku SQL2 określać do poszczególnych elementów baz danych. Potem opiszemy, w jaki sposób przypisuje się je użytkownikom (identyfikowanym przez ID). W końcu dowiemy się, jak skasować pewne prawa.
7.4.1. Prawa
SQL2 określa następujące prawa:
1. SELECT (wybór)
2. INSERT (wstawianie) 3. DELETE (USUwanle) 4. UPDATE (aktualizacja)
5. REFERENCES (odwołanie się) 6. USAGE (stosowanie)
Pierwsze cztery prawa są określane dla relacji, czyli albo dla tabeli podstawowej, albo dla perspektywy. Zgodnie z nazwami zapewniają one możliwość wykonywania kolejno: zapytań o krotki relacji (select from), wstawiania nowych krotek, usuwania krotek oraz zmiany wartości w krotkach danej relacji. Nie można wykonywać modułu zawierającego instrukcje SQL, jeśli nie określi się praw wykonywania tych instrukcji na relacjach, których mają dotyczyć. Wkrótce dowiemy się, w jaki sposób określać prawa dla moduków.
Z kolei prawo REFERENCES dotyczy możliwości odwołania się do danej struktury w więzach integralności. Więzy można zadawać w dowolny sposób opisany w rozdziale 6, czyli mogą to być asercje, więzy atrybutowe lub krotkowe, lub też więzy integralności referencyjnej. Więzów nie sprawdza się, jeśli nie nada się praw REFERENCES na schematy, z których pobiera się dane sprawdzane w więzach.
7.4. BEZPIECZEŃSTWO I AUTORYZACJA UŻYTKOWNIKA W ,lĘZYKLJ SQL2 4SS
Prawo usAGE określa się dla dziedzin i elementów schematu innych niż relacje i asercje (p. 7.3.2) i umożliwia ono korzystanie z tych elementów w deklaracjach.
Dla trzech praw: INSERT, UPDATE i REFERENCES argumentem może być pojedynczy atrybut. Wówczas prawo dotyczy tylko tego jednego atrybutu. Można określić kilka praw na pojedynczych atrybutach, w ten sposób można autoryzować dostęp do pewnych podzbiorów kolumn tabeli.
PRZYKŁAD 7.20
Zastanówmy się, jakie prawa są potrzebne, aby wykonać instrukcję wstawiania z rys. 5.12; została ona powtórzona na rys. 7.14. Po pierwsze jest to wstawienie do relacji studio, a zatem trzeba mieć prawo INSERT do relacji studio. Ponieważ w instrukcji INSERT jest określona tylko wartość atrybutu nazwa, a więc można albo nadać prawo INSERT, albo prawo INSERT (nazwa) dla relacji studio. Ta druga postać umożliwia wstawianie do relacji studio tylko takich krotek, dla których określa się nazwę studia, a wartości pozostałych atrybutów są albo standardowe, albo NULL, a właśnie tak działa instrukcja przedstawiona na rys. 7.14.
1) INSERT INTO Studio (nazwa)
2) SELECT DISTINCT nazwaStudia 3) EROM Film
4) WHERE nazwastudia NOT IN 5) (SELECT nazwa
6) EROM Studio);
RYSUNEK 7.14 Dołączanie nowego studia
Zwróćmy jednak uwagę na to, że w instrukcji INSERT na rys. 7.I4 występują również dwa podzapytania, w wierszach 2) i S). Ich wykonanie wymaga określenia dodatkowych praw. Potrzeba prawa typu sELECT dla relacji umieszczonych w klauzulach EROM: Film oraz Studio. Zauważmy, że prawo typu INSERT dla relacji studio nie oznacza, że posiada się prawo SELECT dla tej relacji, ani też odwrotnie.
0
7.4.2. Tworzenie praw
Wiemy już, jakie prawa można określać w SQL2 i że muszą one być nadane po to, by można było wykonać działania na relacjach. Teraz jeszcze trzeba się dowiedzieć, w jaki sposób otrzymuje się takie prawa. Są tu dwa elementy: w jaki sposób tworzyć je początkowo oraz jak przekazywać je między użytkownikami. Inicjowanie praw będzie opisane poniżej, a przesyłanie ich między użytkownikami w p. 7.4.4.
456
7. SYSTEMOWE ASPEKTY JĘZYKA SQL
Po pierwsze należy wiedzieć, że wszystkie elementy, takie jak schematy lub moduły, w języku SQL mają swoich właścicieli. Właściciel ma z racji swojego statusu wszystkie prawa, które są związane z danym obiektem. Przy określeniu praw własności w SQL2 występujątrzy elementy:
1. Przy tworzeniu schematu zakłada się, że jego właścicielem oraz właścicielem wszystkich elementów schematu, takich jak tabele, jest ten użytkownik, który utworzył schemat. Ten użytkownik posiada wówczas wszystkie możliwe prawa potrzebne do korzystania ze schematu.
2. Przy otwieraniu sesji przez instrukcję CoNNECT istnieje możliwość wskazania użytkownika; służy do tego klauzula vSER. Na przykład następująca instrukcja:
CONNECT TO Konstelacja-sql-serwer AS connl vSER karol;
spowoduje utworzenie połączenia o nazwie connl z serwerem o nazwie Konstelacj a-sql-serwer i odpowiedzialny za tę sesję jest użytkownik identyfikowany jako Karol. Najczęściej implementacja SQL sprawdza autentyczność użytkownika, pytając na przykład o hasło.
3. Przy tworzeniu modułu można określać jego właściciela, stosując klauzulę AvTHORIZATION. Nie będziemy się zagłębiać w szczegóły dotyczące modułów, ponieważ jest to fragment SQL2, który pozostawia sporo swobody, jeśli chodzi o implementacje. Można jednak wyobrazić sobie pewien schemat, gdzie klauzula
AUTHORIZATION Piotr;
występująca w instrukcji definicji modułu powoduje, że użytkownik o ID pi.otr staje się właścicielem tego modułu. Jeśli nie określi się właściciela modułu, to może go wykonywać każdy, ale prawa do wykonywania poszczególnych działań na poszczególnych tabelach muszą być nadane użytkownikowi, który ten moduł uruchamia w danym połączeniu i danej sesji.
7.4.3. Procedura sprawdzania praw dostępu
Jak już wiemy, każdy moduł, schemat i sesja są powiązane z określonym użytkownikiem; w nomenklaturze SQL mówi się, że dla każdego elementu zostaje określona autoryzacja. Każde działanie w systemie SQL ma dwie części:
1. Elementy bazy danych, na których działania są wykonywane. 2. Agent, który te działania wykonuje.
7.4. BEZPIECZEŃSTWO I AUTORYZACJA UŻYTKOWNIKA W JĘZYKU SQL2 4S%
Prawa agenta są określane dynamicznie na podstawie bieżącej identyfikacji. Jest to albo:
a) ID wynikające z autoryzacji modułu, jeśli moduł uruchamiany jako agent ma określone ID autoryzacji, albo
b) ID wynikające z autoryzacji sesji.
W systemie SQL operacja może zostać wykonana wyłącznie wtedy, kiedy bieżąca autoryzacja ma wszystkie niezbędne w tym celu prawa dostępu.
PRZYKŁAD 7.21
Mechanizmy egzekwowania praw dostępu prześledzimy na działaniach z przykładu 7.20. Można założyć, że tabele używane w tym przykładzie: Film i Studio są elementami schematu o nazwie SchematFilm, którego właścicielem jest użytkownik j areka. Użytkownik j areka ma wszystkie prawa do tabel i innych elementów schematu schematFilm. Może ona nadawać prawa do tych elementów innym użytkownikom dzięki mechanizmom, które zostaną przedstawione w p. 7.4.4, ale na razie zakładamy, że żadne prawa nie zostały jeszcze nadane. Wstawienie z przykładu 7.20 może zostać wykonane na kilka różnych sposobów.
1. Można je wykonać jako fragment modułu utworzonego przez użytkownika Janka z zastosowaniem klauzuli AUTHORIZATION Janka. Jeśli ID autoryzujące moduł zostało określone, to pokrywa się ono z autoryzacją bieżącą. Wówczas i moduł i instrukcja INSERT w nim zawarta mają takie same prawa jak użytkownik j areka, a więc wszystkie prawa do tabel Film i studio.
2. Wstawienie może być także fragmentem modułu, dla którego nie określono właściciela. Użytkownik j areka otwiera połączenie, używając w instrukcji CONNECT TO klauzuli USER j areka. Wówczas j areka jest identyfikatorem bieżącym autoryzującym dostęp, co gwarantuje wszystkie niezbędne prawa dostępu.
3. Użytkownik Janka nadaje wszystkie prawa dostępu do tabel Film i studio użytkownikowi stefan albo użytkownikowi PUBLIC, którym może być każdy. Instrukcja wstawiania występuje teraz w module, który ma klauzulę
AUTHORIZATION stefan
Ponieważ stefan posiada autoryzację bieżącą i ma wszystkie potrzebne prawa dostępu, więc wstawienie jest możliwe.
4. Podobnie jak w punkcie 3 użytkownik Stefan otrzymał prawa od użytkownika j areka. Instrukcja wstawiania znajduje się w module, dla którego nie został określony właściciel, a jest on uruchamiany podczas
4SÓ 7. SYSTEMOWE ASPEKTY JĘZYKA SQL
sesji, którą autoryzuje użytkownik Stefan. A więc autoryzacja bieżąca ma ID Stefan, a ten identyfikator ma potrzebne prawa.
0
W przykładzie 7.21 zilustrowano kilka zasad. Poniżej przedstawiamy ich podsumowanie.
• Potrzebne prawa są dostępne zawsze, jeśli właścicielem danych jest ten sam użytkownik, którego ID stanowi autoryzację bieżącą. Tę regułę ilustrują punkty I i 2 przykładu.
• Prawa sądostępne, jeśli użytkownik identyfikujący bieżącąautoryzację otrzymał je od właściciela danych lub jeśli zostały one nadane użytkownikowi PuBZIC. Ta zasada została zilustrowana w punktach 3 i 4.
• Jeśli właścicielem uruchamianego modułu jest właściciel danych lub ktoś, kto ma prawa dostępu do tych danych, to prawa obowiązują. Ta reguła została zilustrowana scenariuszami 1 i 3.
• Wykonanie modułu udostępnionego dla wszystkich użytkowników podczas sesji autoryzowanej przez użytkownika z ID udostępniającym dane jest także możliwe. Taki przypadek został uwzględniony w punktach 2 i 4.
7.4.4. Nadawanie praw
Na podstawie przykładu 7.21 widać, jak ważne są właściwe prawa użytkownika (widzianego przez autoryzujące go ID). Ale dotychczas jedyny znany sposób uzyskania tych praw do elementów bazy danych sprowadzał się do bycia właścicielem lub autorem tych elementów. W języku SQL2 można jednak także korzystać z instrukcji GRANT, którą stosuje się do nadawania praw innym użytkownikom. Użytkownik nadający prawa nie traci ich, można o tym mechanizmie myśleć zatem jako o prawie do kopiowania praw.
Jednakże między prawem do kopiowaniem praw a ich zwykłym nadaniem istnieje różnica. Otóż każde prawo jest powiązane z prawem nadawania (opcja gram). A więc użytkownik może mieć nadane prawo typu SELECT do tabeli Film z „opcjągrant", a inny użytkownik może mieć to samo prawo, ale bez tej opcji. Wówczas pierwszy z nich może nadawać prawo SELECT do tabeli Film trzeciemu użytkownikowi, nawet razem z opcją gram lub bez niej. A drugi użytkownik, który otrzymał prawo SELECT bez opcji gram, nie może nikomu nadać tego prawa do tabeli Film. Jeśli trzeci użytkownik otrzyma prawo z opcją gram, to wówczas i on może nadać te same prawa czwartemu użytkownikowi i znowu może to zrobić z opcją gram lub bez niej. Instrukcja gram ma następujące elementy:
1. Słowo kluczowe GRANT.
7.4. BEZPIECZEŃSTWO I AUTORYZACJA UŻYTKOWNIKA W JĘZYKU SQL2 4S9
2. Lista, zlożona z jednego lub wielu praw, np. SELECT lub INSERT (nazwa) . Może tu także wystąpić slowo kluczowe ALL PRIVILEGES, jako skrótowe określenie przekazania tych wszystkich praw, które posiada użytkownik wykonujący instrukcje gram do elementów bazy danych (opisanych w punkcie 4).
3. Slowo kluczowe ON.
4. Element bazy danych. Najczęściej jest to relacja, tabela lub perspektywa. Może to także być dziedzina lub iru~y element (np. jeden z tych, które opisaliśmy w ramce „Co jeszcze należy do schematu?" w p. 7.3.2), jednakże wówczas trzeba nazwę tego elementu poprzedzić odpowiednim slowem kluczowym, np. DOMAIN.
5. Słowo kluczowe To.
6. Lista identyfikatorów użytkowników (ID autoryzujących dostęp). 7. Jako opcja slowo kluczowe WITH GRANT oPTION.
Schemat instrukcji gram jest zatem następujący:
GRANT <lista praw> oN <element bazy danych> To <lista użytkowa i ków>
Na końcu może wystąpić fraza WITH GRANT oPTION.
Aby taką instrukcję wykonać, użytkownik sam musi mieć te prawa, których udziela innym, a dodatkowo musi je mieć z opcją gram. Użytkownik udzielający prawa może mieć je w szerszym zakresie niż te, które nadaje. Na przykład użytkownik, który ma prawo INSEKT do tabeli studio z opcją gram, może komu innemu nadać prawo INSEKT (nazwa) do tej tabeli.
PRZYKŁAD 7.22
Użytkownik j areka jest właścicielem schematu SchematFilm, który obejmuje relacje:
Film (tytuł, rok, długość, czyKolor. Nazwastudia, producentC#)
Studio (nazwa, adres, prezC#)
nadaje użytkownikom karot i Piotr prawa INSEKT oraz SELECT do tabeli studio oraz prawo sELECT do tabeli Film. Ponadto nadaje te prawa z opcją gram. Poniżej przedstawiamy kod uruchamianych w tym celu instrukcji.
GRANT SELECT, INSEKT ON Studio TO karot, Piotr WITH GRANT OPTION;
GRANT SELECT ON Film TO karot, Piotr WITH GRANT OPTION;
4C)O 7. SYSTEMOWE ASPEKTY JĘZYKA SQL
Następnie Piotr udziela tych praw użytkownikowi stefan, ale już bez opcji gram.
GRANT SELECT, INSERT ON Studio TO stefan; GRANT SELECT ON Film TO stefan;
Także karol nadaje Stefanowi minimalne prawa, które są niezbędne do uruchomienia funkcji z rys. 7.14, a nominalnie prawa sELECT i INSERT (nazwa) do tabeli Studio oraz SELECT do tabeli Film. W tym celu wykonuje następujące instrukcje.
GRANT SELECT, INSERT(nazwa) ON Studio TO stefan; GRANT SELECT ON Film TO Stefan;
A więc Stefan otrzymał prawo do wykonania sELECT do tabel Film i Studio od dwóch różnych użytkowników. Poza tym dostał dwukrotnie prawo do wykonywania INSEKT (nazwa) dla tabeli studio: bezpośrednio od karota i pośrednio przez prawo do INSEKT od Piotra.
o
7.4.5. Diagram GRANT
Ze względu na to, że prawa nadawania praw tworzą złożoną sieć, a ponadto końcowe prawa mogą powstawać w wyniku nakładania się różnych nadam, jest wygodnie przedstawiać te zależności w postaci graficznej tzw. diagramu g~ant. Jest on implementowany w systemie SQL i w ten sposób zawsze wiadomo, jakie są prawa i skąd się wzięły (co staje się ważne w przypadku ich odbierania, p. 7.4.6). Wierzchołki w tym diagramie reprezentują użytkowników i prawa. Jeśli użytkownik U nadaje prawo P użytkownikowi U, a jest to możliwe dlatego, że U ma prawa Q (gdzie Q może być takie samo jak P z opcją gram lub pewnym rozszerzeniem P, także z opcją gram), wówczas powstaje krawędź skierowana od wierzchołka U/Q do wierzchołka T~/P.
PRZYKŁAD 7.23
Na rysunku 7.15 przedstawiono diagram gram, który powstał w wyniku wykonania ciągu instrukcji gram z przykładu 7.22. Stosujemy konwencję polegającą na tym, że gwiazdka * umieszczona przy prawach oznacza, że prawo zawiera opcję gram. Z kolei dwie gwiazdki ** oznaczają, że prawa wynikają z prawa własności elementu bazy danych, a więc nie są poprzedzone żadnym nadaniem. Ta różnica okaże się istotna, gdy będziemy omawiać odbieranie praw w p. 7.4.6. Prawa opatrzone podwójną gwiazdką z natury zawierają opcję gram.
a
7.4. BEZPIECZEŃSTWO I AUTORYZACJA UŻYTKOWNIKA W JĘZYKU SQL2 461
Janka Janka Janka Janka
SELECT INSERT SELECT INSERT
z Film do Film ze Studio do Studio
** ** ** **
Karol Piotr \
SELECT SELECT
z Film z Film
*
Karol Piotr \
SELECT SELECT
ze Studio ze Studio
* i
' Karol Piotr INSERT INSERT do Studio do Studio
Stefan Stefan Stefan Stefan INSERT (nazwa) SELECT SELECT INSERT
do Studio z Film ze Studio do Studio
RYSUNEK 7.15 Diagram gram
7.4.6. Odbieranie praw
Prawa nadane można w każdej chwili odebrać. Procedura odbierania praw może tworzyć kaskadę, w tym znaczeniu, że odebranie praw udzielonych z opcją gram może wymagać odebrania także praw, które powstały w wyniku korzystania z tej opcji. Poniżej przedstawiamy prostą postać instrukcji revoke.
1. Słowo kluczowe REVOKE. 2. Lista praw.
462 7. SYSTEMOWE ASPEKTY JĘZYKA SQL
3. Słowo kluczowe ON.
4. Element bazy danych, zgodny z opisem z punktu 4 w opisie instrukcji gram.
5. Słowo kluczowe EROM.
6. Lista użytkowników (czyli identyfikatory autoryzacji).
A więc można podać następujący schemat dla instrukcji revoke:
REVOKE <lista praw> oN <element bazy danych> FROM <lista użytkowników>
Można do tej instrukcji dołączyć jeszcze inne elementy:
• Instrukcja może zostać zakończona słowem kluczowym CASCADE. Wówczas odbierając wyspecyfikowane prawa, odbiera się również te prawa, które zostały nadane w wyniku ich przekazania. A dokładniej: jeśli użytkownik U odbiera prawa P użytkownikowi V, wynikające z praw Q użytkownika U, to zostaje usunięta krawędź diagramu gram prowadząca od wierzchołka UlQ do V/P. Wówczas usuwa się z tego diagramu wszystkie te wierzchołki, dla których nie można znaleźć wierzchołka poprzedzającego z dwiema gwiazdkami (właściciela praw).
• Można tę instrukcję zastąpić słowem RESTRICT, co oznacza że nie należy wykonać instrukcji revoke, jeśli w wyniku stosowania kaskady zostałyby usunięte jeszcze jakieś inne prawa niż te, które są jawnie wyspecyfikowane.
• Można zastąpić REVOKE przez REVOKE GRANT OPTION FOR, a wtedy nie odbiera się praw, a tylko prawo do ich udzielania. Można tę opcję łączyć zarówno z CASCADE, jak i z RESTRICT, co spowoduje analizę i ewentualnąmodyfikację diagramu grunt.
PRZYKŁAD 7.24
Posługujemy się znowu danymi z przykładu 7.22 i załóżmy teraz, że j anka chce odebrać prawa, które udzieliła Piotrowi i w tym celu uruchamia instrukcję
REVOKE SELECT, INSERT ON Studio EROM Piotr CASCADE; REVOKE SELECT ON Film EROM Piotr CASCADE;
Na rysunku 7.15 zostaje usunięta krawędź od praw j anki do praw Piotr. Ponieważ korzysta się z opcji CASCADE, więc należy sprawdzić, czy w diagramie pozostały wierzchołki, w których nie moż.~~a sprawdzić, kto jest właścicielem praw. Na rysunku 7.15 widać, że prawa Piotra nie są już dostępne z żadnego wierzchołka z dwiema gwiazdkami (mogłyby być, jeśli ist
7.4. BEZPIECZEŃSTWO 1 AU'CORYZACJA U7YTKOWNIKA W JĘZYKU SQL2
463
niałby inny, oprócz Janki, właściciel, który te prawa nadał piotrowi). W podobny sposób są również niedostępne prawa stefana do INSERT do relacji studio. A zatem z diagramu gram usuwamy nie tylko prawa piotra, ale także prawo Stefana do zNSERT.
Zauważmy, że nie usuwa się prawa Stefana do sELECT do relacji Film i studio, ani jego prawa do TNSERT (nazwa) do studio, ponieważ są one dostępne z wierzchołka Janki pośrednio przez prawa karota. Diagram gram, który powstał w wyniku tych przekształceń, jest przedstawiony na rys. 7.16.
0
Janka Janka Janka SELECT INSERT SELECT
z Film do Film ze Studio ** ** **
Karol SELECT
z Film
Karol SELECT ze Studio
" Karol INSEKT do Studio
Stefan Stefan Stefan INSEKT (nazwa) SELECT SELECT
do Studio z Film ze Studio
" Janka INSERT do Studio
**
RYSUNEK 7.16
Diagram GRANT po odebraniu praw Piotra
464 7. SYSTEMOWE ASPEKTY JĘZYKA SQL
PRZYKŁAD 7.25
Przedstawimy teraz za pomocą abstrakcyjnych przykładów kilka problemów bardziej subtelnych. Po pierwsze, jeśli odbiera się pewne ogólne prawa p, to nie oznacza, że odbiera się jakiś ich podzbiór, nadany osobno. Rozważmy następujący ciąg działań, gdzie użytkownik U- właściciel relacji R - nadaje prawo INSEKT do R użytkownikowi V, a poza tym nadaje dodatkowo prawo do INSEKT (A) do tej samej relacji.
Nr czynności I Kto I Czynność
1 U GRANT INSEKT ON R TO h
U GRANT INSERT(A) ON R TO V
3 U REVOKE INSEKT ON R EROM V RESTRICT
Po odebraniu prawa INSEKT od V ma on nadal prawo INSEKT (A) . Na rysunku 7.17 przedstawiono diagram gram powstały kolejno w czynnościach 2 i 3.
U V INSEKT INSEKT
do R do R **
' V INSEKT (A)
do R ,
(a) Po czynności 2 (b) Po czynności 3
RYSUNEK 7.17
Po odebraniu praw ogólnych prawa szczegółowe obowiązują nadal
Zauważmy, że po czynności 2 istnieją dwa oddzielne wierzchołki z podobnymi, ale nieidentycznymi prawami użytkownika V. Zauważmy także, że opcja RESTRICT w czynności 3 nie zapobiegnie odebraniu praw, ponieważ użytkownik V nie udzielał praw innym użytkownikom. A w ogóle nie mógł ich nadawać, ponieważ otrzymał je bez opcji gram.
0
PRZYKŁAD 7.26
Rozważmy teraz podobny przykład, w którym U nadaje użytkownikowi V prawo p z opcją gram, a potem odbiera tylko tę opcję. W tym przypadku trzeba zmienić wierzchołek odpowiadający V po to, by widać było zmianę ro
7.4. BEZPIECZEŃSTWO 1 AUTORYZACJA UŻYTKOWNIKA W JĘZYKU SQL2 ~1GS
dzaju praw posiadanych przez użytkownika V, oraz trzeba usunąć wszystkie krawędzie ilustrujące nadanie prawa p przez użytkownika V. Zostanie wykonany następujący ciąg instrukcji:
Nr czynności Kto Czynność
1 U GRANT TO V GVITH GRANT OPTION 2 V GRANT TO W
3 U REVOKE GRANT OPTION FOR p EROM V CASCADE
W pierwszej instrukcji U nadaje prawa p użytkownikowi V z opcją gram. W czynności 2 V korzysta z opcj i gram i udziela praw p do W. Diagram został przedstawiony na rys. 7.18(a).
U V W U V P
(a) Po kroku 2 (b) Po kroku 3
RYSUNEK 7.18
Przy odebraniu prawa do nadawania praw, prawa uprzednio nadane obowiązują nadal
Następnie w czynności 3 użytkownik U odbiera użytkownikowi V opcję gram do praw p, ale nie odbiera samych praw. A więc znika gwiazdka z wierzchołka Vlp. Ale z wierzchołka pozbawionego * nie może wychodzić żadna krawędź, ponieważ taki wierzchołek nie może być źródłem praw. A więc trzeba usunąć także krawędź wychodzącą z wierzchołka Vlp, która prowadzi do wierzchołka Wlp.
Teraz z kolei do wierzchołka Wlp nie dochodzi żadna ścieżka rozpoczynająca się w wierzchołku z dwiema gwiazdkami, który jest źródłem praw p, a zatem wierzchołek Wlp zostaje usunięty z diagramu. Ale wierzchołek Vlp pozostaje. Zmienił się tylko typ tego wierzchołka, znikła gwiazdka, oznaczająca opcję gram. Wynikowy diagram gram został przedstawiony na rys. 7.18(b).
0
7.4.7. Ćwiczenia do podrozdzia~u 7.4
Ćwiczenie 7.4.1. Należy podać, jakie są niezbędne prawa do uruchomienia następujących zapytań. W każdym przypadku należy podać prawa minimalne oraz ogólne, które wystarczają do uruchomienia zapytania.
a) Zapytanie z rys. 5.3. b) Zapytanie z rys. 5.5. *c) Wstawienie z rys. 5.12.
466
d) Usuwanie z przykładu 5.29.
e) Aktualizacja z przykładu 5.31. Więzy krotkowe z rys. 6.4.
g) Asercja z przykładu 6.10.
7. SYSTEMOWE ASPEKTY J~ZYKA SQL
*Ćwiczenie 7.4.2. Utworzyć diagram gram po wykonaniu czynności 4, 5 i 6 ciągu, który został przedstawiony na rys. 7.19. Należy założyć, że właścicielem relacji z prawami p jest użytkownik A.
Numer Kto Czynność czynności
1 A GRANT p TO B WITH GRANT OPTION
2 A GRANT p TO C
3 B GRANT p TO D WITH GRANT OPTION
4 D GRANT p TO B, C, E WITH GRANT OPTION
S B REVOKE p EROM D CASCADE
6 A REVOKE p EROM C CASCADE
RYSUNEK 7.19
Ciąg czynności do ćwiczenia 7.4.2
Ćwiczenie 7.4.3. Utworzyć diagram gram po wykonaniu czynności 5 i 6 ciągu, który został przedstawiony na rys. 7.20. Należy założyć, że właścicielem relacji z prawami p jest użytkownik A.
Numer czynności
1 2 3 4 5 6
Kto ~ Czynność
A GRANT p TO B, E WITH GRANT OPTION B GRANT p TO C WITH GRANT OPTION
C GRANT p TO D WITH GRANT OPTION E GRANT p To C
E GRANT p TO D WITH GRANT OPTION
A REVOKE GRANT OPTION FOR p EROM B CASCADE
RYSUNEK 7.20
Ciąg czynności do ćwiczenia 7.4.3
'Ćwiczenie 7.4.4. Należy utworzyć diagram gram powstały w wyniku przetworzenia następującego ciągu instrukcji, przy założeniu, że właścicielem relacji z prawami p jest użytkownik A.
Nr czynności Kto Czynność
1 A GRANT p TO B WITH GRANT OPTION 2 B GRANT p TO B WITH GRANT OPTION 3 ( A REVOKE p FOR EROM B CASCADE
7.5. PODSUMOWANIE
7.5. Podsumowanie
467
• Osadzanie SQL (embedded SQL): Zamiast korzystać z interfejsu zapytań do uruchamiania zapytań i wprowadzania zmian w języku SQL, często jest efektywniej napisać program w standardowym języku programowania i wstawić do niego instrukcje SQL.
• Niedopasowanie falowe (impedance mismatch): Model danych SQL rożni się zasadniczo od modeli danych w zwykłych językach programowania. Dlatego do komunikacji między instrukcjami SQL a programem zewnętrznym trzeba korzystać z tzw. zmiennych dzielonych, w których można przekazywać wartości skladowych krotek.
• Kursory (cursors): Kursor jest zmienną SQL, która wskazuje krotkę w relacji. Kursory są dodatkowym mechanizmem SQL, który umożliwia polączenie języka podstawowego i SQL, a stosuje się je w połączeniu ze zmiennymi dzielonymi, do których zapisuje się wartości z krotki, wskazywanej w danej chwili przez kursor .
• Dynamiczny SQL (dynamit SQL): Zamiast wstawiać fragmenty SQL do programu podstawowego może on generować teksty, które są interpretowane jako instrukcje SQL i wykonywane przez system SQL.
• Sterowanie wspólbieżnościci (concurrency control): W systemie SQL istnieją dwa mechanizmy, które pozwalają unikać konfliktów związanych z jednoczesnym przetwarzaniem: transakcje oraz ograniczenia w stosowaniu kursorów. Ograniczenia kursorów polegają na deklarowaniu kursora jako „niewrażliwego", co oznacza, że zmiany dokonywane w relacji nie są widoczne.
• Transakcje (transactions): Programista może grupować instrukcje w jednostki zwane transakcjami, które się zatwierdza lub cofa (unieważnia). W tym drugim przypadku cofa się wszystkie zmiany powstałe w bazie danych.
• Poziomy izolacji (isolation levels): Transakcje w systemie SQL można określać na jednym z czterech poziomów izolacji, które w kolejności od najbardziej do najmniej restrykcyjnego określa się jako: „sekwencyjny" (transakcja musi się wykonać zawsze w całości, zanim inna transakcja się zacznie lub po kompletnym zakończeniu innej transakcji), „odczyt powtarzalny" (każda krotka, która pojawila się w wyniku zapytania, będzie pojawiali się w kolejnych odpowiedziach), „odczyt zatwierdzony" (tylko krotki powstałe w wyniku zatwierdzenia transakcji są dostępne dla innych transakcji) oraz „odczyt niezatwierdzony" (nie ma żadnych ograniczeń na dostęp do danych).
• Kursory i transakcje tylko do odczytu (read-only cursors and transactions): Zarówno kursory, jak i transakcje można zadeklarować jako tylko do odczytu. Dzięki temu można uzyskać pewność, że kursor lub transakcja nie zmienią stanu bazy danych, a jednocześnie stanowi to informację dla systemu SQL o tym, że ten obiekt nie spowoduje naru
468
7. SYSTEMOWE ASPEKTY JĘZYKA SQL
szenia niewrażliwości, sekwencyjności ani innych metod ochrony danych.
• Organizacja bazy danych (organization of a database): Instalacja SQL2 za pośrednictwem systemu DBMS tworzy środowisko działania SQL2. W tym środowisku elementy bazy danych, takie jak relacje, są grupowane w schematy, katalogi i klastry. Katalog stanowi zestaw schematów, a klaster jest jeszcze większą jednostką danych dostępną dla użytkownika.
• Systemy klient-serwer (client/server systems): Klient SQL łączy się z serwerem SQL2 i w ten sposób powstają: połączenie (między dwoma procesami) oraz sesja (ciąg działań). Kod, który wykonuje się podczas sesji, pochodzi z modułu, a wykonanie nazywa się agentem.
• Prawa (privileges): Dla zapewnienia ochrony danych przed niepowołanym dostępem w systemie SQL2 powstały różne typy praw dostępu do elementów bazy danych. Prawa te są następujące: select (odczyt), inser-i (wstawianie), delete (usuwanie), update (aktualizacja relacji) oraz prawa reference (odwoływania się do relacji w więzach). Prawa insert, update i references można otrzymać także na poszczególne kolumny relacji, a nie tylko na całą relację.
• Diagramy gram (gram diagrams): Prawa mogą nadawać ich właściciele innym użytkownikom lub użytkownikowi PUBLIC. Po określaniu praw z opcją gram ich nabywca może stać się źródłem tych praw dla innych użytkowników. Prawa można także odbierać. Diagram gram stanowi mechanizm pamiętania, kto komu udzielił jakich praw.
7.6. Literatura do rozdziaw 7
Informacje dotyczące bibliografii standardu SQL zostały podane w nocie po rozdziale 5. Dokładniejsze omówienie standaryzacji zagadnień transakcji i kursorów znajduje się w [Ij.
Najważniejsza koncepcja dotycząca sposobu implementowania transakcji, nazywana „blokowaniem dwufazowym", została zaproponowana w [3]. Więcej informacji na temat zarządzania transakcjami i ich implementacji znajduje się w [2) i [5]. Pierwsze pomysły związane z autoryzacją dostępu w języku SQL2 zostały opisane w [6] oraz [4].
1. Berenson H., Bernstein P.A., Gray J.N., Melton J., O'Neil E., O'Neil P.: A critique of ANSI SQL isolation levels. Proceedings ofACM SIGMOD INTG. Conf Of Management of Data, s. 1-10, 1995.
2. Bernstein I'.A., Hadzilacos V., Goodman N.: Concurrency Control ancl Recovery in Database Systems. Addison-Wesley, Reading, MA, 1987.
3. Eswaran K.P, Gray J.N., Lorie A., Traiger I.L.: The notions of consistency and predicate locks in a database system. Communication of the ACM 19:1 I s. 624-633, 1976.
4. Fagin R.: On the authorization mechanism. ACM Transaction on Database Systems 3:3 s. 310-319, 1978.
5. Gray J.N., Reuter A.: Transaction Processing: Concepts and Technigues. Morgan-Kauf~rrmann, San Prancisco, 1993.
6. Griffiths P.P., Wade B.W.: An authorization mechanism for a relational database system. fł CM Transaction on Database Systenas 1:3 s. 242-255, 1976.