GNU/Linux >> Znalost Linux >  >> Linux

Pochopení oprávnění MySQL

Primární funkcí autorizačního systému MySQL je přiřadit ověřenému uživateli oprávnění k databázi, jako jsou SELECT, INSERT, UPDATE a DELETE. Funkčnost autorizačního systému zahrnuje možnost mít anonymní uživatele a povolit specifické funkce, jako je LOAD DATA INFILE a různé administrativní operace. Toto oprávnění zajišťuje, že uživatelé mohou provádět pouze operace, pro které jim byla udělena příslušná oprávnění.

Určení vhodných uživatelských oprávnění

Účtu MySQL můžete udělit několik typů oprávnění na různých úrovních:globálně nebo pro konkrétní databáze, tabulky nebo sloupce. Můžete například dát uživateli možnost vybírat z libovolné tabulky v jakékoli databázi tím, že mu udělíte oprávnění SELECT na globální úrovni.

Účtu můžete poskytnout úplnou kontrolu nad konkrétní databází, aniž byste měli jakákoli oprávnění k jiným databázím. Účet pak může vytvářet databázi, vytvářet tabulky a další databázové objekty, vybírat z tabulek a přidávat, mazat nebo aktualizovat nové záznamy.

Udělování administrativních oprávnění

Pro administrativní uživatele platí následující globální oprávnění:

  • SOUBOR :Umožňuje uživatelům dát pokyn serveru MySQL, aby četl a zapisoval soubory v souborovém systému hostitele serveru.
  • ZPRACOVAT :Umožňuje uživatelům použít příkaz SHOW PROCESSLIST k zobrazení všech příkazů, které klienti provádějí.
  • SUPER :Umožňuje uživatelům ukončit připojení ostatních klientů nebo změnit konfiguraci běhového prostředí serveru.
  • VŠECHNY :Uděluje všechna oprávnění kromě možnosti udělovat oprávnění ostatním uživatelům.

SUPER oprávnění správce poskytuje uživatelům možnost provádět další úkoly, včetně nastavení globálních proměnných a ukončování připojení klientů. Existují také některé speciální specifikátory oprávnění:

– Použijte VŠECHNA a VŠECHNA PRIVILEGIA pro udělení všech oprávnění kromě možnosti udělit oprávnění jiným účtům. Použijte GRANT ALL… S GRANT OPTION k udělení všech oprávnění, včetně možnosti udělit oprávnění jiným účtům.
– Použijte USAGE k udělení možnosti připojení k serveru. Toto oprávnění vytvoří záznam v uživatelské tabulce pro účet, ale bez jakýchkoli oprávnění. Účet pak lze použít pro přístup k serveru pro omezené účely, jako je například vydávání příkazů SHOW VARIABLES nebo SHOW STATUS. Účet nelze použít pro přístup k obsahu databáze, jako jsou tabulky, ačkoli tato oprávnění mohou být udělena později.

Mezi další administrátorská oprávnění patří CREATE USER , VYTVOŘTE DOČASNÉ TABULKY , ZOBRAZIT DATABÁZE , ZAMKNOUT TABULKY , ZNOVU NAČÍST a VYPNUTÍ . Oprávnění správce, včetně těch na snímku, lze použít k ohrožení zabezpečení, přístupu k privilegovaným datům nebo k provádění útoků typu denial-of-service na serveru. Administrátorská oprávnění udělujte střídmě, protože je mohou zneužít zlomyslní nebo neopatrní uživatelé.

Prohlášení GRANT

Výpis GRANT vytvoří nový účet nebo upraví stávající účet.

GRANT syntaxe:

 GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';

Ve výše uvedené syntaxi/příkladu uděluje příkaz oprávnění SELECT pro všechny tabulky v databázi world_innodb uživateli jménem kari, který se musí připojit z místního hostitele a používat heslo Abc123.

Ustanovení prohlášení:
1. Privilegia, která mají být udělena
2. Úroveň oprávnění:

  • Globální:*.*
  • Databáze:[db_name].*
  • Tabulka:[db_name].[table_name]
  • Uložená rutina:[db_name].[routine_name]

3. Účet, kterému udělujete oprávnění.
4. Volitelné heslo.

