Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00257 005411 13644902 na godz. na dobę w sumie
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV - książka
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV - książka
Autor: Liczba stron: 424
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-2580-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Wykorzystaj potencjał PHP oraz MySQL w Twoich serwisach WWW!

PHP i MySQL to najpopularniejszy tandem webmasterski. Ilość serwisów opartych na tym połączeniu jest nie do ogarnięcia. Skąd taka popularność? Niezależnie od innych zalet atutem tego rozwiązania jest prostota. Już kilka chwil wystarczy, żeby rozpocząć przygodę z profesjonalnym tworzeniem serwisów WWW. A jeżeli poświęcisz trochę więcej czasu, poznasz i wykorzystasz jeszcze więcej możliwości PHP i MySQL. Ale czy rzeczy proste nie mogą być jeszcze prostsze?

Mogą. Z książką 'PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV' błyskawicznie przebrniesz przez proces instalacji wszystkich niezbędnych komponentów - niezależnie od systemu, którego używasz. Autor opisuje tu sposób instalacji na platformach Windows, MacOS X oraz Linux. Po udanej instalacji napiszesz swój pierwszy skrypt, a następnie przejdziesz do kolejnych, coraz bardziej zaawansowanych tematów. Wśród nich znajdziesz opisy takich zagadnień, jak: język SQL, składnia PHP, nawiązywanie połączenia z bazą, publikowanie treści znajdujących się w bazie. Ponadto zdobędziesz wiedzę z zakresu administrowania bazą MySQL, systemów zarządzania treścią, zarządzania sesją czy też wykorzystania wyrażeń regularnych. Książka ta jest nieocenioną pomocą dla wszystkich osób zaczynających przygodę ze stronami WWW oraz językami PHP i SQL.

