LINUXSOFT.cz
Username: Password:     
    CZ UK PL

> 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 | read 19427×

DISCUSSION   

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

$ cd mysql-cislo-verze

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:

$ mysql_install_db

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

$ safe_mysqld &

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 -u root

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.

 

DISCUSSION

For this item is no comments.

Add comment is possible for logged registered users.
> Search Software
> Search Google
1. Pacman linux
Download: 4880x
2. FreeBSD
Download: 9067x
3. PCLinuxOS-2010
Download: 8564x
4. alcolix
Download: 10949x
5. Onebase Linux
Download: 9661x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6245x

1. xinetd
Download: 2413x
2. RDGS
Download: 937x
3. spkg
Download: 4762x
4. LinPacker
Download: 9968x
5. VFU File Manager
Download: 3199x
6. LeftHand Mała Księgowość
Download: 7203x
7. MISU pyFotoResize
Download: 2811x
8. Lefthand CRM
Download: 3563x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3122x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz