SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE



Podobne dokumenty
Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Uprawnienia, role, synonimy

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. UŜytkownicy i schematy (2) UŜytkownicy i schematy (1) baza danych: ZESP99

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Baza danych inside. Biologiczne Aplikacje Baz Danych

Zaawansowane bazy danych i hurtownie danych semestr I

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba.

Oracle11g: Wprowadzenie do SQL

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Ćwiczenie 14 autoryzacja

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

SQL 4 Structured Query Lenguage

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

15. Funkcje i procedury składowane PL/SQL

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

CREATE USER

Oracle11g: Programowanie w PL/SQL

Pakiety podprogramów Dynamiczny SQL

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Wyzwalacze (triggery) Przykład

Wykład 8. SQL praca z tabelami 5

Składowane procedury i funkcje

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

1. Wyzwalacze BD (ang. triggers)

Język SQL. Rozdział 8. Język manipulowania danymi DML

Wyzwalacze TWORZENIE WYZWALACZY

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Przestrzenne bazy danych Podstawy języka SQL

Technologie baz danych WYKŁAD 7: Wyjątki

PODSTAWY BAZ DANYCH 13. PL/SQL

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

P o d s t a w y j ę z y k a S Q L

Oracle PL/SQL. Paweł Rajba.

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Oracle10g: Programowanie w PL/SQL

Język PL/SQL Procedury i funkcje składowane

Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Zarządzanie kontami użytkowników w i uprawnieniami

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Instrukcja instalacji aplikacji PlanSoft.org

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Cele. Definiowanie wyzwalaczy

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Język SQL, zajęcia nr 1

Procedury i funkcje składowane

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Tworzenie raportów XML Publisher przy użyciu Data Templates

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Administracja i programowanie pod Microsoft SQL Server 2000

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Transakcje jednocześnie ACID

Projektowanie systemów baz danych

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy Danych i Usługi Sieciowe

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Post-relacyjne bazy danych

Internetowe bazy danych

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Bazy danych i usługi sieciowe

Systemy GIS Tworzenie zapytań w bazach danych

Bazy danych - Materiały do laboratoriów VIII

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Bloki anonimowe w PL/SQL

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Relacyjne bazy danych. Podstawy SQL

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

Paweł Rajba

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Tabela wewnętrzna - definicja

Bazy danych 10. SQL Widoki

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Transkrypt:

Instrukcje SQL dzielimy na następujące kategorie: 1) Instrukcje języka manipulowania danymi (DML) SELECT, INSERT, UPDATE, DELETE, SET TRANSACTION, EXPLAIN PLAN 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE 3) Instrukcje sterowania transakcją COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION 4) Instrukcje sterowania sesji ALTER SESION, SET ROLE 5) Instrukcje sterowania systemu ALTER SYSTEM Ad 1) Służą do zmieniania danych w tabelach lub danych zapytań w tabeli bazy danych, ale nie umożliwiają zmiany struktury tabeli lub innych obiektów. Ad 2) Służą do tworzenia, usuwania lub zmieniania struktury obiektu schematu oraz zmieniają uprawnienia do obiektu. Ad 3) Gwarantują zachowanie spójności danych dzięki zorganizowaniu instrukcji SQL w logiczne transakcje kończące się powodzeniem lub niepowodzeniem. Ad 4) Służą do zmieniania ustawień dla pojedynczego połączenia z bazą danych, np. do aktywnego śledzenia sesji SQL. Ad 5) Służą do zmieniania ustawień dla całej bazy danych, np. do aktywowania lub dezaktywowania procesu archiwizacji. 1. WYKORZYSTANIE instrukcji SQL w PLSQL W języku PLSQL dozwolone jest tylko użycie instrukcji DML z wyjątkiem EXPLAIN PLAN (1) oraz instrukcji sterowania transakcjami (3). Niedozwolone są instrukcje DDL. 1

Język programowania może wiązać zmienne na dwa sposoby: a) przez wiązanie wczesne lub b) wiązanie późne. Wiązanie zmiennej jest procesem identyfikowania lokacji pamięci skojarzonej z identyfikatorem programu. W języku PLSQL wiązanie uwzględnia również sprawdzenie istnienia zezwolenia na uzyskanie dostępu do odwoływanego obiektu schematu w bazie danych. W przypadku języka, w którym stosuje się wiązanie wczesne, wiązanie zmiennej następuje podczas etapu kompilacji, natomiast w przypadku języka, w którym stosuje się wiązanie późne, proces wiązania zmiennej jest odkładany aż do czasu uruchomienia programu. Wiązanie wczesne, w przeciwieństwie do wiązania późnego, wydłuża czas kompilacji, ale przyspiesza czas wykonania programu. Język PLSQL został celowo zaprojektowany w taki sposób, aby zastosować wiązanie wczesne. Chodziło o jak najszybsze wykonanie bloku. Podczas kompilacji sprawdzane są wszystkie obiekty bazy danych, co ważne jest bowiem bloki mogą być składowane za pomocą procedur, funkcji, pakietów i wyzwalaczy. Obiekty te są składowane w skompilowanej formie, a zatem w razie potrzeby mogą być bezpośrednio ładowane z bazy danych do pamięci i uruchamiane. Stąd nie można stosować instrukcji DDL, które modyfikują obiekty bazy danych, bowiem wymagałoby to ponownego sprawdzania zezwoleń, ponownego wiązania identyfikatorów, ponownej kompilacji. Przykład. 1 CREATE TABLE A( a number, b char(1) ); INSERT INTO A VALUES (10, 'a'); W celu kompilacji tego bloku identyfikator A wymaga dowiązania, a to pociąga sprawdzenie czy istnieje tabela. Ponieważ tabela utworzona zostanie dopiero w momencie uruchomienia bloku, blok nie może zostać skompilowany. 2

Stosowanie instrukcji SQL w języku PLSQL jest możliwe dzięki technice dynamicznego SQL (wbudowany dynamiczny SQL lub pakiet DBMS_SQL), czyli dynamicznego tworzenia instrukcji SQL w czasie uruchamiania programu, analizowanie ich i uruchamianie. Instrukcje nie są tworzone aż do czasu uruchomienia programu, a więc kompilator nie wiążąc identyfikatorów w tych instrukcjach, pozwala na kompilację bloku. Przykład. 2 EXECUTE IMMEDIATE 'CREATE TABLE A( a number, b char(1) )'; EXECUTE IMMEDIATE 'INSERT INTO A VALUES (10, 'a')'; EXECUTE IMMEDIATE 'INSERT INTO A VALUES (20, 'b')'; EXECUTE IMMEDIATE 'INSERT INTO A VALUES (30, 'c')'; EXECUTE IMMEDIATE 'INSERT INTO A VALUES (40, 'd')'; EXECUTE IMMEDIATE 'INSERT INTO A VALUES (50, 'e')'; EXECUTE IMMEDIATE 'INSERT INTO A VALUES (60, 'f')'; 2. INSTRUKCJE DML w języku PLSQL Język PLSQL umożliwia stosowanie w instrukcjach DML zmiennych, przy czym zmiennymi można zastępować tylko wyrażenia. 3

Przykład. 3 z A.a%TYPE; z := 10; UPDATE A SET a = 20 * z WHERE a = z; SELECT [*[, element listy wyboru]] INTO [zmienna[,zmienna]] FROM odnośnik_do_tabeli [WHERE warunek]; UWAGA: Instrukcja SELECT powinna zwracać najwyżej jeden wiersz. Przykład. 4 z_a A.a%TYPE; z_b A.b%TYPE; z_rekord A%ROWTYPE; SELECT * INTO z_rekord FROM A WHERE a = 20; DBMS_OUTPUT.PUT_LINE(z_rekord.a ' ' z_rekord.b); SELECT * INTO z_a, z_b FROM A WHERE a = 50; DBMS_OUTPUT.PUT_LINE(z_a ' ' z_b); 4

Przykład. 5 CREATE TABLE B AS SELCT * FROM A WHERE a>20 AND a < 50; z_rekord A%ROWTYPE; SELECT * INTO z_rekord FROM A WHERE a = 20; INSERT INTO B VALUES(z_rekord.a, z_rekord.b); INSERT INTO B SELECT * FROM A WHERE a = 50; Przykład. 6 z_b A.b%TYPE; SELECT b INTO z_b FROM A WHERE a = 60; UPDATE B SET b = z_b WHERE a IN (SELECT a FROM A WHERE a >20 AND a<40); 3. WIĄZANIA ZBIORCZE Instrukcje SQL w blokach PLSQL są wysyłane do mechanizmu SQL w celu ich wykonania. Z kolei mechanizm SQL może przesłać dane z powrotem do mechanizmu PLSQL, np. 5

