Środowisko XAMPP

Wykorzystamy lokalną instalację wieloplatformowego środowiska XAMPP, zawierającego serwer WWW Apache, bazę danych MariaDB oraz język PHPPerl.

Ciekawostka

Baza MariaDB jest forkiem (alternatywną wersją) bazy MySQL. Powstała, gdy baza MySQL została przejęta przez firmę Oracle i zmienił się sposób jej licencjonowania.

Na stronie projektu XAMPP można znaleźć kilka instalatorów. Wybieramy i pobieramy instalator przeznaczony dla naszego systemu operacyjnego, z najnowszą wersją języka PHP.

System Linux

W systemie Linux pobranemu plikowi należy nadać prawo wykonywania, a następnie uruchomić instalację. Można to zrobić za pomocą poleceń w terminalu w katalogu, w którym zapisany został instalator:

Linia 1. $ chmod a plus x xampp minus linux minus x64 minus 8 kropka 1 kropka 10 minus 0 minus installer kropka run. Linia 2. $ sudo kropka prawy ukośnik xampp minus linux minus x64 minus 8 kropka 1 kropka 10 minus 0 minus installer kropka run.

Podczas instalacji możemy odznaczyć opcję XAMPP Developer Files. Środowisko zostanie zainstalowane w katalogu /opt/lampp. Uruchamiamy je poleceniem w terminalu:

Linia 1. $ sudo prawy ukośnik opt prawy ukośnik lampp prawy ukośnik xampp start.
REZYn3IrZvR79
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Możemy też uruchomić panel graficzny do zarządzania środowiskiem, wydając polecenie:

RXQmjYgZx9r7R
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

System Windows

W systemie Microsoft Windows należy pobrany plik kliknąć dwa razy, aby uruchomić instalację. Podczas instalacji:

  • wybieramy OK w pierwszym oknie dialogowym, które sugeruje, aby nie instalować środowiska w katalogu C:\Program Files (ze względu na brak praw do zapisu wprowadzany przez mechanizm User Account Control),

  • w oknie Select Components możemy odznaczyć wszystkie składniki poza MySQL i PHP (domyślnie zaznaczony),

  • katalog instalacyjny umieszczamy w głównym katalogu partycji, np. C:\xampp.

Po instalacji powinien zostać otworzony panel do zarządzania środowiskiem. Uruchamiamy w nim serwery ApacheMySQL, klikając przyciski Start.

Rl2CiiHjBKWc3
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Systemy bazodanowe działają na podstawie architektury klient‑serwer. Dlatego konfiguracja systemowego firewalla musi umożliwiać łączenie się z serwerem bazy przynajmniej dla połączeń lokalnych. Jeżeli podczas instalacji lub uruchomienia systemu bazodanowego pojawi się monit firewalla, należy zezwolić na połączenia.

phpMyAdmin

Podstawowym narzędziem obsługi baz danych jest wiersz poleceń – z jego użyciem zapoznamy się w sekcji „Prezentacja multimedialna”. Na razie do wykonywania operacji na bazie wykorzystamy interfejs graficzny w postaci aplikacji webowej phpMyAdmin, która stanowi część środowiska XAMPP. W domyślnej konfiguracji aplikacja nie wymaga podawania loginu i hasła w trakcie uzyskiwania dostępu do baz danych.

Do realizacji innych e‑materiałów dotyczących użycia języka SQL w środowisku XAMPP opisana zmiana domyślnej konfiguracji nie jest wymagana.

Przykład 1

Na potrzeby tego e‑materiału wymusimy logowanie użytkownika do bazy danych w narzędziu phpMyAdmin. Zmienimy odpowiednią opcję w pliku konfiguracyjnym config.inc.php.

W systemie Linux otwieramy plik z podniesionymi uprawnieniami w edytorze tekstu (np. xed lub gedit):

Linia 1. $ sudo xed prawy ukośnik opt prawy ukośnik lampp prawy ukośnik phpmyadmin prawy ukośnik config kropka inc kropka php.

