Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych



Podobne dokumenty
Bazy Danych. Ćwiczenie 16: System przywilejów oraz zarządzanie użytkownikami

CREATE USER

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

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

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

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

mysql> UPDATE user SET Password=PASSWORD('pass') WHERE user='root'; Query OK, 2 rows affected (0.05 sec) Rows matched: 2 Changed: 2 Warnings: 0

Administrowanie serwerami baz danych ZADANIA ADMINISTRATORA BAZ DANYCH

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

Bazy danych i usługi sieciowe

Bazy Danych i Usługi Sieciowe

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

Projektowanie systemów baz danych

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Bazy Danych. Ćwiczenie 1: Przygotowanie środowiska pracy dla bazy MySQL z wykorzystaniem XAMPP Portable Lite oraz MySQL-Front

Instalacja MySQL.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Język SQL, zajęcia nr 1

Uprawnienia, role, synonimy

MySQL. Æwiczenia praktyczne

Przygotowanie środowiska pracy dla bazy MySQL z wykorzystaniem XAMPP Portable Lite oraz MySQL-Front

Bazy danych 7. SQL podstawy

Bazy danych 10. SQL Widoki

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Typy tabel serwera MySQL

Administracja bazami danych. dr inż. Grzegorz Michalski

Połączenie z bazą danych : mysql h u root -p Enter password: *******

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

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

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

SQL> startup pfile=./admin/pfile/initdbx.ora. SQL> create spfile from pfile='$home/admin/pfile/initdbx.ora' create user bolek identified by bolek;

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Zarządzanie systemami informatycznymi. Zarządzanie internetową bazą danych MySQL

Ref. 7 - Język SQL - polecenia DDL i DML

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

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

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

SQL 4 Structured Query Lenguage

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

Składowane procedury i funkcje

Autor: Joanna Karwowska

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

PHP: bazy danych, SQL, AJAX i JSON

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Wykład 5: PHP: praca z bazą danych MySQL

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Podstawy technologii WWW

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

Bazy danych 9. SQL Klucze obce Transakcje

Wykład 8. SQL praca z tabelami 5

Kurs. Podstawy MySQL

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

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

Komunikacja z bazą danych psql

Bazy danych 5. Samozłaczenie SQL podstawy

Internetowe bazy danych

Struktura drzewa w MySQL. Michał Tyszczenko

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Po prawidłowym podłączeniu do serwera MySQL należy wybrać bazę, na której będziesz pracować:

SIECI KOMPUTEROWE I BAZY DANYCH

Wyzwalacze (triggery) Przykład

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

Wdrożenie modułu płatności eservice. dla systemu Magento

Wykład 05 Bazy danych

Bazy danych 4. SQL podstawy. P. F. Góra

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

Autor: Joanna Karwowska

Kopie bezpieczeństwa NAPRAWA BAZ DANYCH

Administracja bazami danych

WPROWADZENIE DO BAZ DANYCH

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Przykładowa baza danych BIBLIOTEKA

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

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych. Polecenia SQL

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Bazy danych Ćwiczenia projektowe

Dokumentacja SQL API 1

Data modyfikacji:

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

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

Przestrzenne bazy danych Podstawy języka SQL

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Transkrypt:

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych Nr ćwiczenia: 11 Praca z bazą danych MySQL wersja 2.0 Temat: Cel ćwiczenia: Wymagane przygotowanie teoretyczne: Sposób zaliczenia: Prowadzący zajęcia: System przywilejów oraz zarządzanie użytkownikami Celem ćwiczenia jest poznanie podstawowych zagadnień związanych z zaimplementowanym w serwerze MySQL systemie przywilejów oraz zasadami autoryzacji użytkowników. Znajomość tych zagadnień jest podstawą bezpiecznego używania MySQL-a. Samodzielne uzupełnienie brakującej do wykonania ćwiczenia wiedzy. Najlepiej korzystając z [3]. Pozytywna ocena ćwiczenia przez prowadzącego pod koniec zajęć. dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 1. Uwagi wstępne Większość informacji podanych w tym rozdziale pochodzi z książki [3] oraz [2]. Ta druga pozycja jest dość wiernym tłumaczeniem dużych fragmentów pierwszej. Poniżej podano tylko część wiadomości niezbędnych do świadomego wykonania zamieszczonych w następnym rozdziale poleceń. Resztę musisz samodzielnie doczytać w dostępnej literaturze. W szczególności chodzi tutaj o składnię poleceń GRANT, REVOKE oraz SET PASSWORD. 1.1. Ogólna zasada działania systemu przywilejów System przywilejów w MySQL (jak i w każdym innym systemie zarządzania bazami danych) gwarantuje, że każdy użytkownik może wykonywać tylko te operacje, na które mu zezwolił administrator. W MySQL przyjęto zasadę, że tożsamość każdego użytkownika łączącego się do serwera jest ustalana wg: komputera, z którego nawiązano połączenie, podanej nazwy użytkownika. Postąpiono tak, gdyż serwer MySQL od początku projektowany był do pracy w środowisku internetowym. Uwzględnianie nazwy komputera jest więc konieczne, gdyż trudno zakładać, że dana nazwa użytkownika będzie unikalna w całym internecie. Przykładowo użytkownik artur pracujący na komputerze mykonos.iie.uz.zgora.pl nie musi być tą samą osobą, co użytkownik artur pracujący na komputerze www.mojkomp.com.pl. Kontrola dostępu w MySQL składa się z dwóch etapów: Etap 1: serwer MySQL sprawdza, czy użytkownikowi w ogóle wolno się połączyć, Etap 2: jeżeli użytkownik może się połączyć, serwer kontroluje każde wydane przez niego plecenie, aby sprawdzić, czy użytkownik ma wystarczające przywileje, aby je wykonać. Serwer przechowuje przywileje w tzw. tabelach przywilejów (ang. grant tables) w bazie mysql. Do tej bazy danych dostęp ma zwykle tylko administrator i w związku z tym tylko on może nadawać i odbierać uprawnienia. Serwer wczytuje zawartość tych tabel do pamięci, kiedy Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 1

się uruchamia, i potem korzysta z ich zawartości do podejmowania decyzji o zezwoleniu lub zabronieniu wykonywania określonych czynności. Tabele przywilejów to: user, db, host (w praktyce dość rzadko wykorzystywana), tables priv, columns priv. Zawartością tabel przywilejów można manipulować bezpośrednio. Są to normalne tabele, do których mamy dostęp za pomocą poleceń takich jak SELECT czy też UPDATE. Jednak wygodniej i bezpieczniej robić to za pomocą poleceń GRANT oraz REVOKE. Strukturę tabel przywilejów łatwo jest poznać wydając polecenie DESC. Tabela user wygląda następująco: +-+-++-+-+-+ Field Type Null Key Default Extra +-+-++-+-+-+ Host char(60) NO PRI User char(16) NO PRI Password char(41) NO Select_priv enum( N, Y ) NO N Insert_priv enum( N, Y ) NO N Update_priv enum( N, Y ) NO N Delete_priv enum( N, Y ) NO N Create_priv enum( N, Y ) NO N Drop_priv enum( N, Y ) NO N Reload_priv enum( N, Y ) NO N Shutdown_priv enum( N, Y ) NO N Process_priv enum( N, Y ) NO N File_priv enum( N, Y ) NO N Grant_priv enum( N, Y ) NO N References_priv enum( N, Y ) NO N Index_priv enum( N, Y ) NO N Alter_priv enum( N, Y ) NO N Show_db_priv enum( N, Y ) NO N Super_priv enum( N, Y ) NO N Create_tmp_table_priv enum( N, Y ) NO N Lock_tables_priv enum( N, Y ) NO N Execute_priv enum( N, Y ) NO N Repl_slave_priv enum( N, Y ) NO N Repl_client_priv enum( N, Y ) NO N Create_view_priv enum( N, Y ) NO N Show_view_priv enum( N, Y ) NO N Create_routine_priv enum( N, Y ) NO N Alter_routine_priv enum( N, Y ) NO N Create_user_priv enum( N, Y ) NO N ssl_type enum(, ANY, X509, SPECIFIED ) NO ssl_cipher blob NO x509_issuer blob NO x509_subject blob NO max_questions int(11) unsigned NO 0 max_updates int(11) unsigned NO 0 max_connections int(11) unsigned NO 0 max_user_connections int(11) unsigned NO 0 +-+-++-+-+-+ 37 rows in set (0.02 sec) Kolumny Host, User oraz Password noszą nazwę kolumn zasięgu a pozostałe kolumn przywilejów. Kolumny zasięgu, jak sama nazwa wskazuje, określają zasięg każdego wpisu. Na przykład wpis w tabeli user z wartościami Host oraz User równymi artur oraz mykonos.iie.uz.zgora.pl będzie używany do uwierzytelnienia połączeń nawiązywanych z komputera o podanej nazwie oraz przez klienta o nazwie artur. Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 2

Kolumny przywilejów określają przywileje przyznane przez dany wpis, to znaczy dozwolone operacje, które może wykonywać klient (np. prawo do kasowania zawartości określonej tabeli). 1.2. Weryfikacja połączenia W pierwszym etapie, gdy następuje weryfikacja połączenia, sprawdzane są wpisy w tabeli user (kolumny Host, User oraz Password). Serwer akceptuje połączenie tylko wtedy, gdy kolumny Host oraz User w którymś z rekordów w tabeli user pasują do nazwy komputera i nazwy użytkownika a klient poda hasło określone w tym rekordzie. Wartości w kolumnach zasięgu tabeli user mogą przybierać następujące wartości: w kolumnie Host można podać dokładną nazwę lub numer IP komputera (np. mykonos.iie.uz.zgora.pl lub 192.168.21.130 ) lub też użyć symboli wieloznacznych (np. %.iie.uz.- zgora.pl. Czy wiesz, co będzie oznaczał ten wpis?). Nazwa localhost wskazuje na komputer lokalny, w kolumnie User symbole wieloznaczne są niedozwolone, ale można podać wartość pustą, która pasuje do każdej nazwy. Jeżeli wpis w tabeli user dopasowany do przychodzącego połączenia zawiera pustą nazwę użytkownika, użytkownika uznaje się za anonimowego, pozbawionego nazwy, a nie za użytkownika o nazwie podanej przez klienta. Oznacza to, że do dalszej kontroli dostępu przez cały czas trwania połączenia używa się pustej nazwy użytkownika, kolumna Password też może być pusta. Oznacza to, że klient może połączyć się bez podawania hasła (oczywiście w praktyce należy unikać takich otwartych furtek ). Z powyższego wynika, że w tabeli user może istnieć wiele wpisów, które pasują do danego klienta (bo można wpisywać symbole wieloznaczne). Serwer MySQL musi więc za każdym razem ustalić, którego z nich powinien użyć. Robi to w następujący sposób: kiedy serwer wczytuje tabelę user do pamięci sortuje wpisy, kiedy klient próbuje nawiązać połączenie, serwer przegląda wpisy w posortowanej kolejności, serwer używa pierwszego wpisu, który pasuje do nazwy komputera i nazwy użytkownika. Przykładowo niech tabela user wygląda tak: +-++ host user +-++ % root % ulab localhost root localhost +-++ Kiedy serwer wczytuje tą tabelę porządkuje wpisy w taki sposób, że najbardziej specyficzne wartości kolumny Host trafiają na początek listy. Najbardziej specyficzne są dosłowne nazwy komputerów i adresy IP a najmniej specyficzny wpis to %, który oznacza dowolny komputer. Następnie wpisy z taką samą wartością Host są porządkowane wg. najbardziej specyficznej wartości w kolumnie User (pusta wartość User oznacza dowolnego użytkownika i jest najmniej specyficzna). Gdy więc klient próbuje się połączyć, serwer przegląda posortowaną listę i używa pierwszego pasującego wpisu. Powyższa tabela po posortowaniu wygląda więc następująco: Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 3

+-++ host user +-++ localhost root localhost % root % ulab +-++ Zauważmy, że powyższy mechanizm autoryzacji może być dla początkującego użytkownika nieco mylący. Parę samodzielnie wykonanych ćwiczeń (patrz dalej) powinno wyjaśnić istotę zagadnienia. Pozostałe kolumny w tabeli user (tzw. kolumny przywilejów) określają przywileje przyznane przez dany wpis (np. prawo do kasowania tabel). 1.3. Weryfikacja żądań 1.3.1. Tabela user Po nawiązaniu połączenia serwer przechodzi do drugiego etapu kontroli dostępu. Sprawdza wpisy w pozostałych kolumnach w tabeli user, gdzie określone są przywileje na poziomie globalnym (obowiązujące dla każdej używanej bazy danych). Przykładowo, gdy w tabeli user jakiś użytkownik ma przyznane uprawnienie Delete priv, może on usuwać rekordy z każdej tabeli w każdej bazie danych! Generalna zasada jest więc taka, aby przywileje w tej tabeli nadawać wyłącznie administratorom i nikomu innemu! Zwykli użytkownicy powinni mieć w tabeli user wszystkie wpisy ustawione na N. Fragment tabeli user pokazano niżej: +-++-+-+-+-+-+-+ Host User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv... +-++-+-+-+-+-+-+-... localhost root Y Y Y Y Y Y... % root Y Y Y Y Y Y... localhost ulab N N N N N N... % ulab N N N N N N... +-++-+-+-+ 1.3.2. Tabela db Budowa tabeli db jest następująca: +-+-++-+-+-+ Field Type Null Key Default Extra +-+-++-+-+-+ Host char(60) NO PRI Db char(64) NO PRI User char(16) NO PRI Select_priv enum( N, Y ) NO N Insert_priv enum( N, Y ) NO N Update_priv enum( N, Y ) NO N Delete_priv enum( N, Y ) NO N Create_priv enum( N, Y ) NO N Drop_priv enum( N, Y ) NO N Grant_priv enum( N, Y ) NO N References_priv enum( N, Y ) NO N Index_priv enum( N, Y ) NO N Alter_priv enum( N, Y ) NO N Create_tmp_table_priv enum( N, Y ) NO N Lock_tables_priv enum( N, Y ) NO N Create_view_priv enum( N, Y ) NO N Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 4

Show_view_priv enum( N, Y ) NO N Create_routine_priv enum( N, Y ) NO N Alter_routine_priv enum( N, Y ) NO N Execute_priv enum( N, Y ) NO N +-+-++-+-+-+ 20 rows in set (0.02 sec) W tabeli db wpisane są przywileje specyficzne dla bazy danych. Zasada działania tej tabeli (dopuszczalne wpisy, sortowanie) jest analogiczna jak dla tabeli user. Oprócz kolumn Host oraz User pojawia się tutaj dodatkowo kolumna Db. Brak jest natomiast kolumny Password. Kolumny Host, User oraz Db noszą nazwę kolumn zasięgu a pozostałe kolumn przywilejów (podobnie jak w tabeli user). Wartości w kolumnach zasięgu tabeli db mogą przybierać następujące wartości: w kolumnie Host można podać dokładną nazwę lub numer IP komputera lub też użyć symboli wieloznacznych. Nazwa localhost wskazuje na komputer lokalny. Wartość % lub wartość pusta oznacza dowolny komputer, w kolumnie Db też można używać symboli wieloznacznych. Wartość % lub wartość pusta oznacza dowolna baza danych, wartość pusta w kolumnie User oznacza użytkownika anonimowego. Serwer wczytuje i sortuje tabelę db w tym samym czasie co tabelę user. Sortowanie odbywa się podług kolumn Host, Db oraz User. Najbardziej specyficzne wartości trafiają na początek listy. Kiedy serwer szuka pasujących wpisów, używa pierwszego znalezionego wpisu. 1.3.3. Tabele tables priv oraz columns priv Budowa tabel tables priv oraz columns priv jest następująca: +-+++-+-+-+ Field Type Null Key Default Extra +-+++-+-+-+ Host char(60) NO PRI Db char(64) NO PRI User char(16) NO PRI Table_name char(64) NO PRI Grantor char(77) NO MUL Timestamp timestamp YES CURRENT_TIMESTAMP Table_priv set( Select, Insert, Update, Delete, Create, Drop, Grant, References, Index, Alter, Create View, Show view ) NO Column_priv set( Select, Insert, Update, References ) NO +-+++-+-+-+ 8 rows in set (0.01 sec) oraz +-+++-+-+-+ Field Type Null Key Default Extra +-+++-+-+-+ Host char(60) NO PRI Db char(64) NO PRI User char(16) NO PRI Table_name char(64) NO PRI Column_name char(64) NO PRI Timestamp timestamp YES CURRENT_TIMESTAMP Column_priv set( Select, Insert, Update, References ) NO +-+++-+-+-+ 7 rows in set (0.02 sec) Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 5

Tabele tables priv oraz columns priv zawierają przywileje specyficzne dla tabel i kolumn. W tych dwóch tabelach tylko w kolumnie Host mogą pojawić się symbole wieloznaczne. Sortowanie odbywa się podług kolumn Host, Db oraz User. Przypomina to sortowanie tabel user oraz db ale jest prostsze, bo tylko kolumna Host może zawiwrać symbole wieloznaczne. Wartości w kolumnach zasięgu tabel tables priv oraz columns priv mogą przybierać następujące wartości: w kolumnie Host obu tabel można podać dokładną nazwę lub numer IP komputera lub też użyć symboli wieloznacznych. Nazwa localhost wskazuje na komputer lokalny. Wartość % lub wartość pusta oznacza dowolny komputer, w kolumnach Db, Table name oraz Column name nie mogą pojawić się symbole wieloznaczne ani wartośći puste. 1.4. Procedura określania przywilejów użytkownika w przypadku żądań wymagających przywilejów administracyjnych (np. SHUTDOWN) sprawdzane są wpisy w tabeli user, w przypadku żądań związanych z konkretną bazą danych (np. INSERT, UPDATE) sprawdzane są najpierw przywileje globalne w tabeli user. Jeżeli odpowiedni wpis zezwala na żądaną operację, serwer przyznaje dostęp. Jeżeli przywileje w tabeli user są niewystarczające, serwer sprawdza wpisy w tabeli db (a czasami też w tabeli host jest ona jednak rzadko używana w praktyce, więc nie omawiamy jej), serwer szuka w tabeli db pasujących wartości kolumn Host, Db oraz User. Kolumny Host oraz User są dopasowywane do komputera i podanej nazwy użytkownika. Kolumna Db jest dopasowywana do bazy danych, z której chce skorzystać użytkownik. Gdy brak jest wpisu z pasującymi wartościami w kolumnach Host oraz User, serwer odmawia dostępu, po ustaleniu przywilejów specyficznych dla bazy danych, określonych w tabeli db (i ew. też host), serwer dodaje je do globalnych przywilejów określonych w tabeli user. Jeżeli wynik pozwala na wykonanie żądanej operacji, serwer przyznaje dostęp. W przeciwnym wypadku serwer kolejno sprawdza przywileje użytkowników specyficzne dla tabel oraz dla kolumn w tabelach tables priv oraz columns priv, dodaje je do przywilejów użytkownika i na podstawie wyniku przyznaje dostęp lub odmawia dostępu. 1.5. Kiedy uwzględniane są zmiany przywilejów Kiedy serwer MySQL uruchamia się, cała zawartość tabel przywilejów zostaje wczytana do pamięci i od tego momentu jest używana do kontroli dostępu. Kiedy zmieni się zawartość tabel przywilejów rezydujących w pamięci, przywileje już połączonych klientów zmieniają się w następujący sposób: zmiany przywilejów dotyczących tabel i kolumn są uwzględniane przy następnym żądaniu klienta, zmiany przywilejów dotyczących baz danych są uwzględniane przy następnym użyciu instrukcji USE, zmiany przywilejów globalnych i haseł są uwzględniane przy następnym połączeniu klienta. Jeżeli tabele przywilejów zostaną zmodyfikowane za pomocą instrukcji GRANT, REVOKE oraz SET PASSWORD, serwer zostanie poinformowany o zmianach natychmiast i automatycznie uaktualni zawartość tabel przywilejów znajdujących się w pamięci. Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 6

