MySQL – podstawy administracji Administracja bazą danych jest zajęciem odpowiedzialnym i wymagającym dużej wiedzy i doświadczenia. Dlatego zajmować się tym raczej powinni ludzie rzeczywiście do tego przygotowani. Jednak, nawet jeśli koś nie zamierza lub nie będzie nigdy w przyszłości administrował bazą danych to spojrzenie na serwer baz danych z punktu widzenia administratora jest doświadczeniem ciekawym i pouczającym. W niniejszej prezentacji są przedstawione niektóre tylko zagadnienia dotyczące codziennego dnia pracy administratora (admina) bazy danych MySQL. Wiele spośród tych zagadnień dotyczy nie tylko administracji bazą danych, ale też administracji serwerem sieciowym, siecią LAN czy też superkomputerem. W praktyce zresztą jest często tak, że osoba, która zarządza serwerem bazodanowym i opiekuje się bazami danych, jest też jednocześnie zaangażowana w administrację lokalną siecią, dbanie o bezpieczeństwo w tej sieci i rozwiązywanie problemów związanych z aplikacjami korzystającymi z bazy danych. Jest to więc zajęcie wymagające bardzo wszechstronnej wiedzy.
55
Embed
MySQL podstawy administracji - Politechnika Gdańska · MySQL Należy bezwzględnie ustawić hasło dla administratora. Jeśli po wydaniu komendy mysql -u root nie zostaniemy poproszeni
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
MySQL – podstawy administracji
Administracja bazą danych jest zajęciem odpowiedzialnym i wymagającym
dużej wiedzy i doświadczenia. Dlatego zajmować się tym raczej powinni ludzie
rzeczywiście do tego przygotowani.
Jednak, nawet jeśli koś nie zamierza lub nie będzie nigdy w przyszłości
administrował bazą danych to spojrzenie na serwer baz danych z punktu
widzenia administratora jest doświadczeniem ciekawym i pouczającym.
W niniejszej prezentacji są przedstawione niektóre tylko zagadnienia dotyczące
codziennego dnia pracy administratora (admina) bazy danych MySQL. Wiele
spośród tych zagadnień dotyczy nie tylko administracji bazą danych, ale też
administracji serwerem sieciowym, siecią LAN czy też superkomputerem. W
praktyce zresztą jest często tak, że osoba, która zarządza serwerem
bazodanowym i opiekuje się bazami danych, jest też jednocześnie zaangażowana
w administrację lokalną siecią, dbanie o bezpieczeństwo w tej sieci i
rozwiązywanie problemów związanych z aplikacjami korzystającymi z bazy
danych. Jest to więc zajęcie wymagające bardzo wszechstronnej wiedzy.
Zagadnienia, które są omawiane poniżej, można podzielić na następujące:
bezpieczeństwo baz danych
polecenia SQL służące do administracji bazą danych.
przykłady typowych zadań administracyjnych z punktu widzenia
użytkowników
przykłady typowych zadań administracyjnych z punktu widzenia pracy
serwera
pliki konfiguracyjne
backup baz danych
Bezpieczeństwo bazy danych MySQL
Baza danych, tak jak każda aplikacja internetowa jest narażona na różnego
rodzaju ataki sieciowe. Serwer baz danych nasłuchuje najczęściej na porcie 3306
protokołu TCP i jest narażony na takie same rodzaje ataków jak inne aplikacje
internetowe (przepełnienie bufora, podszywanie się pod inny adres IP, ataki DoS,
sniffing i inne).
Oprócz tego, w bazie danych znajdują się bardzo ważne dane, które powinny być
szczególnie chronione przed dostępem do niepowołanych osób. Dostęp do
pewnych danych z bazy danych (na przykład hasła w bankach, kody kart
elektronicznych) przez niepowołane osoby mógłby doprowadzić do
katastrofalnych skutków.
MySQL opiera zasady bezpieczeństwa na koncepcji tzw. ACL (ang. Access
Control Lists) w przypadku wszystkich połączeń, zapytań i innych operacji
wykonywanych przez użytkowników. Jest też odpowiednie wsparcie dla
połączeń szyfrowanych SSL między klientem i serwerem baz danych.
Większość z omawianych w tej części koncepcji nie jest specyficzna wyłącznie
dla pracy z bazą danych MySQL, lecz można je uogólnić również na przypadek
innych aplikacji internetowych.
Podstawowe zasady bezpieczeństwa podczas pracy na stanowisku admina
MySQL
Należy bezwzględnie ustawić hasło dla administratora. Jeśli po wydaniu
komendy mysql -u root nie zostaniemy poproszeni o hasło, to znaczy
że na naszym serwerze bazodanowym jest fatalnie.
Nigdy nie wolno dawać dostępu do bazy mysql innym użytkownikom poza
administratorem. Jest to sprawa kluczowa, gdyż w tablicach bazy mysql
znajdują się definicje dostępu do danych bazy danych dla konkretnych
użytkowników, między innymi hasła dostępu. Każdy kto ma dostęp do
komputera wymienionego na liście komputerów, z którego można połączyć
się z bazą danych, może podszyć się pod innego użytkownika.
Należy nauczyć się poleceń systemu nadawania i odbierania uprawnień
(polecenia GRANT i REVOKE). Nie należy nigdy dawać zbyt dużej swobody
użytkownikom. Lepiej dać mniej niż więcej.
Nie należy dawać dostępu do wszystkich baz danych, a jedynie do
wybranych. Nie należy też dawać dostępu do baz danych ze wszystkich
hostów, a jedynie z wybranych.
Nigdy nie należy przechowywać w bazie danych haseł w postaci
niezakodowanej. Zamiast tego należy używać funkcji kodujących (na
przykład MD5(), SHA1()) lub innych, które używają algorytmów
działających tylko w jedną stronę (tylko kodujących).
Nie wolno wybierać haseł, które łatwo jest złamać (na przykład odgadnąć).
Zatem nie należy absolutnie używać haseł ze słownika, imion, nazwisk, itp.
Należy w hasłach stosować znaki specjalne, na przykład #, ?, @, cyfry.
Dobrym nawykiem jest też używanie w hasłach różnej wielkości liter.
Należy zainstalować firewall. To powinno obronić serwer bazy danych przed
połową exploitów krążących w sieci.
Należy spróbować przeskanować porty na swoim komputerze. Serwer bazy
danych MySQL pracuje najczęściej na porcie 3306. Ten port nie powinien
być dostępny dla innych hostów niż te zdefiniowane w tablicy
mysql.user. Można to zrobić na najbliższym routerze albo zdefiniować w
firewallu.
Wyrażenia SQL służące do administracji bazą MySQL
GRANT i REVOKE
Polecenie GRANT służy do zakładania kont użytkownikom bazy danych i do
nadawania im pewnych przywilejów związanych z dostępem do danych.
Polecenie REVOKE służy do odbierania nadanych uprawnień zadanym
użytkownikom.
Wszystkie dane o użytkownikach i przywilejach jakie posiadają są
przechowywane w bazie o nazwie mysql, która dla nieuprawnionych
użytkowników nie powinna być nawet widoczna.
Składnia polecenia GRANT jest następująca
GRANT
typ_przyw [(lista_kolumn)]
[, typ_przyw [(lista_kolumn)]] ...
ON {tablica | * | *.* | baza.*}
TO user [IDENTIFIED BY [PASSWORD] 'haslo']
[, user [IDENTIFIED BY [PASSWORD] 'haslo']] ... [REQUIRE
NONE |
[{SSL| X509}]
[CIPHER 'cipher' [AND]]
[ISSUER 'issuer' [AND]]
[SUBJECT 'subject']]
[WITH [GRANT OPTION |
MAX_QUERIES_PER_HOUR ile |
MAX_UPDATES_PER_HOUR ile |
MAX_CONNECTIONS_PER_HOUR ile ]]
Składnia polecenia REVOKE jest następująca
REVOKE
typ_przyw [(lista_kolumn)]
[, typ_przyw [(lista_kolumn)]] ...
ON {tablica | * | *.* | baza.*}
FROM user1 [, user2] ...
lub razem, kiedy chcemy zabrać wszystkie możliwe przywileje
wymienionym użytkownikom:
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user1 [, user2] ...
Można wyróżnić 4 poziomy dostępu do bazy danych.
o Poziom globalny
Przywileje globalne stosują się do wszystkich baz danych na danym
serwerze bazodanowym. Informacja o takich przywilejach jest
przechowywana w tablicy mysql.user.
Polecenia GRANT ALL ON *.* oraz REVOKE ALL ON *.*
stosują się właśnie do przywilejów globalnych.
o Poziom bazodanowy
Przywileje bazodanowe stosują się do wszystkich tablic w danej bazie
danych. Informacja o takich przywilejach jest przechowywana w
tablicach mysql.db oraz mysql.host.
Polecenia GRANT ALL ON nazwa_bazy.* oraz REVOKE ALL ON
nazwa_bazy.* dotyczą nadawania i odbierania przywilejów
bazodanowych, czyli tylko w bazie danych o nazwie nazwa_bazy.
o Poziom tablicowy
Przywileje tablicowe stosują się do wszystkich kolumn w danej tablicy.
Informacja o takich przywilejach jest przechowywana w tablicy mysql.tables_priv
Polecenia GRANT ALL ON nazwa_bazy.nazwa_tablicy oraz
REVOKE ALL ON nazwa_bazy.nazwa_tablicy dotyczą tylko
przywilejów tablicowych, czyli dostępu do danych w tablicy o nazwie
nazwa_tablicy w bazie o nazwie nazwa_bazy.
o Poziom kolumnowy
Przywileje kolumnowe dotyczą tylko dostępu do konkretnych
(wybranych) kolumn danej tablicy. Informacja o takich przywilejach jest
przechowywana w tablicy mysql.columns_priv.
Usunięcie wszystkich przywilejów polega więc najczęściej na usunięciu
odpowiednich danych z kilku tablic bazy mysql. Aby usunąć wszystkie
możliwe przywileje danemu użytkownikowi lub użytkownikom, należy
posłużyć się następującym poleceniem:
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
Dla poleceń GRANT i REVOKE, typ przywileju typ_przyw może być m.in.
jednym z następujących:
Przywilej Znaczenie
ALL [PRIVILEGES] Wszystkie przywileje poza GRANT OPTION
ALTER Możliwość wykonywania ALTER TABLE
CREATE Możliwość wykonywania CREATE TABLE
CREATE TEMPORARY
TABLES
Możliwość wykonywania CREATE TEMPORARY TABLE
CREATE VIEW Możliwość wykonywania CREATE VIEW
DELETE Możliwość wykonywania DELETE
DROP Możliwość wykonywania DROP TABLE
FILE Możliwość wykonywania SELECT ... INTO
OUTFILE oraz LOAD DATA INFILE
INDEX Możliwość wykonywania CREATE INDEX oraz
DROP INDEX
INSERT Możliwość wykonywania INSERT
LOCK TABLES
Możliwość wykonywania LOCK TABLES na
tablicach, w przypadku których mamy możliwość
wykonywania INSERT
RELOAD Możliwość wykonywania FLUSH, na przykład
FLUSH PRIVILEGES
ALTER Możliwość wykonywania ALTER TABLE
SELECT Możliwość wykonywania SELECT
SHOW DATABASES Możliwość wykonywania SHOW DATABASES
SHOW VIEW Możliwość wykonywania SHOW CREATE VIEW
SHUTDOWN Możliwość zatrzymywania pracy serwera
SUPER
Możliwość wykonywania CHANGE MASTER,
KILL, PURGE MASTER LOGS, SET GLOBAL,
również pozwolenie na połączenie z bazą nawet w
przypadku, kiedy przekroczono maksymalna liczbę
połączeń
UPDATE Możliwość wykonywania UPDATE
USAGE Bez żadnych przywilejów
GRANT OPTION Możliwość nadawania przywilejów innym
użytkownikom (bardzo niebezpieczna opcja)
Przywileje EXECUTION, FILE, RELOAD, SHOW DATABASES,
SHUTDOWN oraz SUPER są przywilejami administracyjnymi i mogą być
nadane tylko na poziomie globalnym (używając ON *.*). Pozostałe
przywileje mogą być nadawane bardziej specyficznie.
Opcji USAGE używamy, kiedy chcemy założyć konto użytkownikowi nie
nadając mu żadnych przywilejów.
Jedynymi przywilejami (typ_przyw), które można użyć określając dostęp
na poziomie tablicowym, są: SELECT, INSERT, UPDATE, DELETE,
CREATE, DROP, GRANT OPTION, INDEX oraz ALTER
Jedynymi przywilejami (typ_przyw), które można określić przy dostępie
do kolumn, są: SELECT, INSERT oraz UPDATE
W przypadku określania przywilejów na poziomie globalnym, bazodanowym
lub tablicowym, polecenie GRANT ALL przypisze tylko te przywileje, które
można przypisać na danym poziomie. Na przykład, jeśli użyjemy GRANT
ALL ON baza.* a więc będziemy chcieli nadać wszystkie przywileje na
poziomie bazodanowym, wówczas nie zostanie nadany żaden przywilej
tylko-globalny, na przykład FILE.
W przypadku poziomu kolumnowego (a więc wtedy, gdy w poleceniu
GRANT podamy listę kolumn), musimy wyszczególnić wszystkie przywileje,
jakie mają być nadane. Nie można w tym przypadku użyć GRANT ALL.
DROP USER
Składnia polecenia DROP USER jest następująca
DROP USER user
Polecenie DROP USER usuwa konto które nie ma żadnych przywilejów,
usuwając odpowiednie wpisy z tablicy user w bazie mysql.
Aby usunąć z bazy konto użytkownika, należy wykonać następujące kroki:
1. wykonać polecenie SHOW GRANTS aby dowiedzieć się, jakie
przywileje posiada dany użytkownik, którego konto chcemy usunąć, np.