MySQL (63) - jemné nastavení práv
Potřetí a naposledy se budeme v MySQL zabývat právy; tentokrát jejich jemným nastavením.
17.3.2006 06:00 |
Petr Zajíc
| Články autora
| přečteno 20493×
Při našem rozboru oprávnění MySQL jsme se dostali k přihlášení
uživatelů. Už tedy umíme zakázat nebo povolit nějakému uživateli z
nějakého stroje přihlásit se k našemu serveru. To je sice moc hezké,
ale nestačí to.
MySQL a oprávnění při požadavku
Lidé se k MySQL nepřihlašují proto, aby byli spojeni s databázovým
serverem. Přihlašují se proto, že chtějí se serverem něco dělat, tvořit
strukturu databáze nebo pracovat s daty. Takže, když si lehce
zopakujeme látku z minulého dílu a založíme uživatele franta, který se
smí na server připojit z místního stroje:
grant usage on *.* to
franta@'localhost' identified by 'atnarf';
A přihlásíme se jako tento uživatel, zjistíme, že kromě přihlášení
nemůžeme se serverem dělat vůbec nic. Nelze použít žádnou databázi ani
žádnou vytvořit. Uživatel prostě nemá jiná než přihlašovací práva.
Pozn.: Nemusí to být tak úplně
pravda. V závislosti na konfiguraci serveru může mít náš nový uživatel
implicitně přístup do databáze test. Proč to je, to uvidíme za chvíli.
Přidělení globálních práv
Odpovědí na tento problém je nahlédnutí do tabulky user. Sice jsem
Vám to minule zatajil, ale tato tabulka obsahuje i další pole kromě host, user a password. Ta jsou určena právě pro
přidělování globálních práv, takže například pole select_priv povoluje či zakazuje
našemu Frantovi číst databázová data (k čemu slouží insert_priv a další jistě
vysvětlovat nemusím). Můžete si to vyzkoušet. Zadáte následující
příkazy:
update user set
select_priv='Y' where user='franta' and host='localhost';
flush privileges;
Od této chvíle náš Franta může klidně brouzdat databázemi a vybírat
data pomocí příkazu SELECT. O něco pohodlněji by se dalo podobné věci
dosáhnout jedním příkazem GRANT. Předvedu:
grant select on *.* to
franta@'localhost' identified by 'atnarf';
Neboli: Příkaz grant může zajišťovat nejen oprávnění při připojení,
ale i oprávnění při požadavku. Jednotlivých oprávnění při požadavku je
asi pětadvacet a nebudu je zde rozepisovat, k tomu slouží manuál.
Důležité je rověž vědět, že v jednom příkazu GRANT lze oprávnění
kombinovat, takže našemu uživateli bychom mohli například povolit plnou
manipulaci s daty v existujících tabulkách pomocí následujícího příkazu
GRANT:
grant select, insert,
update, delete on *.* to franta@'localhost' identified by 'atnarf';
Což, jak už nejspíš tušíte, zaktualizuje související políčka v
tabulce user.
Problém s globálními právy
Největší problém s globálními právy spočívá v tom, že jsou příliš
přebujelá. Je třeba si uvědomit, že pokud takto práva přidělíme, tak
uživatel může přistupovat k datům ve všech databázích na serveru, A TO
VČETNĚ DATABÁZÍ, které vzniknou v budoucnu!!! Takový systém je dost
nepředvídatelný, zejména pokud by se jednalo o server, v němž má každý
uživatel data v jedné databázi. Taková konfigurace je obvyklá například
na hostinzích. Proto se globální práva uživatelům v typických scénářích
až na malé výjimky neposkytují. Čímž se dostáváme k další otázce, a tou
je odebrání práv.
Odebrání práv
Odebrání práv funguje analogicky k jeho přidělování. Související
sloupce v tabulce user se
nasaví na N (tedy nepovoleno), nebo lze využít protipólu příkazu GRANT,
a tím je
REVOKE. Protože má podobnou syntaxi jako GRANT, tak to pouze
předvedu:
revoke select, insert,
delete, update on *.* from 'franta'@'localhost';
Pozn.: Pozor na syntaxi. Správně
je "GRANT ... TO" a "REVOKE ... FROM". Ať se Vám to neplete. REVOKE
rovněž nikdy neodstraní záznam z tabulky user, takže pokud budete chtít
uživateli znemožnit i samotné přihlášení na server, tak musíte sáhnout
po ručním promazávání tabulky user.
Práva k jednotlivým databázím
V praxi se skutečně nejčastěji používá tento způsob, kdy:
- Uživatelé jsou v tabulce user zapsáni pouze proto, aby se mohli
přihlásit k serveru jako takovému a žádná globální práva jim nejsou
poskytnuta
- Uživatelům jsou pak povolena pouze práva pro konkrétní databázi.
Předveďme, jak to celé funguje, pokud budeme chtít uživateli franta
povolit přístup do nově vzniklé databáze franta z lokálního počítače.
Nejprve pomocí ručního zápisu do tabulek oprávnění:
delete from user where
user = 'franta' and host='localhost';
insert into user (user, host, password) values ('franta', 'localhost',
password('atnarf'));
create database franta;
insert into db (host, db, user, Select_priv, Insert_priv, Update_priv,
Delete_priv, Create_priv, Drop_priv,
References_priv, Index_priv, Alter_priv, Create_tmp_table_priv,
Lock_tables_priv, Create_view_priv,
Show_view_priv, Create_routine_priv, Alter_routine_priv, Execute_priv)
values
('localhost', 'franta', 'franta', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y',
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
flush privileges;
Je to trochu delší příklad, takže co jsme vlastně provedli: Nejdřív
jsme odstranili a znovu vložili uživatele franta do tabulky user. Byl
to nejrychlejší způsob, jak se ujistit, že nebude mít žádná globální
oprávnění. Následně jsme vytvořili databázi franta, a konečně jsme
zápisem do tabulky db (to děláme nyní poprvé) přidělili uživateli
franta všechna práva k této nově vzniklé databázi.
Všimněte si, že franta nemá práva k žádné jiné databázi na serveru.
Tento způsob přidělování se používá právě na hostinzích. A ještě pro
úplnost dodejme, že to celé lze postatně zkrátit použitím GRANT, v
tomto smyslu:
create database franta;
grant all on franta.* to 'franta'@'localhost' identified by 'atnarf';
Z výroby však může být nastaveno, že jednotliví uživatelé mohou
přistupovat k databázi test. Pokud se chcete podívat, jak je na tom
vaše instalace serveru, stačí se zeptat:
select * from db where
db='test';
Závěr
V popisu přidělování práv bychom mohli podobným způsobem pokračovat
a ukázat si, jak se přidělují práva k jednotlivým tabulkám a sloupcům.
Protože však je to podobné a protože se to tak často nepoužívá,
odpustíme si to. Rovněž je zajímavé "právo přidělovat práva", které
umožňuje jiným uživatelům přidělit práva, která sám mám. MySQL navíc
disponuje možnostmi přidělovat práva na základě toho, zda a jak je
spojení k databázi zašifrované.
Pokud se budete chtít stát v MySQL bezpečnostními experty,
pravděpodobně Vám informace zde uvedené stačit nebudou. Ale jestliže
chcete celému mechanizmu pouze rozumnět, nebo jestliže chcete nastavit
pár jednodušších bezpečnostních pravidel, tak byste tu měli najít, co
potřebujete.
Verze pro tisk
|
Nejsou žádné diskuzní příspěvky u dané položky.
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|