W systemie Windows otwieramy w Notatniku plik C:\xampp\phpmyadmin\config.inc.php.

Zmieniamy wiersz:

Linia 1. $cfg otwórz nawias kwadratowy apostrof Servers apostrof zamknij nawias kwadratowy otwórz nawias kwadratowy $i zamknij nawias kwadratowy otwórz nawias kwadratowy apostrof auth podkreślnik type apostrof zamknij nawias kwadratowy znak równości apostrof config apostrof średnik.

na:

Linia 1. $cfg otwórz nawias kwadratowy apostrof Servers apostrof zamknij nawias kwadratowy otwórz nawias kwadratowy $i zamknij nawias kwadratowy otwórz nawias kwadratowy apostrof auth podkreślnik type apostrof zamknij nawias kwadratowy znak równości apostrof cookie apostrof średnik.

Zmiany zapisujemy.

Uruchamiamy przeglądarkę internetową i w polu adresu wpisujemy localhost/phpmyadmin. Jeżeli środowisko XAMPP jest uruchomione, powinniśmy zobaczyć stronę powitalną z formularzem logowania.

RGvsHVcv1LJvF
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Logujemy się jako użytkownik root, bez podawania hasła. Po zalogowaniu, klikamy link do zakładki SQL, aby można było wpisywać polecenia SQL w polu tekstowym: Uruchom zapytanie/zapytania SQL na serwerze "localhost". Wykonanie zapytania następuje po kliknięciu przycisku Wykonaj. Po wykonaniu zapytania ponowne wyświetlenie pola tekstowego, służącego do ich wpisywania, jest możliwe po kliknięciu przycisku Pokaż okno zapytań.

Aby wylogować się z aplikacji, należy kliknąć ikonę Wyjście w lewym górnym rogu, poniżej nazwy aplikacji, obok ikony Wejście przedstawiającej dom.

RrKplmmPfYoxa
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Systemowa baza mysql

Zacznijmy od sprawdzenia, jakie bazy są dostępne:

Przykład 2
Linia 1. SHOW DATABASES średnik.

W wyniku zapytania wyświetli się lista baz, która widoczna jest również w lewym panelu aplikacji w postaci drzewa.

Polecenia systemu bazodanowego oraz języka SQL pisane są wielkimi literami dla czytelności. Jeżeli wprowadzamy je ręcznie, nie musimy trzymać się tej konwencji i możemy używać małych liter.

Kolejne polecenie wyświetli listę tabel z systemowej bazy danych mysql:

Przykład 3
Linia 1. USE mysql średnik. Linia 2. SHOW TABLES średnik.

Polecenie USE służy do wskazania bazy, z którą chcemy pracować. Po jego wykonaniu w phpMyAdmin zobaczymy błąd Error: #1046 Nie wybrano żadnej bazy danych, który ignorujemy. Drugie polecenie pokaże tabele zawarte w bazie.

Ważne!

Aby uniknąć konieczności ciągłego wpisywania polecenia USE oraz błędu Error: #1046 Nie wybrano żadnej bazy danych, przed wykonywaniem zapytań wybieramy bazę danych mysql, klikając jej nazwę na liście w lewym panelu, a następnie link do zakładki SQL. Zauważymy wtedy etykietę Wykonanie zapytania/zapytań SQL do bazy danych mysql: nad polem tekstowym do wpisywania zapytań.

W niektórych zapytaniach nazwę bazy danych możemy podać, oddzielając ją kropką od nazwy tabeli, np. mysql.user.

Systemowa baza mysql zawiera dane o bazach, użytkownikach i o ich uprawnieniachuprawnienia użytkownikówuprawnieniach. Poznajmy bliżej tabelę user:

Przykład 4
Linia 1. DESCRIBE mysql kropka user średnik.

Polecenie DESCRIBE wyświetla nazwy, typy i ograniczenia podanej tabeli.

Rb70ite0XDCwF
Fragment wyników zwróconych przez zapytanie DESCRIBE mysql.user.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Przykład 5
Linia 1. SELECT host przecinek user przecinek plugin przecinek authentication podkreślnik string FROM user średnik.