Przykład. 7 type tab_a is table of number index by binary integer; zm_a tab_a; type tab_b is table of char(1) index by binary integer; zm_b tab_b; FOR i IN 1..24 LOOP zm_a(i) := i * 100; zm_b(i) := CHR(ASCII('a')+i); END LOOP; FOR i IN 1..24 LOOP INSERT INTO B VALUES(zm_a(i), zm_b(i)); END LOOP; Eliminacja przełączeń kontekstowych następuje poprzez użycie wiązania zbiorczego FORALL Przykład. 8 type tab_a is table of number index by binary integer; zm_a tab_a; type tab_b is table of char(1) index by binary integer; zm_b tab_b; FOR i IN 1..24 LOOP zm_a(i) := i * 100; zm_b(i) := CHR(ASCII('a')+i); END LOOP; FORALL i IN 1..24 INSERT INTO B VALUES(zm_a(i), zm_b(i)); 6

KLAUZULA RETURNING w poleceniach INSERT, UPDATE i DELETE. Przykład. 9 aa char(1); bb number; INSERT INTO b VALUES(1000,'z') RETURNING a INTO bb; DBMS_OUTPUT.PUT_LINE(bb); UPDATE b SET a = 500 where a = 1000 RETURNING b INTO aa; DBMS_OUTPUT.PUT_LINE(aa); DELETE FROM b where a = 500 RETURNING a INTO bb; DBMS_OUTPUT.PUT_LINE(bb); 4. TWORZENIE SYNONIMÓW CREATE SYNONYM nazwa synonimu FOR odwołanie; DROP SYNONYM nazwa synonimu; gdzie odwołanie to odwołane do tabeli innego użytkownika nazwa_uzytkownika.nazwa_tabeli. CREATE SYNONYM ala FOR a; SELECT * FROM ala; 5. PSEUDOKOLUMNY (LEVEL, ROWID, ROWNUM) Licznik jest obiektem, który automatycznie zwiększa swoją wartość po jego każdorazowym odczycie. Liczniki są używane zwykle do generowania unikalnych identyfikatorów wierszy. 7

Licznik definiujemy poleceniem: create sequence [nazwa_użytkownika.] nazwa_licznika [increment by liczba] [start with wartość_początkowa] [maxvalue wartość] [cyclenocycle]; nazwa_użytkownika jest opcjonalnym parametrem określającym użytkownika, który go utworzył. increment by jest opcjonalnym parametrem określającym wartość o jaką będzie zwiększany licznik po każdym odczycie. start with jest opcjonalnym parametrem określającym początkową wartość licznika cycle powrót do wartości początkowej po osiągnięciu maksymalnej wartości maxvalue. Domyślnie licznik nie jest cykliczny. nextval odczyt nowej wartości z licznika; curval odczyt bieżącej wartości z licznika; Przykład 1 create sequence licznik increment by 1 start with 1 maxvalue 100 cycle; Usunięcie licznika następuje po wydaniu polecenia drop sequence nazwa_licznika; AUTORYZACJA DOSTĘPU Każdy system zarządzania bazą danych manipulujący dużą ilością informacji, często poufnych, musi być wyposażony w mechanizmy uniemożliwiające dostęp do tych informacji przez nieupoważnionych użytkowników lub aplikacje. 8

Wyróżniamy cztery podstawowe sposoby ochrony danych: 1. sterowanie dostępem przyznawanie prawa dostępu polega na identyfikacji poszczególnych użytkowników i na przyznawaniu im prawa dostępu do określonego zbioru danych; 2. sterowanie przepływem danych polega na kontrolowaniu przesłań danych w celu zabezpieczenia ich przed osobami nieupoważnionymi; 3. ograniczanie możliwości wnioskowania ma na celu uniemożliwienie użytkownikowi bazy wyciągania wniosków dotyczących informacji, których nie powinien poznać, na podstawie dostępnych danych; 4. szyfrowanie umożliwia przechowywanie lub przesyłanie danych w postaci czytelnej jedynie dla użytkowników znających odpowiedni kod. Najpopularniejszy jest 1 sposób z wymienionych powyżej. Każdy SZBD rozróżnia swoich użytkowników poprzez nadawanie im unikalnych identyfikatorów i zabezpieczanie dostępu do systemu za pomocą hasła. Szczególnym użytkownikiem jest administrator systemu, który zwykle posiada nieograniczone prawa dostępu do wszystkich obiektów bazy danych, możliwość rejestrowania nowych użytkowników bazy danych oraz możliwość zmiany praw dostępu określonych użytkowników do określonych obiektów. Użytkownicy nie będący administratorami systemu są zwykle łączeni w grupy. Użytkownicy tej samej grupy na ogół mają te same prawa dostępu do tych samych obiektów, chyba, że prawa te zostały indywidualnie zmodyfikowane w odniesieniu do określonego podzbioru obiektów. Rozróżniane są również obiekty bazy danych: 1. obiekty własne obiekty utworzone przez danego użytkownika, do których posiada on zwykle nieograniczone prawa dostępu. Obiekty te są adresowane przez podanie ich nazw; 2. obiekty obce adresowane są przez złożenie identyfikatora użytkownika, separatora i nazwy. Wśród obiektów obcych wyróżnia się: a) obiekty systemowe są zwykle niezbędne dla większości użytkowników, np. do dynamicznego rozwoju schematu bazy danych. Są w większości widoczne, ale nie mogą być zwykle przez nich modyfikowane; 9