Klauzule prohlášení GRANT mají následující účinky:

  • GRANT klíčové slovo:Určuje jedno nebo více názvů oprávnění označujících, která oprávnění udělujete. V názvech oprávnění se nerozlišují velká a malá písmena. Chcete-li uvést více oprávnění, oddělte je čárkami.
  • ZAPNUTO klauzule:Určuje úroveň oprávnění, která udělujete.
  • DO klauzule:Určuje účet, kterému udělujete oprávnění. Pokud účet ještě neexistuje, výpis jej vytvoří.
  • IDENTIFIKOVANÝ OD klauzule:(Volitelné) Přiřadí zadané heslo k účtu. Pokud účet již existuje, heslo nahradí jakékoli staré.

Vynechání klauzule IDENTIFIED BY má následující účinek:

  • Pokud účet v klauzuli TO existuje, jeho heslo zůstane nezměněno.
  • Pokud účet v klauzuli TO neexistuje, je vytvořen s prázdným heslem.

Jako bezpečnostní opatření povolte NO_AUTO_CREATE_USER Režim SQL, který zabrání příkazu GRANT ve vytváření nových účtů, když neurčíte klauzuli IDENTIFIED BY.

Zobrazte oprávnění GRANT

SHOW GRANTS zobrazí příkazy, které znovu vytvářejí oprávnění pro zadaného uživatele. Zobrazuje oprávnění pouze pro přesný účet uvedený ve výpisu. Níže uvedený příklad ukazuje oprávnění pouze pro [email protected], nikoli pro kari@%.

 SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER();

Můžete také zadat název účtu pro zobrazení grantů pro:

 mysql>SHOW GRANTS FOR
'kari'@'myhost.example.com'; 
+----------------------------------------------------------------+ 
| Grants for [email protected]                             | 
+----------------------------------------------------------------+ 
| GRANT FILE ON *.* TO 'kari'@'myhost.example.com'               | 
| GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| 
| IDENTIFIED BY PASSWORD                                         | 
| '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA'                    | 
+----------------------------------------------------------------+

Výstup zobrazený výše se skládá ze dvou příkazů GRANT. Jejich klauzule ON zobrazují oprávnění na globální úrovni a na úrovni databáze. Pokud má účet heslo, SHOW GRANTS zobrazí na konci příkazu GRANT klauzuli IDENTIFIED BY PASSWORD; tato klauzule uvádí globální oprávnění účtu. Slovo PASSWORD za IDENTIFIED BY označuje, že zobrazená hodnota hesla je zašifrovaná hodnota uložená v tabulce uživatelů, nikoli skutečné heslo. Protože je heslo uloženo pomocí jednosměrného šifrování, MySQL nemá žádný způsob, jak zobrazit nezašifrované heslo.

Pokud účet může udělit některá nebo všechna svá oprávnění jiným účtům, zobrazí se výstup S GRANT OPTION na konci každého příkazu GRANT, na který se vztahuje.

Omezení uživatelských oprávnění

Nelze explicitně odepřít přístup konkrétnímu uživateli. Heslo nelze přiřadit ke konkrétnímu objektu, jako je databáze, tabulka nebo rutina.

Tabulky grantů

MySQL server čte tabulky grantů z databáze mysql do paměti při spuštění a zakládá všechna rozhodnutí o řízení přístupu na těchto tabulkách. Tabulky odpovídají úrovním oprávnění:

Úroveň oprávnění/ Tabulka Obsah a oprávnění
uživatel Obsahuje záznam pro každý účet známý serveru
db Oprávnění specifická pro databázi
tables_priv Oprávnění pro konkrétní tabulky
columns_priv Oprávnění specifická pro sloupec
procs_priv Oprávnění uložených procedur a funkcí

Uživatel tabulka obsahuje záznam pro každý účet známý serveru a také jeho globální oprávnění. Označuje také další informace o účtu, například:

  • Jakákoli omezení zdrojů, kterým podléhá
  • Zda musí být připojení klientů, kteří používají účet, provedeno přes zabezpečené připojení pomocí SSL

Každý účet musí mít záznam uživatelské tabulky; server určí, zda přijme nebo odmítne každý pokus o připojení čtením obsahu této tabulky. Každý účet má také záznamy v ostatních tabulkách grantů, pokud má oprávnění na jiné než globální úrovni.

Použití tabulek grantů

Server určuje, zda se klient může připojit, na základě sloupců Host, User a Password v uživatelské tabulce. Pro úspěšné připojení musí MySQL odpovídat záznamu v uživatelské tabulce hostiteli, ze kterého se klient připojuje, uživatelskému jménu zadanému klientem a heslu uvedenému v odpovídajícím záznamu.

Poté, co se klient připojí, MySQL zkontroluje přístupová oprávnění pro každý příkaz tím, že porovná identitu účtu se sloupci Host a Uživatel v tabulkách oprávnění.

  • Oprávnění v každém řádku uživatelské tabulky platí globálně pro účet určený jeho sloupci Host a Uživatel.
  • Oprávnění v odpovídajících záznamech tabulek db, tables_priv, columns_priv a procs_priv platí na úrovni určené názvem konkrétní tabulky oprávnění.

Například oprávnění v záznamu tabulky db se vztahují na databázi uvedenou v záznamu, ale ne na jiné databáze. Instalační proces MySQL vytvoří tabulky grantů.

  • Tabulky grantů používají úložiště MyISAM.
  • Dostupnost MyISAM je zaručena.

Provádění změn oprávnění

Server čte tabulky grantů do paměti během spouštěcí sekvence a používá kopie v paměti ke kontrole přístupu klienta. Server obnoví své kopie tabulek grantů v paměti za následujících podmínek:

  • Uživatelský účet upravíte vydáním prohlášení o správě účtu, jako je CREATE USER, GRANT, REVOKE nebo SET PASSWORD.
  • Tabulky znovu načtete explicitně vydáním příkazu FLUSH PRIVILEGES nebo provedením příkazu mysqladmin flush-privileges nebo mysqladmin reload.

Vyhněte se provádění změn přímo v tabulkách grantů z následujících důvodů:

  • Syntaxe výpisů správy účtu je navržena tak, aby byla jasná a přímočará.
  • Pokud uděláte chybu ve výpisu vedení účtu, výpis selže a nezmění žádná nastavení.
  • Pokud při přímé změně tabulek grantů uděláte chybu, můžete zamknout všechny uživatele ze systému.

Kdy se změny použijí

  • Změny globálních oprávnění a hesel se vztahují pouze na následná připojení daného účtu.
  • Změny oprávnění na úrovni databáze se projeví po dalším příkazu klienta USE db_name.
  • Změny oprávnění pro tabulky a rutiny se projeví okamžitě.

Zrušení oprávnění účtu

Pomocí příkazu REVOKE odeberte konkrétní oprávnění příkazu SQL:

REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';

K odebrání oprávnění účtu použijte příkaz REVOKE. Můžete se rozhodnout zrušit oprávnění z různých důvodů, jako je například omezení požadovaného přístupu uživatele. Syntaxe příkazu REVOKE má následující klauzule:

  • ODVOLAT klíčové slovo:Určuje seznam oprávnění, která mají být odebrána.
  • ZAPNUTO klauzule:Označuje úroveň, na které mají být oprávnění odvolána.
  • OD klauzule:Určuje název účtu.

Výše uvedený příklad předpokládá, že Amon má oprávnění SELECT, DELETE, INSERT a UPDATE v databázi world_innodb, ale chcete změnit účet tak, aby měl přístup pouze SELECT. První příklad ruší oprávnění, která mu umožňují provádět změny.

Chcete-li odebrat oprávnění udělovat oprávnění jiným uživatelům:

REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';

Výše uvedený příklad ruší Janovu možnost udělovat ostatním uživatelům veškerá oprávnění, která má pro databázi world_innodb, odebráním oprávnění GRANT OPTION z jeho účtu.

Chcete-li odebrat všechna oprávnění, včetně udělení oprávnění ostatním:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';

Výše uvedený příklad ruší všechna privilegia, která má Sasha účet (na jakékoli úrovni), tím, že z jejího účtu odebere VŠECHNA PRIVILEGIA a GRANT OPTION.

Poznámka :Použijte příkaz SHOW GRANTS před vydáním REVOKE k určení, která oprávnění zrušit, a poté znovu k potvrzení výsledku. Průvodce pro začátečníky ke správě uživatelů MySQL
Porozumění MySQL Pluggable Authentication


Linux
  1. Nainstalujte MariaDB nebo MySQL na Linux

  2. Jak přidat nového uživatele MySQL a udělit přístupová oprávnění

  3. Pochopení YAML pro Ansible

  1. Rozumíte Linux Desktopu?

  2. Plánovač událostí MySQL

  3. Zálohování MySQL 1.1

  1. Oprava databází MySQL InnoDB

  2. Rozumět Ifs?

  3. Pochopení oprávnění MySQL