Kwerenda SELECT wyświetli zawartość podanych pól. Zobaczymy, że w tabeli user zapisane są konta użytkowników i przywileje globalne. Konto każdego użytkownika powiązane jest z hostem, z którego może logować się do bazy danych. Nazwa localhost oznacza komputer lokalny.

R1HBiDbCH2knp
Przykładowe wyniki zapytania wybierającego dane z tabeli user.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Konto root

Zaczniemy od ustawienia hasła dla konta root, które posiada wszystkie uprawnienia i służy do zarządzania systemem bazodanowym. W zakładce SQL wykonujemy po kolei następujące polecenia:

Przykład 6
Linia 1. UPDATE user SET plugin znak równości apostrof mysql podkreślnik native podkreślnik password apostrof WHERE user znak równości apostrof root apostrof średnik. Linia 2. UPDATE user SET authentication podkreślnik string znak równości PASSWORD otwórz nawias okrągły apostrof zaq1 at WSX apostrof zamknij nawias okrągły WHERE user znak równości apostrof root apostrof średnik.

Zadaniem pierwszego polecenia jest zmiana metody uwierzytelniania na mysql_native_password, która nie jest uznawana za bezpieczną w zastosowaniach produkcyjnych, ale w zupełności wystarcza do ćwiczeń. Drugie polecenie ustawia hasło, które w postaci zaszyfrowanej zapisane będzie w polu authentication_string.

Jeżeli próba wykonania powyższych poleceń zwróci błąd #1348 --- Column 'plugin' is not updatable, oznaczać to może, że konfiguracja bazy nie pozwala na użycie klauzuli UPDATE do zmiany sposobu logowania się, w tym hasła użytkownika root. Wtedy użyjemy klauzuli ALTER USER:

Przykład 7
Linia 1. SET old podkreślnik passwords znak równości 0 średnik. Linia 2. ALTER USER root at localhost IDENTIFIED BY apostrof zaq1 at WSX apostrof średnik.

Pierwsze polecenie ma za zadanie ustawić domyślną metodę uwierzytelniania mysql_native_password poprzez wyłączenie starszej metody old_passwords. Drugie polecenie zmienia hasło użytkownika root, który będzie łączył się z bazą z hosta localhost, czyli lokalnie, na ciąg znaków podany po klauzuli IDENTIFIED BY.

Po dokonaniu zmian możemy jeszcze spróbować wykonać poniższe polecenia:

Przykład 8
Linia 1. FLUSH PRIVILEGES średnik. Linia 2. SELECT host przecinek user przecinek plugin przecinek authentication podkreślnik string FROM user średnik.
Ważne!

Polecenie FLUSH PRIVILEGES powoduje ponowne odczytanie przez system bazodanowy uprawnień użytkowników i załadowanie ich do pamięci. W dokumentacji można przeczytać, że wymagane jest tylko wtedy, kiedy do modyfikacji kont i uprawnień używa się klauzul INSERT, UPDATE, DELETE, w praktyce można je stosować zawsze.

Ponieważ zmieniliśmy hasło dla konta root i odświeżyliśmy uprawnienia, przy próbie wykonania ostatniej operacji zobaczymy komunikat błędu informującego o utraceniu połączenia z bazą.

RJikfjFZpEdA5
Komunikat błędu po zmianie hasła dla użytkownika root i odświeżeniu uprawnień.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Powinniśmy więc wylogować się i zalogować jeszcze raz na konto użytkownika root, podając ustawione hasło. Wtedy będziemy mogli wykonać ostatnie zapytanie.

Dodawanie użytkowników

Spróbujmy dodać użytkownika o nazwie adam. Wykonajmy zapytanie:

Przykład 9
Linia 1. CREATE USER apostrof adam apostrof IDENTIFIED BY apostrof zaq1 at WSX apostrof średnik.

Polecenie CREATE USER tworzy konto użytkownika o podanej nazwie i zabezpiecza go podanym hasłem. Utworzone w ten sposób konto nie ma żadnych uprawnień i w zależności od konfiguracji serwera może mieć dostęp do bazy z dowolnego komputera. Sprawdzamy to za pomocą używanego już wcześniej zapytania:

Linia 1. SELECT host przecinek user przecinek plugin przecinek authentication podkreślnik string FROM user średnik.
RFXnY8QNqKBW8
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Znak % w polu host oznacza dostęp z dowolnego komputera, a ponieważ nie jest to bezpieczne, konto usuniemy za pomocą klauzuli DROP:

Przykład 10
Linia 1. DROP USER apostrof adam apostrof at apostrof procent apostrof średnik.

Znaku @ używamy do oddzielenia nazwy użytkownika od nazwy hosta.

Wykorzystamy teraz inną możliwość tworzenia konta, ograniczając zakres dostępu do komputera lokalnego:

Przykład 11
Linia 1. GRANT USAGE ON asterysk kropka asterysk TO apostrof adam apostrof at apostrof localhost apostrof IDENTIFIED BY apostrof zaq1 at WSX apostrof średnik.

Klauzula GRANT służy do nadawania uprawnień, a w tym wypadku tworzy również konto użytkownika. Symbole *.* oznaczają, że przyznajemy uprawnienia dla wszystkich baz (pierwsza gwiazdka) i wszystkich tabel (druga gwiazdka). Znak @ oddziela nazwę użytkownika od nazwy hosta. Przywilej USAGE oznacza brak jakichkolwiek uprawnień poza dostępem do bazy.

Ważne!

Przyznając jakiekolwiek uprawnienia użytkownikom, należy kierować się zasadą minimalnych wymaganych uprawnień potrzebnych do wykonania określonych czynności. Np. zastąpienie ciągu localhost znakiem % dałoby użytkownikowi możliwość logowania się z dowolnego komputera, co zwiększyłoby ryzyko kompromitacji serwera.

Ćwiczenie 1

Wyloguj się z aplikacji i zaloguj się za pomocą utworzonego konta. Wykonaj polecenie:

Linia 1. SHOW DATABASES średnik.
Ćwiczenie 2

Utwórz konto dla użytkownika ewa, zabezpieczone hasłem zaq1@WSX.

Tworzenie bazy

Utworzymy bazę danych i przyznamy do niej uprawnienia. Do aplikacji phpMyAdmin logujemy się jako użytkownik root i wydajemy polecenie tworzące bazę danych zajecia:

Przykład 12
Linia 1. CREATE DATABASE zajecia średnik.

Polecenie tworzące bazę danych ma kilka odmian użytecznych wtedy, kiedy nie wiemy, czy dana baza już istnieje:

  • CREATE OR REPLACE DATABASE zajecia; – jeżeli baza istnieje, zostanie zastąpiona nową,

  • CREATE DATABASE IF NOT EXISTS zajecia; – jeżeli baza nie istnieje, zostanie utworzona.

Podczas tworzenia bazy danych ustawiane są dla niej dodatkowe parametry, z których najważniejsze to zestaw znaków (ang. character set), używanych do przechowywania tekstów oraz sposób sortowania tekstów (ang. collation).

Podane polecenia pokażą dostępne ustawienia porównywania oraz użyte ustawienia zestawu i porównywania znaków:

Przykład 13
Linia 1. SHOW COLLATION średnik. Linia 2. SELECT asterysk FROM INFORMATION podkreślnik SCHEMA kropka SCHEMATA średnik.

Po wydaniu drugiego polecenia zauważymy, że baza zajecia przejęła domyślne ustawienia serwera, które mogą się różnić w zależności od dystrybucji, np. latin1latin1_swedish_ci lub utf8mb4utf8mb4_general_ci.

R1I1N1s70xnhb
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Zestaw znaków i sposób sortowania można ustawiać na poziomie serwera, bazy danych, tabel, a nawet kolumn. Dla bazy danych przechowującej teksty polskie polecane ustawienia to: utf8utf8_polish_ci. Aby je zastosować, mamy dwie możliwości: możemy usunąć bazę, a następnie utworzyć ją za pomocą polecenia z dodatkowymi opcjami.

Przykład 14
Linia 1. DROP DATABASE zajecia średnik. Linia 2. CREATE DATABASE IF NOT EXISTS zajecia CHARACTER SET znak równości apostrof utf8 apostrof COLLATE znak równości apostrof utf8 podkreślnik polish podkreślnik ci apostrof średnik.

Jeżeli nie chcemy usuwać bazy, możemy spróbować zmienić domyślne ustawienia:

Przykład 15
Linia 1. ALTER DATABASE zajecia CHARACTER SET znak równości apostrof utf8 apostrof średnik. Linia 2. ALTER DATABASE zajecia COLLATE znak równości apostrof utf8 podkreślnik polish podkreślnik ci apostrof średnik.

Ponowne wykonanie zapytania SELECT * FROM INFORMATION_SCHEMA.SCHEMATA; pokaże, czy udało się ustawić odpowiednie opcje.

Uprawnienia

Po utworzeniu bazy danych możemy przyznać do niej uprawnienia wybranemu użytkownikowi:

Przykład 16
Linia 1. GRANT ALL PRIVILEGES ON zajecia kropka asterysk TO apostrof adam apostrof at localhost średnik. Linia 2. FLUSH PRIVILEGES średnik.

Klauzula GRANT ALL PRIVILEGES przyznaje wszystkie uprawnienia do wskazanej bazy użytkownikowi łączącemu się z podanego hosta. Przegląd uprawnień możliwy jest po wydaniu zapytania:

Przykład 17
Linia 1. SHOW GRANTS FOR apostrof adam apostrof at apostrof localhost apostrof średnik.
R1FXTMx2ONjgD
Uprawnienia użytkownika adam.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Uprawnienia możemy też odczytać bezpośrednio z tabeli db bazy systemowej mysql:

Przykład 18
Linia 1. DESCRIBE mysql kropka db średnik. Linia 2. SELECT asterysk FROM mysql kropka db WHERE user znak równości apostrof adam apostrof średnik.

Po wykonaniu drugiego zapytania zobaczymy, że uprawnienia to nie tylko pełen zestaw podstawowych poleceń CRUDcrudCRUD – dotyczą one wszystkich operacji służących do zarządzania systemem bazodanowym.

Dla przykładu ograniczymy uprawnienia użytkownika ewa, logującego się z komputera lokalnego tylko do odczytywania tabel z bazy zajecia:

Przykład 19
Linia 1. GRANT SELECT ON zajecia kropka asterysk TO apostrof ewa apostrof at apostrof localhost apostrof średnik. Linia 2. FLUSH PRIVILEGES średnik.
Ćwiczenie 3

Użyj odpowiedniego polecenia do wyświetlenia uprawnień użytkownika ewa.

Słownik

crud
crud

(ang. Create, Read, Update, Delete) zestaw podstawowych operacji wykonywanych na bazach danych, możliwość tworzenia baz i tabel (create), odczytywania danych (read), zmiany danych (update) i ich usuwania (delete)

system zarządzania bazą danych
system zarządzania bazą danych

oprogramowanie do zarządzania bazą danych, najczęściej działające w architekturze klient – serwer jako serwer udostępniający klientom dane; implementuje mechanizmy do administrowania danymi, w tym operacje na danych za pomocą języka SQL

uprawnienia użytkowników
uprawnienia użytkowników

zestaw czynności, które użytkownik może wykonać na serwerze bazodanowym; do najważniejszych należy możliwość logowania się i wykonywania operacji CRUD

XAMPP
XAMPP

skrót opisujący środowisko programistyczne, którym można zarządzać za pomocą aplikacji GUI (X) w systemie Linux lub Windows z zainstalowanymi serwerami: WWW – Apache (A), bazy danych – MariaDB (M) oraz języków działających po stronie serwera – PHP (P) i Perl (P)