b) obiekty innych użytkowników są zwykle niewidoczne, chyba, że użytkownik w sposób jawny wskazał użytkowników, którym przysługują szczególne prawa dostępu. Drugą płaszczyzną podziału obiektów jest uwzględnienie ich typów, takich jak: relacja, perspektywa, indeks, synonim, itd. Z każdym z typów obiektów mogą być domyślnie wiązane w ogólności różne prawa dostępu dla różnych użytkowników. W przypadku relacji (zwykle również i perspektywy) prawo dostępu do niej może obejmować następujące przywileje: odczytu (ang. read), wstawiania nowych wierszy (ang. insert), usuwania wierszy (ang. delete), modyfikowania wartości jednego lub wielu kolumn wiersza (ang. update), dołączania nowych kolumn, tj. modyfikowania schematu relacji (perspektywy) (ang. expand), usuwania całej relacji (ang. drop), tworzenia indeksów dla relacji (ang. index). Szczególnym prawem, niezbędnym do manipulowania obiektami bazy danych, jest prawo dołączania się do bazy danych nadawane przez administratora systemu (do niego również należy określenie typu użytkownika i ewentualnie grup, do których należy). Użytkownik, posiadający prawo przekazywania przyznanych przywilejów innym użytkownikom bazy danych, może określać prawa dostępu innych użytkowników do obiektów obcych. Na ogół zbiór przywilejów przekazywanych przechodnio innym użytkownikom jest podzbiorem przywilejów użytkownika, który je przekazuje. Przywileje mogą być nadawane i odbierane w sposób dynamiczny w dowolnej chwili pracy SZBD. W poleceniu przydzielania przywilejów określa się: typ przywileju, obiekt, użytkownika (grupę użytkowników), któremu przywilej się nadaje. Podstawowymi poleceniami sterownia dostępem do danych są: grant i revoke. 10

grant nadawanie użytkownikom systemu odpowiednich przywilejów. Składnia: grant przywileje on obiekt to użytkownik; gdzie przywileje dla relacji (perspektywy) to: select odczyt danych, insert wstawianie wierszy, update uaktualnianie wierszy, delete usuwanie wierszy, alter zmiana schematu, index tworzenie indeksów, all powyższe, wszystkie. Dostęp do cudzej relacji (tzn. utworzonej przez innego użytkownika) wymaga uzyskania odpowiedniego przywileju, poprzedzenia nazwy relacji (zespol) identyfikatorem jej właściciela (ktos), np. ktos.zespol Aby udostępnić określony obiekt wszystkim użytkownikom SZBD stosujemy tzw. przywilej ogólny. W tym celu w poleceniu grant, zamiast identyfikatora użytkownika, wpisujemy słowo kluczowe public. Aby użytkownik mógł przekazać otrzymane przywileje innym użytkownikom musimy w poleceniu grant użyć klauzuli with grant option. grant select on etat to PRZEMYSLAW; grant all on zespol to ADAM with grant option; 11

grant select on pracownik to public; Administrator SZBD jest jedynym użytkownikiem, który może rejestrować nowych użytkowników w systemie. W tym celu posługuje się poleceniem grant o następującym formacie: grant przywilej to użytkownik identified by haslo; gdzie przywilej jest albo connect możliwość dołączenia się do SZBD Oracle, albo resource możliwość tworzenia obiektów bazy danych, np. relacji, liczników, albo dba możliwość definiowania użytkowników oraz pełnego dostępu do obiektów i funkcji SZBD. W celu odwołania (usunięcia) wcześniej nadanego przywileju stosujemy polecenie revoke o następującej składni: revoke przywileje on relacjaperspektywa from użytkownicy; 12