Jeżeli tabele przywilejów zostaną zmodyfikowane za pomocą instrukcji INSERT, UPDATE lub DELETE zmiany nie będą miały wpływu na sprawdzanie przywilejów, dopóki użytkownik nie uruchomi ponownie serwera albo nie nakaże mu ponownie wczytać tabele przywilejów poprzez wydanie polecenia FLUSH PRIVILEGES lub mysqladmin flush-privileges lub mysqladmin reload. 1.6. Oglądanie aktualnie przyznanych przywilejów Oglądanie przyznanych przywilejów poprzez bezpośrednie zaglądanie do tabel systemowych jest dość niewygodne i na dodatek łatwo o pomyłkę. Dużo wygodniejsze jest posługiwanie się poleceniem SHOW GRANTS, które w przejrzysty sposób pokazuje aktualnie przyznane przywileje dla wybranego użytkownika, przykładowo: mysql> SHOW GRANTS FOR user1 @ % ; ++ Grants for user1@% ++ GRANT USAGE ON *.* TO user1 @ % IDENTIFIED BY PASSWORD *7921A9FC688328BEEE5838455B19965A735EB590 GRANT ALL PRIVILEGES ON db1.* TO user1 @ % GRANT SELECT (kol_2b) ON db2. tab_2b TO user1 @ % GRANT SELECT, INSERT, UPDATE, DELETE ON db2. tab_2a TO user1 @ % ++ 4 rows in set (0.00 sec) 2. Polecenia do wykonania Rozwiązania wszystkich poniższych zadań należy umieścić w skrypcie (pliku tekstowym). Aby skrypt można uruchamiać wielokrotnie pamiętaj o tym, że na początku skryptu muszą znaleźć się polecenia kasujące odpowiednie wpisy w tabelach przywilejów! W przeciwnym wypadku będą pojawiać się błędy naruszania kluczy głównych (patrz budowa tabel przywilejów). Zakładamy, że ćwiczenia rozpoczynamy wykonywać, gdy w systemie istnieje tylko konto root. (jeden lub dwa wpisy w tabeli user. Czy potrafisz wyjaśnić dlaczego mówimy o jednym lub dwóch wpisach?). W tabelach db, tables priv oraz columns priv nie ma żadnych wpisów. Ćwiczenie 1 Załóżmy, że w tabeli user mamy następujące wpisy: +-++ host user +-++ % lab komp.com +-++ Jaki użytkownik zostanie faktycznie uwierzytelniony, gdy połączenie zostanie nawiązywane przez użytkownika lab z komputera komp.com? Jak sprawdzić, jakiego konta użył serwer do uwierzytelnienia użytkownika? Wyciągnij praktyczne wnioski. Ćwiczenie 2 Sprawdzić, czy w lokalnej instalacji MySQL są jakieś konta, które pozwalają połączyć się do serwera bez podawania hasła lub też istnieją konta anonimowe. Ćwiczenie 3 Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 7

Utworzyć 4 konta użytkowników o nazwach user1, user2, user3, root2. Użytkownicy user1 oraz user2 nie powinni mieć nadanych żadnych uprawnień natomiast użytkownik user3 powinien mieć nadane pełne prawa do bazy db3 (baza o tej nazwie nie musi w tym momencie fizycznie istnieć). Ostatnie konto (root2) ma mieć uprawnienia administratora (takie same jakie posiada użytkownik root). Użyć poleceń CREATE USER..., GRANT USAGE... oraz GRANT ALL PRIVILEGES... Ćwiczenie 4 Utworzyć dwie nowe bazy danych o nazwach db1 oraz db2. Ćwiczenie 5 Nadać pełne prawa do bazy db1 dla użytkownika user1 oraz pełne prawa do bazy db2 dla użytkownika user2. Ćwiczenie 6 Zmienić hasła użytkownikom user1 oraz user2 na dowolne inne. Użyć raz polecenia SET PASSWORD a raz polecenia GRANT USAGE. Ćwiczenie 7 Odebrać użytkownikowi user3 wszystkie uprawnienia do bazy db3. Ćwiczenie 8 Utworzyć 4 tabele (struktura tabel może być zupełnie dowolna). Dwie w bazie db1 oraz dwie w bazie db2. Użytkownikowi user1 nadać prawa SELECT, INSERT, UPDATE, DELETE do pierwszej tabeli użytkownika user2 oraz prawo SELECT do jednej wybranej kolumny w drugiej tabeli użytkownika user2. Użytkownikowi user2 nadać pełne prawa do wszystkich obiektów w bazie db1. Ćwiczenie 9 Za pomocą polecenia SHOW GRANTS wyświetlić uprawnienia wszystkich użytkowników. Ćwiczenie 10 Zapoznać się z aktualną zawartością tabel przywilejów (user, db, tables priv, columns priv). Postarać się dokładnie zrozumieć poszczególne wpisy. Skonfrontować zawartość tych tabel z wynikami zwracanymi przez polecenie SHOW GRANTS. 3. Rozwiązania Poniżej zamieszczono rozwiązania do ćwiczeń z poprzedniego punktu. Celowo drukujemy je bardzo małą czcionką i w mało czytelnym kolorze, abyś miał trudności z ich odczytaniem :-). Postaraj się najpierw samodzielnie rozwiązać zadania, a gdy już naprawdę nic nie będzie Ci wychodziło posłuż się poniższą ściągawką. Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 8

Skrypt demonstracyjny. (C) by Artur Gramacki Aby uruchomić skrypt musisz posiadać uprawnienia root-a. Skrypt tworzy: - dwie przykładowe bazy: db1, db2 - czterech użytkowników : user1, user2, user3, root2 - cztery tabele: db1.tab_1a, db1.tab_1b, db2.tab_2a, db2.tab_2b - nadaje różne uprawnienia Przełączamy się na bazę systemową USE mysql; KASOWANIE WSZYSTKIEGO OPRÓCZ ROOT-a (tak na wszelki wypadek) DROP DATABASE db1; DROP DATABASE db2; DROP USER user1 @ % ; DROP USER user2 @ % ; DROP USER user3 @ % ; DROP USER root2 @ % ; Sprawdzamy SELECT * FROM user; SELECT * FROM db; SELECT * FROM tables_priv; SELECT * FROM columns_priv; TWORZENIE UŻYTKOWNIKÓW Tworzenie konta użytkownika. Metoda 1. Metoda zalecana. CREATE USER user1 @ % IDENTIFIED BY pass1 ; Tworzenie konta użytkownika. Metoda 2. USAGE to synonim do nie przyznawaj żadnych uprawnień. GRANT USAGE ON *.* TO user2 @ % IDENTIFIED BY pass2 ; Tworzenie konta użytkownika. Metoda 3. Jednoczesne utworzenie użytkownika oraz nadanie mu uprawnień do bazy danych (baza o tej nazwie nie musi w tym momencie fizycznie istnieć). Powstaje rekord w tabeli db. GRANT ALL PRIVILEGES ON db3.* TO user3 @ % IDENTIFIED BY pass3 ; Tworzenie konta o uprawnieniach root-a. GRANT ALL PRIVILEGES ON *.* TO root2 @ % IDENTIFIED BY passroot2 ; TWORZENIE BAZ DANYCH Utworzenie dwóch nowych baz danych. CREATE DATABASE db1; CREATE DATABASE db2; NADAWANIE UPRAWNIEŃ DO BAZ DANYCH Przypisanie dla użytkowników user1 oraz user2 pełnych praw do baz db1 oraz db2. GRANT ALL PRIVILEGES ON db1.* TO user1 @ % ; GRANT ALL PRIVILEGES ON db2.* TO user2 @ % ; ZMIANA HASEŁ UŻYTKOWNIKOM Ustawienie nowych haseł dla użytkowników. Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 9

Oglądamy zawartość tabeli przed zmianą. SELECT Host, User, Password FROM user WHERE User IN ( user1, user2 ); Dokonujemy zmiany haseł. Użycie funkcji PASSWORD jest obowiązkowe. SET PASSWORD FOR user1 @ % = PASSWORD( pass1new ); Tutaj nie używamy funkcji PASSWORD. GRANT USAGE ON *.* TO user2 @ % IDENTIFIED BY pass2new ; Oglądamy zawartość tabeli po zmianie. SELECT Host, User, Password FROM user WHERE User IN ( user1, user2 ); ODBIERANIE UPRAWNIEŃ Odebranie użytkownikowi user3 wszystkich uprawnień do bazy db3. REVOKE ALL PRIVILEGES ON db3.* FROM user3; TWORZENIE TABEL I NADAWANIE DO NICH UPRAWNIEŃ Utworzenie dwóch prostych tabelek. Zwróćmy uwagę na to, że tworzymy tabele w innych niż bieżąca bazach (bo na samym początku wydaliśmy polecenie USE mysql; ). CREATE TABLE db1.tab_1a (id_1a INT PRIMARY KEY, kol_1a VARCHAR(10)); CREATE TABLE db1.tab_1b (id_1b INT PRIMARY KEY, kol_1b VARCHAR(10)); CREATE TABLE db2.tab_2a (id_2a INT PRIMARY KEY, kol_2a VARCHAR(10)); CREATE TABLE db2.tab_2b (id_2b INT PRIMARY KEY, kol_2b VARCHAR(10)); Nadajemy użytkownikowi user1 prawa do tabel użytkownika user2 ; GRANT SELECT, INSERT, UPDATE, DELETE ON db2.tab_2a TO user1 @ % ; GRANT SELECT(kol_2b) ON db2.tab_2b TO user1 @ % ; Nadajemy użytkownikowi user2 pełne pełne prawa do wszystkich obiektów w bazie db1. GRANT ALL PRIVILEGES ON db1.* TO user2 @ % ; SPRAWDZANIE UPRAWNIEŃ Sprawdzenie uprawnień poszczególnych uzytkowników. SHOW GRANTS; bieżący użytkownik. Można też: SHOW GRANTS FOR CURRENT_USER(); SHOW GRANTS FOR root2; SHOW GRANTS FOR user1; SHOW GRANTS FOR user2; SHOW GRANTS FOR user3; OGLĄDAMY ZAWARTOŚĆ TABEL PRZYWILEJÓW SELECT * FROM user; SELECT * FROM db; SELECT * FROM tables_priv; SELECT * FROM columns_priv; SHOW TABLES FROM db1; SHOW TABLES FROM db2; Literatura [1] Lech Banachowski (tłum.). SQL. Język relacyjnych baz danych. WNT Warszawa, 1995. [2] Paul Dubios. MySQL. Podręcznik administratora. Wydawnictwo HELION, 2005. [3] MySQL 5.0 Reference Manual, 2005. (jest to najbardziej aktualne opracowanie na temat bazy MySQL stworzone i na bieżąco aktualizowane przez jej twórców. Książka dostępna w wersji elektronicznej pod adresem http://dev.mysql.com/doc/ ). [4] Richard Stones and Neil Matthew. Od podstaw. Bazy danych i MySQL. Wydawnictwo HELION, 2003. Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 10

[5] Luke Welling and Laura Thomson. MySQL. Podstawy. Wydawnictwo HELION, 2005. Przygotowali: dr inż. Artur Gramacki, dr inż. Jarosław Gramacki 11