Twórz dynamiczne, bogate w treści i łatwe w zarządzaniu witryny WWW!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV Autor: Kevin Yank T³umaczenie: Daniel Kaczmarek ISBN: 978-83-246-2580-2 Tytu³ orygina³u: Build Your Own Database Driven Web Site Using PHP MySQL Format: 158×235, stron: 424 Wykorzystaj potencja³ PHP oraz MySQL w Twoich serwisach WWW! (cid:127) Jak zainstalowaæ i uruchomiæ w³asny serwer WWW? (cid:129) Jak stworzyæ autorski system zarz¹dzania treœci¹? (cid:129) Jak kontrolowaæ dostêp do stron WWW? PHP i MySQL to najpopularniejszy tandem webmasterski. Iloœæ serwisów opartych na tym po³¹czeniu jest nie do ogarniêcia. Sk¹d taka popularnoœæ? Niezale¿nie od innych zalet atutem tego rozwi¹zania jest prostota. Ju¿ kilka chwil wystarczy, ¿eby rozpocz¹æ przygodê z profesjonalnym tworzeniem serwisów WWW. A je¿eli poœwiêcisz trochê wiêcej czasu, poznasz i wykorzystasz jeszcze wiêcej mo¿liwoœci PHP i MySQL. Ale czy rzeczy proste nie mog¹ byæ jeszcze prostsze? Mog¹. Z ksi¹¿k¹ „PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV” b³yskawicznie przebrniesz przez proces instalacji wszystkich niezbêdnych komponentów – niezale¿nie od systemu, którego u¿ywasz. Autor opisuje tu sposób instalacji na platformach Windows, MacOS X oraz Linux. Po udanej instalacji napiszesz swój pierwszy skrypt, a nastêpnie przejdziesz do kolejnych, coraz bardziej zaawansowanych tematów. Wœród nich znajdziesz opisy takich zagadnieñ, jak: jêzyk SQL, sk³adnia PHP, nawi¹zywanie po³¹czenia z baz¹, publikowanie treœci znajduj¹cych siê w bazie. Ponadto zdobêdziesz wiedzê z zakresu administrowania baz¹ MySQL, systemów zarz¹dzania treœci¹, zarz¹dzania sesj¹ czy te¿ wykorzystania wyra¿eñ regularnych. Ksi¹¿ka ta jest nieocenion¹ pomoc¹ dla wszystkich osób zaczynaj¹cych przygodê ze stronami WWW oraz jêzykami PHP i SQL. (cid:129) Instalacja systemu na platformach Windows, Linux oraz MacOS X (cid:129) MySQL – podstawowe zagadnienia (cid:129) PHP – sk³adnia, podstawowe polecenia i struktury (cid:129) Nawi¹zywanie po³¹czenia z baz¹ danych z poziomu PHP (cid:129) Publikacja treœci zawartych w bazie MySQL (cid:129) Zasady projektowania relacyjnej bazy danych (cid:129) Tworzenie systemu zarz¹dzania treœci¹ (cid:129) Wykorzystanie wyra¿eñ regularnych (cid:129) Kontrola dostêpu do stron (cid:129) Zarz¹dzanie sesj¹ oraz „ciasteczkami” (cid:129) Zadania administracyjne w bazie MySQL (cid:129) Tworzenie zaawansowanych zapytañ MySQL (cid:129) Przechowywanie i wykorzystanie danych binarnych Twórz dynamiczne, bogate w treœci i ³atwe w zarz¹dzaniu witryny WWW! Spis treści 5 Spis treści Rozdział 1. Przedmowa .................................................................................... 11 Instalacja ....................................................................................... 19 Własny serwer WWW .................................................................................................... 20 Instalacja w systemie Windows ...................................................................................... 21 Jednoczesna instalacja wszystkich komponentów ................................................. 21 Instalacja poszczególnych komponentów .............................................................. 26 Instalowanie w systemie Mac OS X ............................................................................... 34 Jednoczesna instalacja wszystkich komponentów ................................................. 34 Instalacja poszczególnych komponentów .............................................................. 37 Instalacja w systemie Linux ............................................................................................ 43 Instalowanie serwera baz danych MySQL ............................................................. 44 Instalowanie języka PHP ....................................................................................... 47 Zadania poinstalacyjne ................................................................................................... 53 O co zapytać dostawcę usług internetowych? ................................................................. 56 Nasz pierwszy skrypt PHP .............................................................................................. 57 Narzędzia gotowe, pora do pracy ................................................................................... 60 Rozdział 2. Wprowadzenie do systemu MySQL .................................................. 61 Wprowadzenie do baz danych ........................................................................................ 61 Logowanie się na serwerze MySQL ............................................................................... 62 SQL — Strukturalny Język Zapytań ............................................................................... 67 Tworzenie bazy danych .................................................................................................. 67 Tworzenie tabel .............................................................................................................. 68 Wstawianie danych do tabeli .......................................................................................... 70 Przeglądanie danych przechowywanych w bazie ........................................................... 72 Modyfikowanie danych przechowywanych w bazie ...................................................... 74 Usuwanie danych przechowywanych w bazie ................................................................ 75 Niech PHP sam napisze kod SQL ................................................................................... 75 Rozdział 3. Wprowadzenie do języka PHP ......................................................... 77 Podstawowe polecenia i składnia ................................................................................... 79 Zmienne, operatory i komentarze ................................................................................... 81 Tablice ............................................................................................................................ 82 Interakcja z użytkownikiem i formularze ....................................................................... 84 Struktury sterujące .......................................................................................................... 95 6 PHP i MySQL. Witryna WWW oparta na bazie danych Ukrywanie spoin ........................................................................................................... 103 Nie nagłaśniaj swoich decyzji w zakresie technologii ......................................... 104 Używaj szablonów PHP ....................................................................................... 105 Wiele szablonów, jeden kontroler ........................................................................ 107 Dajcie mi bazę danych! ................................................................................................ 110 Rozdział 4. Publikowanie w sieci WWW danych przechowywanych w bazie MySQL ............................................................................. 111 Idea działania ................................................................................................................ 111 Łączenie się z bazą MySQL za pomocą PHP ............................................................... 113 Wysyłanie zapytań SQL za pomocą języka PHP .......................................................... 118 Obsługa zbiorów wyników zapytania SELECT ........................................................... 120 Wstawianie danych do bazy ......................................................................................... 125 Usuwanie danych z bazy .............................................................................................. 133 Misja zakończona ......................................................................................................... 139 Rozdział 5. Projektowanie relacyjnych baz danych .......................................... 141 Umożliwianie autorom podpisywania kawałów ........................................................... 142 Prosta reguła: dane trzeba przechowywać osobno ........................................................ 143 Korzystanie z wielu tabel ............................................................................................. 147 Proste relacje ................................................................................................................ 151 Relacje typu wiele-do-wielu ......................................................................................... 153 Jeden za wszystkich, wszyscy za jednego! ................................................................... 155 Rozdział 6. Programowanie strukturalne w języku PHP .................................... 157 Dołączanie plików ........................................................................................................ 158 Dołączanie zawartości HTML ............................................................................. 158 Dołączanie kodu PHP .......................................................................................... 160 Rodzaje dołączania .............................................................................................. 164 Współużytkowane pliki dołączane ....................................................................... 165 Funkcje użytkownika i biblioteki funkcji ..................................................................... 167 Zasięg zmiennych i dostęp do zmiennych globalnych ......................................... 169 Programowanie strukturalne w praktyce: funkcje pomocnicze szablonów ................... 173 Najlepszy sposób .......................................................................................................... 176 Rozdział 7. System zarządzania zawartością ................................................... 177 Strona startowa systemu ............................................................................................... 178 Zarządzanie autorami ................................................................................................... 181 Usuwanie autorów ............................................................................................... 183 Dodawanie i edytowanie autorów ........................................................................ 186 Zarządzanie kategoriami ............................................................................................... 190 Zarządzanie kawałami .................................................................................................. 195 Wyszukiwanie kawałów ...................................................................................... 195 Dodawanie i edytowanie kawałów ....................................................................... 201 Usuwanie kawałów .............................................................................................. 211 Podsumowanie .............................................................................................................. 212 Rozdział 8. Formatowanie zawartości przy użyciu wyrażeń regularnych ............ 215 Wyrażenia regularne ..................................................................................................... 216 Formatowanie łańcuchów tekstu za pomocą wyrażeń regularnych .............................. 220 Wytłuszczenie i kursywa ..................................................................................... 221 Akapity ................................................................................................................ 223 Hiperłącza ............................................................................................................ 225 Domykanie znaczników ....................................................................................... 228 Składamy wszystkie elementy w jedną całość ..................................................... 229 Automatyczne zatwierdzanie zawartości ...................................................................... 232 Spis treści 7 Rozdział 9. Obsługa cookies i sesji oraz kontrola dostępu ............................... 233 Cookies ......................................................................................................................... 233 Obsługa sesji w PHP ..................................................................................................... 238 Prosty koszyk na zakupy ...................................................................................... 240 Kontrola dostępu .......................................................................................................... 248 Projekt bazy danych ............................................................................................. 248 Kod źródłowy kontrolera ..................................................................................... 252 Biblioteka funkcji ................................................................................................ 257 Zarządzanie hasłami i rolami ............................................................................... 266 Kolejne wyzwanie, czyli moderowanie kawałów ................................................ 273 Nieograniczone możliwości .......................................................................................... 275 Rozdział 10. Administrowanie bazą MySQL ....................................................... 277 phpMyAdmin ............................................................................................................... 278 Kopie zapasowe baz danych MySQL ........................................................................... 282 Wykonywanie kopii za pomocą programu mysqldump ....................................... 282 Kopie przyrostowe w binarnym dzienniku aktualizacji ....................................... 283 Kontrola dostępu w MySQL ......................................................................................... 286 Nadawanie uprawnień za pomocą polecenia GRANT ......................................... 287 Odbieranie uprawnień przy użyciu polecenia REVOKE ..................................... 289 Porady na temat kontroli dostępu ......................................................................... 290 Problem braku dostępu ........................................................................................ 292 Sprawdzanie i naprawianie plików danych MySQL ..................................................... 293 Lepiej się ubezpieczać, niż potem żałować .................................................................. 295 Rozdział 11. Zaawansowane zapytania SQL ...................................................... 297 Sortowanie wyników zapytania SELECT .................................................................... 297 Ustawianie limitów dla zapytań .................................................................................... 299 Blokowanie tabel .......................................................................................................... 300 Aliasy nazw kolumn i tabel .......................................................................................... 302 Grupowanie wyników zapytania SELECT ................................................................... 305 Złączenie lewostronne .................................................................................................. 306 Ograniczanie wyników za pomocą klauzuli HAVING ................................................. 309 Dalsze lektury ............................................................................................................... 310 Rozdział 12. Dane binarne ................................................................................ 313 Częściowo dynamiczne strony WWW ......................................................................... 313 Obsługa ładowania plików ........................................................................................... 319 Przypisywanie plikom niepowtarzalnych nazw ................................................... 322 Rejestrowanie w bazie danych ładowanych plików ...................................................... 324 Binarne typy kolumn ........................................................................................... 325 Zapisywanie plików ............................................................................................. 327 Przeglądanie zapisanych plików .......................................................................... 328 Kompletny skrypt ......................................................................................................... 332 Problemy związane z wielkimi plikami ........................................................................ 338 Rozmiar pakietów MySQL .................................................................................. 338 Ograniczenia czasu działania skryptów PHP ....................................................... 338 Zakończenie .................................................................................................................. 339 Dodatek A Składnia MySQL ........................................................................... 341 Instrukcje języka SQL obsługiwane przez MySQL ...................................................... 342 ALTER TABLE ................................................................................................... 342 ANALYZE TABLE ............................................................................................. 344 CREATE DATABASE ........................................................................................ 344 CREATE INDEX ................................................................................................ 345 8 PHP i MySQL. Witryna WWW oparta na bazie danych CREATE TABLE ................................................................................................ 345 DELETE .............................................................................................................. 347 DESCRIBE/DESC ............................................................................................... 348 DROP DATABASE ............................................................................................ 348 DROP INDEX ..................................................................................................... 348 DROP TABLE ..................................................................................................... 348 EXPLAIN ............................................................................................................ 348 GRANT ............................................................................................................... 349 INSERT ............................................................................................................... 349 LOAD DATA INFILE ......................................................................................... 350 LOCK/UNLOCK TABLES ................................................................................. 351 OPTIMIZE TABLE ............................................................................................. 352 RENAME TABLE ............................................................................................... 352 REPLACE ........................................................................................................... 353 REVOKE ............................................................................................................. 353 SELECT ............................................................................................................... 353 SET ...................................................................................................................... 359 SHOW ................................................................................................................. 359 TRUNCATE ........................................................................................................ 360 UNLOCK TABLES ............................................................................................. 361 UPDATE ............................................................................................................. 361 USE ...................................................................................................................... 362 Dodatek B Funkcje MySQL ............................................................................ 363 Funkcje przepływu sterowania ..................................................................................... 363 Funkcje matematyczne ................................................................................................. 364 Funkcje tekstowe .......................................................................................................... 366 Funkcje daty i czasu ..................................................................................................... 370 Pozostałe funkcje .......................................................................................................... 374 Funkcje używane w klauzulach GROUP BY ............................................................... 378 Dodatek C Typy danych dla kolumn tabel MySQL ........................................... 379 Typy liczbowe .............................................................................................................. 380 Typy znakowe .............................................................................................................. 383 Typy daty i czasu .......................................................................................................... 387 Dodatek D Funkcje PHP współpracujące z MySQL .......................................... 389 Najczęściej używane funkcje mysqli_* w języku PHP ................................................ 389 mysqli_affected_rows .......................................................................................... 390 mysqli_character_set_name ................................................................................. 390 mysqli_close ........................................................................................................ 390 mysqli_connect .................................................................................................... 390 mysqli_connect_errno .......................................................................................... 391 mysqli_connect_error .......................................................................................... 391 mysqli_data_seek ................................................................................................. 391 mysqli_errno ........................................................................................................ 392 mysqli_error ......................................................................................................... 392 mysqli_fetch_all .................................................................................................. 392 mysqli_fetch_array .............................................................................................. 393 mysqli_fetch_assoc .............................................................................................. 393 mysqli_fetch_field ............................................................................................... 393 mysqli_fetch_field_direct .................................................................................... 393 mysqli_fetch_fields .............................................................................................. 394 Spis treści 9 mysqli_fetch_lengths ........................................................................................... 394 mysqli_fetch_object ............................................................................................. 394 mysqli_fetch_row ................................................................................................ 395 mysqli_field_count .............................................................................................. 395 mysqli_field_seek ................................................................................................ 395 mysqli_field_tell .................................................................................................. 395 mysqli_free_result ............................................................................................... 395 mysqli_get_client_info ........................................................................................ 395 mysqli_get_client_version ................................................................................... 396 mysqli_get_host_info ........................................................................................... 396 mysqli_get_proto_info ......................................................................................... 396 mysqli_get_server_info ........................................................................................ 396 mysqli_get_server_version .................................................................................. 396 mysqli_info .......................................................................................................... 396 mysqli_insert_id .................................................................................................. 397 mysqli_num_fields ............................................................................................... 397 mysqli_num_rows ................................................................................................ 397 mysqli_ping ......................................................................................................... 397 mysqli_query ....................................................................................................... 397 mysqli_real_escape_string ................................................................................... 398 mysqli_real_query ............................................................................................... 398 mysqli_select_db ................................................................................................. 398 mysqli_set_charset ............................................................................................... 398 mysqli_stat ........................................................................................................... 399 mysqli_store_result .............................................................................................. 399 mysqli_thread_id ................................................................................................. 399 mysqli_use_result ................................................................................................ 399 Skorowidz .................................................................................... 401 Rozdział 10. Administrowanie bazą MySQL Sercem niemal każdej dobrze zaprojektowanej witryny tematycznej jest relacyjna baza danych. W tej książce utworzyliśmy bazę danych przy użyciu systemu relacyjnych baz danych MySQL. Programiści witryn internetowych chętnie wybierają MySQL, ponieważ jest darmowy, a także ze względu na łatwość uruchomienia. Jak się przeko- naliśmy w rozdziale 1., „Instalacja”, nowy użytkownik, uzbrojony w odpowiednie instruk- cje, może zainstalować i uruchomić serwer MySQL w czasie krótszym niż 30 minut — a przy niewielkim doświadczeniu nawet w krótszym niż dziesięć! Ten, kto zamierza wykorzystać serwer MySQL tylko do wypróbowania przykładów i poeksperymentowania, prawdopodobnie nie potrzebuje niczego poza opisem procesu instalacji, który omówiliśmy w rozdziale 1., „Instalacja”. Natomiast czytelnik, który chce zbudować bazę danych będącą podstawą dla prawdziwej witryny WWW — na przykład witryny firmowej — powinien zapoznać się jeszcze z kilkoma zagadnieniami, zanim zacznie polegać na serwerze MySQL w codziennej pracy. Najpierw, zgodnie z obietnicą, którą złożyłem w rozdziale 2., pokażę, jak skonfiguro- wać narzędzie phpMyAdmin, aby przeglądać i edytować bazy danych oraz administrować nimi z poziomu przeglądarki internetowej. Korzystanie z phpMyAdmin jest generalnie o wiele łatwiejsze niż zmaganie się z wierszem poleceń serwera MySQL, zwłaszcza gdy serwer ten działa na innym komputerze. Później zajmiemy się kopiami zapasowymi. Tworzenie kopii zapasowych danych waż- nych dla nas albo naszej firmy powinno mieć wysoką pozycję na liście priorytetów administratora. Niestety, konfigurowanie wykonywania kopii zapasowych nie należy do najciekawszych obowiązków administratora, więc zazwyczaj taka procedura tworzona jest jednorazowo, z konieczności i uznawana za „wystarczająco dobrą” dla wszystkich zastosowań. Każdy, kto dotychczas na pytanie: „Czy powinniśmy zrobić kopie zapa- sowe naszych baz danych?” odpowiadał: „W porządku, zrobimy kopie razem z całą 278 PHP i MySQL. Witryna WWW oparta na bazie danych resztą”, powinien uważnie przeczytać ten rozdział. Zademonstrujemy, dlaczego stan- dardowe rozwiązanie tworzenia kopii zapasowych jest niewystarczające przy wielu instalacjach MySQL oraz pokażemy właściwą metodę wykonywania i przywracania kopii zapasowej bazy MySQL. W rozdziale 1., „Instalacja”, skonfigurowaliśmy serwer MySQL tak, aby pozwalał na łączenie się jako specjalny użytkownik root z dowolnie wybranym hasłem. Użytkownik root w MySQL (który zresztą nie ma nic wspólnego z użytkownikiem root w Linuksie i podobnych mu systemach) ma prawa odczytu i zapisu do wszystkich baz i tabel. W wielu organizacjach konieczne jest tworzenie użytkowników mających dostęp tylko do poszczególnych baz i tabel oraz ograniczanie w jakiś sposób tego dostępu (na przy- kład dostęp do pewnej tabeli z prawem tylko do odczytu). W tym rozdziale dowiemy się również, jak umożliwić takie obostrzenia przy użyciu dwóch nowych poleceń MySQL, czyli GRANT i REVOKE. W pewnych sytuacjach, takich jak zaniki prądu, bazy MySQL mogą ulec uszkodze- niu. W takim przypadku można się jednak odwołać do sporządzonych wcześniej kopii zapasowych. Zakończymy przegląd administrowania bazami MySQL, poznając narzę- dzie do sprawdzania i naprawiania prostych uszkodzeń baz. phpMyAdmin Podobnie jak większość kodu prezentowanego w książce, phpMyAdmin1 to skrypt PHP przeznaczony do komunikowania się z serwerem MySQL za pośrednictwem stron WWW generowanych „w locie”. Jednak zamiast prezentować użytkownikom strony miłe dla oka, phpMyAdmin ma za zadanie udostępnienie interfejsu WWW, za pomocą którego będzie możliwe administrowanie serwerem MySQL. Aplikacja phpMyAdmin pozwala na wykonanie niemal każdej czynności, dostępnej z poziomu wiersza poleceń serwera MySQL. Jednak w phpMyAdmin używa się do tego celu myszy, a nie wpisywanych ręcznie zapytań języka SQL. Oczywiście, jeżeli musisz wykonać zadanie, które można wyrazić wyłącznie za pomocą ręcznie napisanego kodu SQL, phpMyAdmin również na to pozwoli, ponieważ udostępnia formularz służący do wpisywania kodu SQL. Kod ten zostanie wykonany, a wynik zostanie wyświetlony w przeglądarce. Na większości komercyjnych serwerów WWW dostępne są już prekonfigurowane wersje phpMyAdmin, stanowiące element konsoli administracyjnej. Poza tym, jeżeli samo- dzielnie zainstalujesz serwer MySQL pochodzący z rozwiązania pakietowego, takiego jak WampServer czy MAMP, szybko zauważysz, że tam również udostępniana jest aplikacja phpMyAdmin. Wówczas konieczne jednak będzie odpowiednie skonfiguro- wanie aplikacji przez podanie hasła użytkownika root serwera MySQL, które zostało zdefiniowane w rozdziale 1. 1 http://www.phpmyadmin.net/ Rozdział 10. ♦ Administrowanie bazą MySQL 279 Jeżeli na serwerze, którego używasz, phpMyAdmin jest niedostępna, możesz zainstalo- wać aplikację samodzielnie, co nie jest trudnym zadaniem. W tym celu należy przejść na stronę pobierania phpMyAdmin2 i pobrać najnowszą zalecaną wersję (w trakcie powstawania tej książki była to wersja 3.1.3.2) w preferowanym formacie (.zip dla systemu Windows lub Mac OS X bądź też .tar.gz dla Linuksa). Plik trzeba rozpakować, a po rozpakowaniu okaże się, że archiwum zawiera katalog phpMyAdmin-wersja- -językowa. Nazwę tego katalogu trzeba zmienić na phpMyAdmin i przenieść do głów- nego katalogu dokumentów WWW serwera internetowego. Następnie w edytorze tekstu trzeba utworzyć nowy plik o nazwie config.inc.php i zapi- sać go w katalogu phpMyAdmin. W pliku należy wpisać następujący fragment kodu: ?php $cfg[ blowfish_secret ] = bhvhbv3577h3qguw83qdh37b2fnqelinbq38qhg ; $cfg[ Servers ][1][ auth_type ] = cookie ; ? Elementowi $cfg[ blowfish_secret ] można przypisać dowolną wartość złożoną z liter i cyfr. Nie trzeba nawet zapamiętywać wpisanej wartości, ponieważ wystarczy, by była jak najtrudniejsza do zgadnięcia przez potencjalnego hakera. Dlatego im bardziej ciąg znaków będzie przypominał ciąg wygenerowany losowo, tym lepiej. Drugi wiersz kodu konfiguruje phpMyAdmin w taki sposób, by aplikacja łączyła się z serwerem MySQL znajdującym się na tym samym komputerze oraz serwer baz danych wymagał podania nazwy użytkownika i hasła. Jeżeli wykorzystywany serwer MySQL działa na innym komputerze albo chcesz, by phpMyAdmin logował się do serwera baz danych automatycznie, trzeba wprowadzić pewne zmiany, które najlepiej są opisane w dokumentacji aplikacji. Wystarczy w przeglądarce internetowej otworzyć plik Documentation.html, który znajduje się w katalogu phpMyAdmin. Gdy plik konfiguracyjny jest już gotowy, należy otworzyć przeglądarkę i wywołać adres http://localhost/phpMyAdmin/ (lub inny, który wskazuje na serwerze WWW kata- log phpMyAdmin). W odpowiedzi w przeglądarce powinna pojawić się strona logowa- nia, widoczna na rysunku 10.1. Jeżeli na stronie logowania pojawi się ostrzeżenie dotyczące braku możliwości zała- dowania rozszerzenia mcrypt, można je z czystym sumieniem zignorować. Na więk- szości serwerów rozszerzenie mcrypt jest komponentem opcjonalnym, którego zainsta- lowanie dość znacząco powinno zwiększyć wydajność działania phpMyAdmin, lecz i bez tego rozszerzenia aplikacja będzie sobie radzić bez problemu3. 2 http://www.phpmyadmin.net/home_page/downloads.php 3 Rozszerzenie mcrypt jest wymagane w niektórych 64-bitowych systemach operacyjnych. Aplikacja phpMyAdmin wyświetli odpowiedni komunikat, jeśli okaże się, że nie może obyć się bez tego rozszerzenia. W takim przypadku trzeba będzie dodać rozszerzenie do PHP. W systemie Windows wystarczy w tym celu jedynie odkomentować wiersz extension=php_mcrypt.dll pliku php.ini, lecz w systemach Mac OS X i Linux konieczne jest zainstalowanie biblioteki programistycznej libmcrypt i wykonanie rekompilacji PHP. Trudno powiedzieć, by był to najlepszy sposób spędzania popołudnia! 280 PHP i MySQL. Witryna WWW oparta na bazie danych Rysunek 10.1. Ekran logowania do aplikacji phpMyAdmin W polu Użytkownik należy wpisać root, natomiast w polu Hasło trzeba podać hasło użytkownika root na serwerze MySQL. Alternatywnie, jeżeli nie znasz hasła użytkow- nika root na serwerze baz danych, z którym się łączysz, wpisz nazwę użytkownika i hasło, jakie znasz. Aplikacja phpMyAdmin zacznie wówczas pracę z takimi samymi uprawnieniami, jakie posiada zastosowany użytkownik MySQL. Po zalogowaniu się w przeglądarce powinna pojawić się strona podobna do widocznej na rysunku 10.2. Rysunek 10.2. Interfejs aplikacji phpMyAdmin może być trochę zniechęcający, ale nie poddawaj się! Nie warto stresować się przytłaczającą liczbą opcji udostępnianych przez phpMyAdmin. Aplikacja rzeczywiście jest bardzo złożona, lecz gdy tylko poznasz ją trochę bliżej, praca z nią przestanie być jakimkolwiek problemem. Rozdział 10. ♦ Administrowanie bazą MySQL 281 Na początek warto spojrzeć na listę dostępnych baz danych, widoczną po lewej stronie. Jeżeli phpMyAdmin łączy się z serwerem MySQL, na którym implementowałeś przy- kłady opisywane w tej książce, powinieneś wśród dostępnych baz danych ujrzeć między innymi bazę ijdb. Jeśli tak nie jest, możesz ją utworzyć choćby teraz. Jeżeli posiadasz uprawnienia do tworzenia baz danych na serwerze MySQL, skorzystaj z formularza Utwórz nową bazę danych widocznego mniej więcej na środku ekranu, aby zbudować nową bazę danych ijdb. Na liście rozwijanej System porównań dla połączenia MySQL można pozostawić wartość domyślną. Gdy klikniesz przycisk Utwórz, phpMyAdmin utworzy nową, pustą bazę danych ijdb i wyświetli komunikat „Nie zna- leziono tabeli w bazie danych”, widoczny na rysunku 10.3. Rysunek 10.3. Nie znaleziono tabeli w bazie danych Jeżeli natomiast możesz korzystać tylko z jednej bazy danych, którą specjalnie utwo- rzył administrator (na przykład administrator dostawcy usług internetowych), kliknij nazwę tej bazy w menu po lewej stronie. Również w tym przypadku w przeglądarce wyświetlona zostanie lista tabel lub komunikat „Nie znaleziono tabeli w bazie danych”, jeżeli baza danych będzie pusta. Teraz za pomocą phpMyAdmin możesz utworzyć wszystkie tabele niezbędne do odpo- wiedniego funkcjonowania bazy danych witryny zarządzania kawałami. W tym celu kliknij zakładkę Import u góry strony, a następnie w sekcji Plik do importu wskaż plik archiwum kodów źródłowych książki o nazwie Rozdzial09/sql/ijdb.sql. Kliknięcie przycisku Wykonaj u dołu strony spowoduje, że aplikacja phpMyAdmin prześle zawar- tość wskazanego pliku do serwera MySQL i na tej podstawie powstaną tabele i przykła- dowe dane bazy do zarządzania dowcipami. Nazwy utworzonych tabel powinny się pojawić z lewej strony ekranu przeglądarki. Po kliknięciu myszą nazwy którejś z tabel będzie można przejrzeć jej zawartość; warto również przejrzeć wszystkie zakładki dostępne w aplikacji phpMyAdmin. Większość dostępnych opcji nie powinna budzić wątpliwości, jednak przeznaczenie niektórych zakładek może wydać się niejasne. Jeżeli jesteś ciekaw, do czego służy dana funkcja, po prostu uruchom ją i zobacz, jaki będzie wynik (oczywiście, na serwerze MySQL, który nie zawiera żadnych danych!). Szczególną ostrożność należy zachować przy przeglą- daniu zakładki Usuń, która usuwa całą bazę danych. 282 PHP i MySQL. Witryna WWW oparta na bazie danych Niewielu programistów PHP zna każdą funkcję tak złożonego narzędzia, jakim jest phpMyAdmin. Jednak nawet zrozumienie tylko podstawowych funkcji aplikacji sprawi, że narzędzie szybko stanie się nieodzowne do administrowania bazami danych na serwerze MySQL. Kopie zapasowe baz danych MySQL Podobnie jak w przypadku serwerów WWW, większość serwerów MySQL musi działać 24 godziny na dobę, siedem dni w tygodniu. Powoduje to, że tworzenie kopii zapaso- wych plików bazy MySQL jest problematyczne. Serwer MySQL używa pamięci pod- ręcznej i buforowania, aby zwiększyć efektywność uaktualniania plików bazy prze- chowywanych na dysku, co sprawia, że w każdej chwili pliki te mogą się znajdować w stanie niespójności. Jako że standardowe procedury wykonywania kopii zapasowych zakładają tylko kopiowanie plików systemowych i zawierających dane, kopie plików danych MySQL nie są wiarygodne. Nie ma bowiem żadnej gwarancji, że skopiowane pliki będą w stanie nadającym się do użycia w zastępstwie plików straconych w awarii. Wiele baz danych otrzymuje nowe informacje przez cały czas, zaś standardowe kopie zapasowe zawierają tylko stan plików z daty ostatniego utworzenia kopii. Jeśli z jakie- goś powodu pliki danych bazy MySQL zostaną zniszczone albo nie da się ich odczytać, wszelkie informacje, które zmieniły się w bazie od ostatniej kopii, przepadną bezpow- rotnie. W wielu sytuacjach, na przykład jeśli serwer MySQL służy do śledzenia zamó- wień klientów w sklepie internetowym, taka strata jest nie do przyjęcia. MySQL zawiera mechanizmy służące do tworzenia aktualnych kopii zapasowych, na które nie powinna mieć wpływu aktywność serwera podczas archiwizacji. Niestety, ich użycie wymaga zaprojektowania specjalnej procedury wykonywania kopii zapa- sowych dla danych MySQL, całkowicie oddzielnej od wszelkich systemów archiwizacji, które mogły powstać dla innych danych. Jednak podobnie jak w przypadku każdego dobrego systemu kopii zapasowych, docenimy go, kiedy przyjdzie czas go wykorzystać. Wykonywanie kopii za pomocą programu mysqldump Oprócz mysql, klienta MySQL, pakiet instalacyjny MySQL zawiera wiele przydatnych programów narzędziowych. Poznaliśmy już na przykład program mysqladmin, odpo- wiedzialny za kontrolę i pobieranie informacji o uruchomionym serwerze MySQL. Program mysqldump jest kolejnym z tych narzędzi. Po uruchomieniu łączy się on z ser- werem MySQL (w podobny sposób, jak program mysql albo skrypt PHP) i pobiera pełną zawartość wskazanej bazy danych. Pobrane dane są następnie wypisywane w postaci szeregu poleceń SQL CREATE TABLE i INSERT, które, wykonane na serwerze MySQL, odtworzą bazę danych (lub bazy danych) i zapełnią ją takimi samymi danymi, jakie zawierał oryginał. Jeśli przekierujemy wynik działania mysqldump do pliku, możemy zachować uzyskany zrzut zawartości bazy jako kopię zapasową. Poniższe polecenie (zapisane w jednej linii) Rozdział 10. ♦ Administrowanie bazą MySQL 283 łączy się z serwerem MySQL uruchomionym na komputerze lokalnym, podając użyt- kownika root i hasło password, a następnie zapisuje kopię zapasową wszystkich baz danych do pliku full_backup.sql4. mysqldump -u root -ppassword --all-databases full_backup.sql Poniższe komendy odtworzą bazę po awarii: mysql -u root -ppassword full_backup.sql Przytoczone polecenie łączy się z serwerem MySQL przy użyciu programu mysql i podaje do wykonania listę komend z utworzonego uprzednio pliku. Jeżeli wolisz korzy- stać z klienta wiersza poleceń serwera MySQL, możesz wykonać polecenie source, aby wykonać wszystkie polecenia zawarte w pliku full_backup.sql: mysql source full_backup.sql Polecenie source nie jest poleceniem języka SQL Polecenie source jest słabo udokumentowanym5 poleceniem obsługiwanym bez- pośrednio przez program klienta mysql i nie jest to w żadnym razie polecenie języka SQL, takie jak na przykład CREATE DATABASE. Dlatego na końcu polecenia nie należy wstawiać znaku średnika, ponieważ znak ten uniemożliwi poprawne wykonanie pole- cenia. W ten sposób możemy używać mysqldump do tworzenia kopii zapasowych naszych baz danych. Program mysqldump nie kopiuje bezpośrednio plików znajdujących się w kata- logu danych MySQL, tylko pobiera dane, łącząc się z serwerem. Dzięki temu kopia, którą wykonuje, jest właściwą i pewną kopią bazy, a nie zrzutem plików, które mogą być niepełne i nieaktualne, dopóki serwer MySQL jest uruchomiony. Co zrobić z dziurą między kopiami zapasowymi, aby mieć pewność, że zarchiwizo- wane dane z bazy są zawsze aktualne? Rozwiązanie jest proste: należy skonfigurować serwer tak, aby prowadził binarny dziennik aktualizacji. Kopie przyrostowe w binarnym dzienniku aktualizacji Jak już wspomniano, w wielu zastosowaniach, w których używa się serwera MySQL, utrata danych — jakichkolwiek danych — jest nie do zaakceptowania. W takich przy- padkach trzeba znaleźć sposób na utrzymywanie aktualności danych również pomiędzy kopiami wykonywanymi przy użyciu mysqldump. Rozwiązaniem tego problemu jest skonfigurowanie serwera MySQL, tak aby prowadził binarny dziennik aktualizacji. Binarny dziennik aktualizacji jest zapisem wszystkich otrzymanych przez bazę zapy- tań SQL, które w jakiś sposób zmieniły zawartość bazy. Zaliczają się do nich między innymi polecenia INSERT, UPDATE i CREATE TABLE, natomiast SELECT już nie. 4 Aby uruchomić mysqldump i inne programy narzędziowe MySQL, trzeba znajdować się w katalogu bin serwera MySQL lub katalog ten musi znajdować się w ścieżce systemowej. Jeżeli wykonałeś instrukcje instalacji zawarte w rozdziale 1., ścieżka systemowa powinna już zawierać odpowiednie wpisy. 5 http://dev.mysql.com/doc/refman/5.1/en/batch-commands.html 284 PHP i MySQL. Witryna WWW oparta na bazie danych Podstawowym celem jest umożliwienie odzyskania zawartości bazy dokładnie z chwili wystąpienia awarii. Można to osiągnąć przez przywrócenie kopii zapasowej (wyko- nanej za pomocą programu mysqldump) i zastosowanie fragmentu binarnego dziennika aktualizacji, powstałego po utworzeniu ostatniej kopii zapasowej. Można także edytować binarny dziennik aktualizacji, aby cofnąć ewentualne błędy. Jeśli na przykład współpracownik przypadkowo wyda polecenie DROP TABLE, możemy wyeks- portować binarny dziennik aktualizacji do postaci tekstowej i z pliku tekstowego usunąć szkodliwy wpis. Następnie można przywrócić bazę danych z ostatniej kopii zapaso- wej i wykonać zmodyfikowany binarny dziennik aktualizacji. W ten sposób zacho- wujemy nawet te aktualizacje w innych tabelach, do których doszło już po wydaniu omyłkowego polecenia. A w ramach przeciwdziałania powinniśmy też zapewne ode- brać współpracownikowi prawa do polecenia DROP (w następnej części dowiemy się, jak to zrobić). Uruchamiając serwer MySQL z wiersza poleceń, możemy użyć przełącznika --log-bin, aby tworzył binarny dziennik aktualizacji, na przykład w systemie Mac OS X może to wyglądać tak: Komputer:~ użytkownik$ sudo mysqld_safe --log-bin=binlog Powyższe polecenie uruchamia serwer MySQL i instruuje go, aby tworzył w katalogu danych serwera (/usr/local/mysql/data na komputerach z Mac OS X i Linuksem, jeśli serwer jest skonfigurowany zgodnie z opisem w rozdziale 1., „Instalacja”) pliki binlog. 000001, binlog.000002 itd. Nowy plik będzie powstawał, ilekroć serwer zapisze zawar- tość dziennika na dysk; w praktyce następuje to za każdym uruchomieniem serwera. Jeśli chcemy przechowywać binarny dziennik aktualizacji w innym miejscu (co jest zazwyczaj dobrym pomysłem — jeśli zepsuje się dysk zawierający katalog z danymi, lepiej, żeby kopie zapasowe, mimo wszystko, przetrwały ten kataklizm!), możemy podać pełną ścieżkę do niego. Jeśli serwer MySQL ma działać stale, to prawdopodobnie system operacyjny odpo- wiada za jego uruchamianie przy starcie. W takim przypadku dodawanie opcji w linii komend może być utrudnione. Prostszą metodą utworzenia dziennika aktualizacji jest ustawienie odpowiedniej opcji w pliku konfiguracyjnym MySQL o nazwie my.cnf lub my.ini, jeżeli używany jest system Windows. Podobnie jak plik php.ini, który definiuje konfigurację języka PHP na serwerze, tak samo plik my.cnf lub my.ini jest zwykłym plikiem tekstowym, który zawiera listę opcji steru- jących pracą serwera MySQL. Domyślnie MySQL jest instalowany bez żadnego pliku konfiguracyjnego i działa z wykorzystaniem ustawień domyślnych. Aby włączyć obsługę binarnych dzienników aktualizacji, należy utworzyć plik my.cnf lub my.ini i ustawić odpowiednie opcje. W systemie Windows użyj Notatnika lub innego edytora tekstu, aby utworzyć plik o nazwie my.ini i zapisać go w katalogu instalacyjnym serwera MySQL (na przykład w C:\Program Files\MySQL\MySQL Server 5.x). Rozdział 10. ♦ Administrowanie bazą MySQL 285 W systemie Mac OS X lub Linux należy użyć wybranego edytora tekstu i utworzyć plik o nazwie my.cnf z odpowiednimi ustawieniami konfiguracyjnymi; potem plik trzeba przenieść do katalogu instalacyjnego serwera MySQL (/usr/local/mysql). Aby to wyko- nać, prawdopodobnie potrzebne będą uprawnienia administratora. Instalacje pakietowe W dalszej części punktu zakładam, że samodzielnie zainstalowałeś serwer MySQL od podstaw. Jest to szczególnie dobre rozwiązanie, jeżeli instalujesz serwer produkcyjny. Rozwiązania pakietowe, takie jak WampServer czy MAMP, zawierają wbudowany, pre- definiowany plik konfiguracyjny serwera MySQL. Oczywiście, można zmienić zawar- tość tego pliku, aby odpowiednio dostosować konfigurację serwera MySQL i włączyć obsługę binarnych dzienników aktualizacji, lecz najlepiej cofnąć się o krok i samo- dzielnie w całości skonfigurować sposób działania serwera. Włączenie mechanizmu tworzenia binarnych dzienników aktualizacji na serwerze rozwojowym jest tylko niepotrzebnym utrudnieniem. Jeżeli chcesz mieć kopie zapa- sowe serwera rozwojowego, po prostu go wyłącz i wykonaj kopię zapasową plików danych serwera MySQL. Utworzony plik konfiguracyjny powinien zawierać następujący wpis: [mysqld] log-bin=/tmp/binlog Tak sformułowany wpis nakazuje serwerowi, by pliki binarnego dziennika aktualiza- cji były przechowywane w katalogu /tmp. W środowiskach produkcyjnych zwykle wskazuje się bardziej sensowną lokalizację (na przykład dysk zapasowy). Na serwerach Mac OS X i Linux trzeba się przede wszystkim upewnić, że wskazana lokalizacja jest dostępna do zapisu dla konta użytkownika mysql, na którym pracuje serwer MySQL. Ponieważ nowy plik konfiguracyjny jest już gotowy, należy zrestartować serwer MySQL. Od teraz serwer będzie zachowywał się tak, jakby uruchomiono go w wierszu poleceń z opcją --log-bin. Aby upewnić się, że wszystko działa prawidłowo, warto we wskazanej lokalizacji sprawdzić, czy w momencie uruchomienia serwera powstał w niej nowy plik dziennika. Oczywiście, pliki binarnych dzienników aktualizacji mogą zajmować znaczną ilość miejsca zwłaszcza wtedy, kiedy serwer jest intensywnie używany. Z tego względu trzeba nakazać serwerowi MySQL, aby za każdym razem, gdy wykonywana jest pełna kopia zapasowa przy użyciu mysqldump, serwer usuwał wszystkie przestarzałe pliki binarnego dziennika aktualizacji. mysqldump -u root -ppassword --all-databases --flush-logs --master-data=2 (cid:180)--delete-master-logs backup.sql Opcja --flush-logs nakazuje serwerowi MySQL, by bieżący plik binarnego dziennika aktualizacji zamknąć oraz utworzyć nowy plik, tak jakby serwer został wyłączony i ponownie uruchomiony. Opcja --master-data=2 wskazuje programowi mysqldump, że na końcu pliku ijdb_backup.sql trzeba umieścić komentarz zawierający nazwę nowego pliku binarnego dziennika aktualizacji. Plik ten będzie zawierał wpisy dotyczące pierw- 286 PHP i MySQL. Witryna WWW oparta na bazie danych szych zmian dokonanych w bazie danych bezpośrednio po wykonaniu pełnej kopii zapa- sowej. Ostatnia opcja --delete-master-logs nakazuje programowi mysqldump usunięcie tych plików binarnego dziennika aktualizacji, które po utworzeniu pełnej kopii zapaso- wej nie są już potrzebne. W przypadku poważnej awarii posiadanie pełnej kopii zapasowej oraz plików binar- nego dziennika aktualizacji wygenerowanych po utworzeniu pełnej kopii pozwoli na stosunkowo bezproblemowe przywrócenie bazy danych. W tym celu trzeba będzie zainstalować i skonfigurować nową, pustą wersję serwera MySQL i odtworzyć na nim pełną kopię zapasową, zgodnie z opisem z poprzedniego punktu. Potem zostanie już tylko zaaplikowanie plików binarnego dziennika aktualizacji przy użyciu programu narzędziowego mysqlbinlog, wchodzącego w skład instalacji serwera MySQL. Zadanie programu narzędziowego mysqlbinlog polega na przekształceniu formatu danych, w jakim zapisywane są binarne dzienniki aktualizacji, w polecenia języka SQL, które należy wykonać na bazie danych. Powiedzmy, że istnieją dwa pliki binarnego dziennika aktualizacji, które trzeba odtworzyć po przywróceniu bazy danych z ostatniej pełnej kopii zapasowej. Za pomocą programu mysqlbinlog z dwóch plików binarnego dzien- nika można wygenerować tekstowy plik z odpowiednimi poleceniami języka SQL, a następnie wykonać zawartość utworzonego pliku na serwerze MySQL tak, jakby był to plik wygenerowany przez narzędzie mysqldump: mysqlbinlog binlog.000041 binlog.000042 binlog.sql mysql -u root -ppassword binlog.sql Kontrola dostępu w MySQL W rozdziale 2., „Wprowadzenie do systemu MySQL”, wspomniałem o bazie mysql, która występuje na każdym serwerze MySQL i służy do przechowywania informacji o użyt- kownikach, ich hasłach i o tym, co wolno im robić. Dotychczas jednak zawsze łączy- liśmy się z serwerem jako użytkownik root, co dawało nam dostęp do wszystkich baz i tabel. Konto root MySQL może wystarczyć do naszych celów, jeśli do uruchomionego przez nas serwera uzyskają dostęp tylko skrypty PHP i zachowamy ostrożność w podawa- niu hasła do konta. Jednak w sytuacjach, w których do serwera MySQL ma dostęp wielu użytkowników (na przykład jeśli firma utrzymująca naszą witrynę WWW prze- chowuje bazy danych klientów na jednym serwerze), warto skonfigurować konta użyt- kowników z bardziej ograniczonymi prawami dostępu. System kontroli dostępu w MySQL jest w pełni udokumentowany w rozdziale 6. pod- ręcznika MySQL6. W skrócie: prawa dostępu użytkowników regulowane są przez zawartość pięciu tabel w bazie mysql: user, db, host, tables_priv i columns_priv. Gdybyśmy chcieli edytować je ręcznie przy użyciu poleceń INSERT, UPDATE i DELETE, powinniśmy się najpierw zapoznać z odpowiednim fragmentem podręcznika. MySQL 6 http://dev.mysql.com/doc/mysql/en/privilege_system.html Rozdział 10. ♦ Administrowanie bazą MySQL 287 dostarcza jednak prostszą metodę zarządzania prawami dostępu, przeznaczoną dla nas, zwykłych śmiertelników. Używając poleceń GRANT i REVOKE — niestandardowych komend MySQL — możemy tworzyć użytkowników i przydzielać im prawa bez zastanawiania się nad detalami i nad sposobem reprezentacji tego, co stworzymy we wspomnianych tabelach. Nadawanie uprawnień za pomocą polecenia GRANT Polecenie GRANT, służące do tworzenia nowych użytkowników, przydzielania haseł i przy- pisywania praw, jest następujące: mysql GRANT uprawnienie [(kolumny)] ON do_czego - TO użytkownikowi [IDENTIFIED BY hasło ] - [WITH GRANT OPTION]; A zatem polecenie to ma wiele pustych pól do wypełnienia. Opiszemy każde z nich, a potem obejrzymy kilka przykładów, aby się przekonać, jakie efekty dają razem. Pole uprawnienie definiuje uprawnienia, które chcemy przydzielić tym poleceniem. Uprawnienia, które można nadać, dzielą się na trzy grupy: (cid:141) Uprawnienia do baz, tabel lub kolumn ALTER CREATE DELETE DROP INDEX INSERT LOCK TABLES Modyfikowanie istniejących tabel (na przykład dodawanie albo usuwanie kolumn) i indeksów. Tworzenie nowych baz i tabel. Usuwanie pozycji z tabeli. Usuwanie tabel lub baz. Tworzenie lub usuwanie indeksów. Dodawanie nowych pozycji w tabeli. Blokowanie tabel, do których użytkownik ma prawo SELECT (zob. rozdział 11., Zaawansowane zapytania SQL). Przeglądanie i przeszukiwanie zawartości tabeli. SELECT SHOW DATABASES Przeglądanie listy dostępnych baz danych. UPDATE Modyfikowanie istniejących pozycji w tabeli. (cid:141) Globalne uprawnienia administracyjne FILE PROCESS RELOAD SHUTDOWN Czytanie i zapisywanie plików na komputerze, na którym działa serwer MySQL. Oglądanie lub niszczenie wątków należących do innych użytkowników. Przeładowywanie tabel kontroli dostępu, zapisywanie dziennika na dysku itd. Zatrzymywanie serwera MySQL. 288 PHP i MySQL. Witryna WWW oparta na bazie danych (cid:141) Uprawnienia specjalne ALL USAGE Uprawnienie do wszelkich czynności (podobnie jak w przypadku użytkownika root), z wyjątkiem prawa do nadawania praw. Prawo do zalogowania się i nic ponadto. Niektóre z tych uprawnień odnoszą się do właściwości MySQL, których jeszcze nie poznaliśmy, ale większość nie powinna być obca czytelnikom. Pole do_czego określa, do których części serwera baz danych odnoszą się nadawane prawa. (cid:141) Zapis *.* oznacza, że prawa dotyczą wszystkich baz i tabel. (cid:141) nazwaBazy.* oznacza, że prawa obejmują wszystkie tabele w bazie nazwaBazy. (cid:141) nazwaBazy.nazwaTabeli oznacza natomiast, że prawa dotyczą tylko tabeli nazwaTabeli w bazie nazwaBazy. Można nawet określić prawa do pojedynczych kolumn w tabeli — wystarczy wstawić listę kolumn w nawias następujący po nazwie przydzielanych praw (zob. przykład poniżej). Pole user wyznacza użytkownika, którego mają dotyczyć prawa. W MySQL użytkow- nik jest określany przez nazwę użytkownika podaną przy logowaniu oraz nazwę hosta lub adres IP komputera, z którego się łączy. Wartości te rozdziela znak @ (tj. nazwa_ (cid:180)użytkownika@nazwa_hosta). Obie mogą zawierać znak globalny , ale każdą zawiera- jącą go wartość trzeba ująć w cudzysłów (na przykład kevin@ pozwoli użytkowni- kowi o nazwie kevin zalogować się z dowolnego hosta i użyć podanych uprawnień). Pole hasło definiuje hasło wymagane od użytkownika przy łączeniu się z serwerem MySQL. Nawiasy kwadratowe oznaczają, że część IDENTIFIED BY hasło polecenia GRANT jest opcjonalna. Każde podane w niej hasło zamieni dotychczasowe hasło dla danego użytkownika. Jeśli nie podamy hasła dla nowo tworzonego użytkownika, serwer nie będzie od niego wymagał podania hasła przy połączeniu. Opcjonalna część WITH GRANT OPTION oznacza, że użytkownik ma prawo używać pole- ceń GRANT i REVOKE do nadawania innym użytkownikom takich samych uprawnień, jakie sam otrzymał. Tę opcję należy przydzielać ostrożnie — następstwa nie zawsze są oczy- wiste! Użytkownik założony z opcją WITH GRANT OPTION może przekazywać tę opcję innym użytkownikom, aby wymieniać się z nimi prawami dostępu. Rozważmy kilka przykładów. Poniższe polecenie GRANT tworzy użytkownika o nazwie dbmgr, mogącego logować się z komputera server.host.net z hasłem managedb i mają- cego pełny dostęp tylko do bazy danych o nazwie ijdb (z prawem przydzielania innym użytkownikom praw dostępu do tej bazy włącznie). mysql GRANT ALL ON ijdb.* - TO dbmgr@example.com - IDENTIFIED BY managedb - WITH GRANT OPTION; Rozdział 10. ♦ Administrowanie bazą MySQL 289 Następnie, aby zmienić hasło tego użytkownika na funkychicken, użyjemy następującego polecenia: mysql GRANT USAGE ON *.* - TO dbmgr@example.com - IDENTIFIED BY funkychicken ; Zauważmy, że nie nadaliśmy żadnych dodatkowych uprawnień (uprawnienie USAGE pozwala użytkownikowi jedynie na zalogowanie się), ale dotychczasowe przywileje użyt- kownika pozostały niezmienione. Następnie załóżmy istnienie nowego użytkownika o nazwie jess, który będzie się łączyć z różnych komputerów w domenie example.com. Powiedzmy, że użytkowniczka Jess jest odpowiedzialna za aktualizowanie personaliów i adresów e-mail autorów, ale może też czasem przeglądać pozostałe informacje w bazie. W związku z tym uzyska dostęp tylko do odczytu (tj. SELECT) do bazy ijdb, ale będzie też mogła wykonywać UPDATE na kolumnach nazwa i email w tabeli autor. Oto odpowiednie polecenia: mysql GRANT SELECT ON ijdb.* - TO jess@ .example.com - IDENTIFIED BY jessrules ; mysql GRANT UPDATE (nazwa, email) ON ijdb.autor - TO jess@ .example.com ; Zauważmy, że w pierwszym poleceniu użyliśmy w nazwie hosta znaku globalnego , aby określić, z jakich komputerów będzie się mogła łączyć Jess. Nie daliśmy jej także prawa do przekazywania uprawnień innym użytkownikom, ponieważ nie dodaliśmy klauzuli WITH GRANT OPTION na końcu linii. Drugie polecenie pokazuje, jak przydzielać uprawnienia do określonych kolumn w tabeli — należy umieszczać rozdzielone przecin- kami kolumny w nawiasie za nazwą nadawanego uprawnienia. Aby sprawdzić, jakie uprawnienia nadano konkretnemu użytkownikowi, należy wyko- nać polecenie SHOW GRANTS: mysql SHOW GRANTS FOR jess@ .example.com Polecenie zwróci listę poleceń GRANT, których należy użyć, aby na nowo utworzyć wska- zanego użytkownika z identycznymi uprawnieniami. Odbieranie uprawnień przy użyciu polecenia REVOKE Polecenie REVOKE, jak można się domyślić, służy do odbierania użytkownikowi poprzednio nadanych uprawnień dostępu. Składnia polecenia jest następująca: mysql REVOKE uprawnienie [(kolumny)] - ON do_czego FROM użytkownikowi; Wszystkie pola w poleceniu mają to samo działanie, co w przypadku polecenia GRANT. Aby odebrać uprawnienia do używania polecenia DROP współpracownikowi Jess o nazwie idiot (jeśli, na przykład, ma on zwyczaj sporadycznego omyłkowego usuwania za pomocą tego polecenia tabel i baz danych), użylibyśmy następującego polecenia: 290 PHP i MySQL. Witryna WWW oparta na bazie danych mysql REVOKE DROP ON *.* FROM idiot@ .example.com ; Cofnięcie prawa użytkownika do zalogowania się jest jedyną rzeczą, jakiej nie można osiągnąć przy użyciu poleceń GRANT i REVOKE. Te polecenia definitywnie odbiorą użytkow- nikowi wszelką możliwość jakichkolwiek działań w bazie poza zalogowaniem się: mysql REVOKE ALL PRIVILEGES ON *.* FROM idiot@ .example.com ; mysql REVOKE GRANT OPTION ON *.* FROM idiot@ .example.com ; Jednak aby całkowicie usunąć użytkownika, trzeba wykonać polecenie DROP USER: mysql DROP USER idiot@ .example.com Porady na temat kontroli dostępu Sposób, w jaki działa system kontroli dostępu w MySQL, ma pewne idiosynkrazje, o któ- rych trzeba wiedzieć przed rozpoczęciem zakładania kont użytkowników. Jeśli tworzymy użytkowników mogących się zalogować do serwera MySQL tylko z kom- putera, na którym działa serwer (na przykład wymagamy, aby logowali się do kom- putera i uruchamiali stamtąd klienta MySQL, ewentualnie porozumiewali się z serwe- rem przy użyciu skryptów serwerowych w rodzaju PHP), możemy się zastanawiać, jaka powinna być część polecenia GRANT dotycząca użytkownika. Załóżmy, że serwer jest uruchomiony na komputerze www.example.com. Jak powinna wyglądać nazwa użyt- kownika: nazwa_użytkownika@example.com czy nazwa_użytkownika@localhost? Odpowiedź brzmi: nie można polegać na żadnej z nich, jeśli chcemy obsłużyć wszystkie połączenia. Teoretycznie, jeżeli łączący się użytkownik poda nazwę hosta w programie klienckim mysql albo w funkcji PHP mysqli_connect, nazwa ta zostanie porównana z wpisem w systemie kontroli dostępu. Ponieważ jednak raczej nie chcemy zmuszać użytkowników do podawania określonej nazwy hosta (ci używający klienta mysql nie będą zapewne chcieli podawać nazwy hosta w ogóle), lepiej uciec się do rozwiązania zastępczego. Dla użytkowników potrzebujących możliwości łączenia się z komputera, na którym jest uruchomiony serwer MySQL, najlepiej stworzyć dwa wpisy w systemie dostępu MySQL: jeden z rzeczywistą nazwą komputera (na przykład nazwa_użytkownika @example.com), drugi z nazwą localhost (na przykład nazwa_użytkownika@localhost). Oczywiście, wymaga to oddzielnego nadawania i usuwania uprawnień dla każdej z nazw, ale tylko na takim rozwiązaniu można naprawdę polegać. Kolejnym problemem, często napotykanym przez administratorów MySQL, jest to, że nazwy użytkowników zawierające nazwy wieloznaczne (na przykład przytaczana jess@ .example.com) mogą nie zadziałać. Niepowodzenia następują zazwyczaj w wyniku sposobu, w jaki MySQL nadaje priorytety wpisom w systemie kontroli dostępu. Wpisy są szeregowane w takiej kolejności, aby bardziej jednoznaczne nazwy hosta następo- wały jako pierwsze (na przykład www.example.com jest nazwą całkowicie jednoznaczną, .example.com — mniej jednoznaczną, a — całkiem niejednoznaczną). Rozdział 10. ♦ Administrowanie bazą MySQL 291 System kontroli dostępu nowo zainstalowanego serwera MySQL zawiera dwa anoni- mowe wpisy (pozwalające na łączenie się przy użyciu dowolnej nazwy użytkownika z localhost i rzeczywistej nazwy lokalnego hosta) i dwa wpisy dla użytkownika root. Opisany powyżej problem występuje wówczas, gdy wpisy anonimowe mają pierw- szeństwo przed nowo dodanymi użytkownikami ze względu na bardziej j
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IV
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: