Administrace MySQL I. - úvod
Dnes tu máme první díl seriálu o administraci MySQL a
začneme s instalací a nastavením uživatelských práv.
27.8.2004 08:00 |
Martin Svoboda
| Články autora
| přečteno 19629×
Co je to
Je to relační databáze, která se dnes hojně používá ve spojení s PHP
pro tvorbu dynamických stránek, není to jen pouhé úložiště dat, ale umí s nimi
efektivně pracovat. Je OpenSource a pro nekomerční použití
zdarma. Je rychlá. Je snadno přenositelná (UNIX, Windows, OS/2 ...).
Ale protože chci seriál zaměřit spíše prakticky, dost vychvalování a
podíváme se co nás čeká.
Jak bude seriál vypadat
Zaměřen bude hlavně na administraci a konfiguraci MySQL serveru.
Postupně projdeme instalaci, konfiguraci, zabezpečení a správu serveru,
naučíme se pracovat s obslužnými programy, zálohovat a jiné užitečné věci.
Instalace
Aby dnešní úvod nezůstal jen suchou teorií. Nainstalujeme MySQL abychom
mohli začít s konfigurací.
co budeme potřebovat
Budeme potřebovat balík zdrojových kódů, nebo ještě lépe balík přímo
pro vaší distribuci (ale většina distribucí ho obsahuje, takže by to pro vás neměl být
problém), pokud ne tahejte z www.mysql.com.
A ještě jedna rada, stáhněte si stabilní verzi (aktuálně 4.0.20), verze 5 je vývojová a
není vhodná pro naše použítí, protože nemusí být ještě úplně stabilní a odladěná.
Já používám verzi 4.0.20 od toho se budou odvíjet také všechny příklady v tomto seriálu.
Pokud používáte některou ze starších verzí, tak vás vždy na všechny rozdíly upozorním.
nároky
Záleží na tom k čemu budete MySQL využívat, ale pro účely našeho seriálu postačí i slabší konfigurace
počítače, já MySQL používám na Celeronu 700 Mhz, 128 MB @ 66Mhz, HDD 20 GB, slackware 10.0 s jádrem 2.6.7
a vše šlape spokojeně jak má. Pokud by jste měli při kompilaci problém s nedostatkem paměti, můžete použít
volbu --with-low-memory (viz. dále).
jdeme na to - instalujeme ze zdrojáku
Balíček se zdrojovými kódy obsahuje: server mysqld, klientské nástroje pro práci a administraci mysql,
knihovny jazka C, dokumentaci, ukázkové soubory a jazykovou podporu. Má něco kolem 13 MB, takže ho
můžete stáhnout i s pomalejším připojením.
Do adresáře /usr/local/ nakopírujte balíček
a rozbalte ho
$ tar xvzf mysql-cislo-verze.tar.gz
Vlezte do adresře
Nyní nakonfigurujeme, zkompilujeme a nainstalujeme (na to musíte být root, nebo pro instalaci zvolit adresář
ve kterém mám právo zápisu), pokud spustíte konfigurační
script s parametrem help vypíše vám volby které můžete použít. Na ty nejpoužívanější/nejdůležitější
se podíváme podrobněji.
--prefix=cesta - nastavuje kořenovou složku, implicitní hodnota je /usr/local/mysql
--localstatedir=cesta - nastavuje adresář s daty, pokud chcete mít databáze uložené
mimo kořenovou složku použijte tuto volbu
Můžete nastavit umístění i ostatních adresářů, pokud tak chcete učinit spusťte
./configure --help a přečtete si sekci Fine tuning of the installation directories.
Pokud to nebudete stíhat skuste ./configure --help | more.
--with-openssl zapne podporu open ssl
--without-server - pokud chcete zkompilovat jen klientské programy a budete
přistupovat k serveru jinde
--with-low-memory - jak už jsem víše zmínil, tato volba bude užitečná, pokud kompilujete na stroji
, který má nedostatek operační paměti pro normální průběh instalace.
Tak a teď, jestli máte vybráno co potřebujete můžete spustit konfigurační skript
s vašimy parametry, skompilovat a nainstalovat.
$ ./configure --vase-volby && make && make install"
Pokud vše dobře dopadlo, zbývá nám nainstalovat základní tabulky,
to provedeme následujícím příkazem:
Ještě přidáme do proměnné PATH (např. v /etc/profile)cestu k adresáři bin, který je
v instalačním adresáři. To proto aby jste na příkazovou řádku
nemuseli pokaždé vypisovat plnou cestu.
server nastartujete příkazem
jdeme na to - instalujeme balíčky
Pro ukázku jsem vybral balíčky .tgz protože používám
slackware, u jiné distribuce se to bude lišit, např umístění
startovacích scriptů apd.
$installpkg /cesta/balicky.tgz
Měl by se nám vytvořit uživatel a skupina z názvem mysql, pokud ne vytvořte je :) (adduser)
Dále je nutné nastavit správná práva pro adresář mysql (při instalaci z balíčku je to /var/lib/mysql),
na jeho strukturu se také někdy podíváme.
$chmod -R 700 /var/lib/mysql
$chown -R mysql.mysql /var/lib/mysql
Volba -R je důležitá, zajistí, že program chmod projde i podadresáře, ale to jen tak
mimo.
Také by měl existovat startovací script (/etc/rc.d/rc.mysql), pokud
chcete aby mysql nabíhalo samo musíte mu nastavit právo spouštění pro vlastníka, to
platí pro slackware, pokud používáte jinou distribuci, musíte zajistit
aby se rc soubor spouštěl v požadovaném runlevelu, nebo tak :-)
$ chmod 700 /etc/rc.d/rc.mysql
Pokud chcete spouštět hned zavolejte script s parametrem start
$ /etc/rc.d/rc.mysql start
Než pujdeme dál, bylo by dobré ukázat si jak se k databázi připojíme, bez toho by jsme se
asi nepohnuli dál.
mysql je klientský program, sloužící pro připojení k serveru, volba -u slouží pro
specifikaci uživatelského jména, další volby zatím nebudeme potřebovat, předpoklám že vám
server běží na localhost.
řízení přístupu
V tomto stádiu je instalace nezabezpečená a kdokoliv se může přihlásit jako
root (myšleno root v mysql, né pro váš systém, to je jen shoda jmen, takže nepropadejte panice :-), jak už jste
si patrně všimli :-), proto se nyní podíváme jak to funguje a vše dáme do pořádku.
Databáze mysql (kterou jsme vytvořili příkazem mysql_install_db) obsahuje tyto tabulky pro
řízení přístupu:
- user
- db
- host
- func
- columns_priv
- tables_priv
Jestli mi nevěříte, můžete si je zkusit vypsat
mysql > \u mysql /* vlezeme do databáze */
mysql > show tables; /* vypíšeme tabulky */
mysql > slect * from nazev_tabulky /* vypíšeme obsah určité tabulky */
tabulka user
V tabulce user jsou uložena oprávnění pro uživatele, která platí na úrovni celé
databáze, proto dávejte pozor co zde komu dovolíte.
host - IP adresa, nebo název počítače, odkud se uživatel může připojit, pokud je vám to jedno, použijte
znak % jako zástupný symbol pro cokoliv. Při nastavování m;žete použít síťovou masku (od verze 3.23)
User - Jméno uživatele.
Password - Heslo zahashované funkcí PASSWORD().
Následující položky můžou nabývat hodnot Y a N,
jako výchozí hodnota je nastaveno N.
Select_priv - Vypisování řádků z tabulky.
Insert_priv - Vkládání řádků do tabulky.
Update_priv - Update řádků v tabulce.
Delete_priv - Odstraňování řádků z tabulky.
Create_priv - Vytváření databází a tabulek.
Drop_priv - Mazání databází a tabulek.
Reload_priv - Znovunačtení tabulky přístupových oprávnění.
Shutdown_priv - Vypínaní serveru.
Process_priv - Prohlížení informací o vláknech serveru
File_priv - Přístup k souborům na serveru, číst můžete jen soubory čitelné všemi a
vytvářet jen nové soubory tzn. že nemůžete přepsat existující soubor.
Grant_priv - Udělovaní oprávnění jiným účtům.
References_priv - Rezervováno pro budoucí použití.
Index_priv - Vytváření/odstraňování indexů.
Alter_priv - Změny struktury tabulky.
Show_db_priv - Zobrazovat informace o databázích (SHOW DATABASES)
Super_priv - Superuživatelské operace, práce s vlákny apd...
Create_tmp_table_priv - Vytváření dočasných tabulek
Execute_priv - Spouštění uživatelských procedur (zatím se nepoužívá, kdyžtak mě opravte ;-)
Lock_tables_priv - Povolí nastavení zámku proti čtení/zápisu.
Tabulka user obsahuje ještě některé další položky, ale ty se nevztahují k přímo k přístupovým právům.
Tabulka DB
Zde jsou uložena oprávnění k jednotlivým databázím, struktura je v podstatě stejná u jako
u tabulky user.
Tabulka host
Zde můžete měnit oprávnění pro různé databáze, podle toho, odkud
se uživatel přihlásil.
Tabulka columns_priv
Práva pro jednotlivé sloupce tabulek.
Tabulka tables_priv
Práva pro jednotlivé tabulky.
Práce s uživatelskými účty
Teď by jste asi rádi věděli, jak se s tím pracuje? Mohlo by vás napadnout, že
, když je to všechno v tabulkách, že by jsme s nimi mohli pracovat obyčejně, jako s
jinými daty. Ano samozřejmě, že to taky jde, ale server MySQL si tyto informace udržuje v paměti,
pokud provedete změnu v tabulce příkazem UPDATE, musíte spusit příkaz FLUSH PRIVILEGES
(dostupný od mysql verze 3.22), který serveru řekne, aby si znovu načetl tabulky přístupových
oprávnění.
Zdá se vám to zbytečně složité? Naštěstí má MySQL speciální příkazy, nebo obslužné programy:
GRANT
Příkaz, který slouží pro přidávaní uživatelů a nastavení jejich práv. V MySQL je od verze 3.22.
GRANT oprávnění(sloupce)
ON kde
TO komu IDENTIFIED BY 'heslo'
REQUIRE Volby pro šifrování
WITH další volby
oprávnění, určuje co bude moct uživatel dělat, na výběr máte z:
ALL - Může všechno.
ALTER - Měnit strukturu tabulky.
CREATE - Vytvářet tabulky a databáze.
DELETE - Mazat záznamy z tabulek.
DROP - Mazat tabulky a databáze.
FILE - Práce se soubory na serveru.
INDEX - Vytvářet a odstraňovat indexy.
INSERT - Vkládat řádky do tabulek.
PROCESS - Získávání informací o vláknech.
REFERENCES - Nepoužívá se.
RELOAD - Znovunačítání přístupových oprávnění apd.
SELECT - Vybírat záznamy z tabulek.
SHUTDOWN - Ukončovat práci serveru.
UPDATE - Aktualizování řádků v tabulce.
USAGE - Nemá žádná oprávnění.
Je to podobné položkám v tabulce user apd. že ? ;-)
mysql> GRANT ALL ON *.* TO nond@'%' IDENTIFIED BY 'tajne_heslo';
mysql> GRANT ALL ON *.* TO nond@'localhost' IDENTIFIED BY 'tajne_heslo';
V tomto příkladu jsem vytvořili uživatele nond, který má všechna práva na všechny databáze a může se
přihlásit odkudkoliv. Je to v podstatě superuživatel, jenom nemůže přidělovat práva ostatním, k
tomu bychom museli uvést volbu WITH GRANT OPTION.
mysql> GRANT INSERT,SELECT,UPDATE,DELETE,CREATE,DROP ON userova_db.*\
\ TO user@'%' IDENTIFIED BY 'tajne_heslo';
mysql> GRANT INSERT,SELECT,UPDATE,DELETE,CREATE,DROP ON userova_db.*\
\ TO user@'localhost' IDENTIFIED BY 'tajne_heslo';
Teď jsme vytvořili obyčejného uživatele, který se může připojit odkudkoliv a v databázi userova_db
může provádět řekněme základní operace.
kde
Určuje k jaké databázi, popřípadě tabulce, nebo sloupečku (ty se uvádí v (sloupce), viz nahoře) má uživatel přístup. Zápis je databáz.tabulka a je možno použít zástupný znak * pro cokoliv.
userova_db.knihy /* v databázi userova_db tabulka knihy */
userova_db.* /* všechny tabulky v userova_db */
*.poznamky /* tabulka poznámky ve všech databázích */
komu
Zde se nastavuje, kdo se může, odkud připojit. Zápis je 'jméno'@'doména', s tím, že
znak % má stejný význam jako * v předchozím příkladu. Hodnota localhost znamená místního
hostitele, tj, tam kde běží server.
'user'@'192.168.%' /* user se může připojit odkudkoli z podsítě třídy B*/
'user'@'%.priklad.cz' /* všechny počítače v doméně priklad.cz*/
Odebírání práv
K tomu slouží příkaz REVOKE, neumí však vymazat účet, to musíte provést ručně příkazem DELETE,
potom nezapomeňte ještě zadat příkaz FLUSH PRIVILEGES, aby si server znovu načetl tabulku oprávnění do paměti.
mysql>REVOKE práva (sloupce) ON kde FROM kdo;
Položky práva, kde a kdo jsou stejné jako u příkazu GRANT.
Nastavení hesla
Opět můžeme provést příkazem UPDATE, ale v MySQL existuje příkaz SET PASSWORD, který
je bezpečnější a snažší, prostě k tomu určený. Nebudu ho ani popisovat, protože z příkladu vám bude vše jasné.
mysql>SET PASSWORD FOR 'kdo'@'domena' = PASSSWORD('tajne_heslo');
Závěr
Dnes jsem vám ukázal jak MySQL nainstalovat a jak spravovat uživatelské účty, doufám že už nemáte roota bez
hesla :-)
No a příště se podíváme na další věci týkající se zabezpečení MySQL, nastavování limitů a šifrování.
Doufám že se vám článek líbil a pokud vám v něčem pomůže a jestliže máte nějaké nápady, dotazy nebo připomínky
, budu rád, když využijete diskuzi.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|