sql >> Databáze >  >> RDS >> Mysql

Jak zabezpečit MySQL:Část první

Když se řekne zabezpečení aplikací, lidé si vybaví zabezpečení aplikací proti některým z nejčastějších útoků, jako je injekce, nefunkční ověřování, vystavení citlivých dat a podobně. I když jsou tyto útoky převládající, znalost toho, jak před nimi chránit vaši aplikaci, nebude stačit – zvláště když používáte MySQL. Dnes se podíváme na jinou stránku zabezpečení – podíváme se, jak správně zabezpečit MySQL.

Protože zabezpečení MySQL je docela velká věc, berte tento příspěvek jako začátek série příspěvků týkajících se bezpečnostních opatření MySQL. Nebudeme pokrývat vše, ale tento příspěvek by měl poskytnout základ některých bezpečnostních opatření MySQL.

Proč potřebujete zabezpečit MySQL?

Nejprve si musíme odpovědět na otázku, proč bychom chtěli zabezpečit MySQL. Koneckonců, pokud zajistíme naši aplikaci proti nejrozšířenějším hrozbám, měli bychom být v bezpečí, ne? No, ano i ne.

Vidíte, když svou aplikaci zabezpečíte proti určitým útokům, zajistíte, že útočníci budou mít těžší proniknout do obrany vaší aplikace – v zájmu zabezpečení vaší databáze však ochrana proti takovým útokům nestačí. Zabezpečení vaší databáze může být poslední kapkou, která by mohla zachránit vaši aplikaci (a vaši databázi!) před zničením.

Jak zajistím MySQL?

A teď k palčivé otázce. Jak vlastně zajišťujete MySQL?

Při přemýšlení o zabezpečení vašich instancí MySQL byste měli zvážit širokou škálu možných možností. Naštěstí některé z těchto možností nejsou omezeny ani na MySQL, což znamená, že budou použitelné i v jiných scénářích! Začneme obecnými věcmi.

Zabezpečení MySQL – obecné

Při zabezpečení MySQL mějte na paměti, že pro operace prováděné uživateli používá seznamy řízení přístupu (ACL) založené na zabezpečení (Seznamy řízení přístupu jsou seznamy oprávnění spojených s objektem). Zde je návod, jak se postarat o několik nejzákladnějších bezpečnostních problémů:

  • Zabezpečte počáteční účet MySQL – to je velmi zřejmé, ale měli byste se ujistit, že účet root má heslo. Účet root může nebo nemusí mít heslo při první instalaci MySQL - můžete zjistit, jaké je heslo, zkontrolováním protokolu chyb a poté jej změnit na silnější, pokud si přejete. Všechny ostatní účty by také měly mít hesla.
  • Nikdy neukládejte hesla v žádné databázi MySQL v prostém textu – použijte jednosměrnou hašovací funkci, jako je BCrypt.
  • Neudělujte žádným uživatelům přístup k tabulce uživatelů v databázi mysql (uživatel root je výjimkou).

Také se seznamte s řízením přístupu a správou účtů v MySQL. Toto téma si zaslouží celou knihu samo o sobě, ale mezi základní věci, které byste měli vědět, patří:

  • Řízení přístupu v MySQL;
  • Vytváření, změna a odebrání uživatelů;
  • Udělování a odebírání oprávnění uživatelům a uživatelům;
  • Vědět, jak zkontrolovat, jaká oprávnění jsou přiřazena;
  • Co jsou kategorie účtů;
  • Co jsou vyhrazené účty;
  • Co jsou role;
  • Jak funguje správa hesel;
  • Jak funguje uzamčení účtu;
  • Podívejte se na bezpečnostní pluginy nabízené MySQL;
  • Vědět, jak zabezpečit zálohy MySQL.

Pokud jde o zabezpečení MySQL, měly by být zahrnuty i zálohy.

Nyní se podíváme na každou z těchto možností.

Řízení přístupu v MySQL

  • Jak již bylo uvedeno výše, nikdy nedávejte žádnému účtu, kromě účtu root, přístup k tabulce uživatelů v databázi mysql;
  • Zajistěte, aby všechny existující účty MySQL využívaly pouze ta oprávnění, která nezbytně potřebují k provádění svých akcí.

Vytváření, změny a odebírání uživatelů v MySQL

V MySQL lze uživatele vytvořit spuštěním dotazu CREATE USER:

CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

​Uživatelé mohou být změněni spuštěním dotazu ALTER USER - dotaz vám umožňuje provádět mnoho různých věcí, včetně zamykání a odemykání účtů, vyžadování připojení účtu pomocí SSL, navazování maximálního počtu připojení za hodinu, zahazování starých hesel atd. Zde je ukázkový dotaz, který může změnit vaše vlastní heslo:

ALTER USER USER() IDENTIFIED BY ‘password’;

​Uživatele lze odebrat spuštěním dotazu DROP USER:

DROP USER ‘demouser’@’localhost’;

Udělování a odebírání oprávnění uživatelům a od uživatelů v MySQL

Příkaz GRANT musí udělovat buď oprávnění, nebo role. Příkaz ON vám může sdělit, zda budou udělena oprávnění nebo role. Následující dotaz uděluje oprávnění:

GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;

​Následující dotaz uděluje role:

GRANT ‘demo_role’ TO ‘demouser’@’localhost’;

GRANT by měl odpovědět dotazem OK, ovlivněno 0 řádků.

Chcete-li uživatelům zrušit určitá oprávnění, použijte příkaz REVOKE (část názvu hostitele v názvu účtu má výchozí hodnotu „%“):

REVOKE SELECT ON *.* FROM ‘demouser’@’localhost’;

Chcete-li odebrat všechna oprávnění, lze použít REVOKE ALL:

REVOKE ALL PRIVILEGES ON *.* FROM ‘demouser’@’localhost’;

Možná budete chtít vydat FLUSH PRIVILEGES; po provedení výše uvedených kroků.

Kontrola, jaká oprávnění jsou přiřazena v MySQL

  • Chcete-li zkontrolovat, jaká oprávnění jsou přidělena, vydejte SHOW GRANTS; prohlášení.
  • Pro každý zadaný požadavek server určí operaci, kterou chcete provést, a poté zkontroluje, zda jsou vaše oprávnění dostatečná k provedení příslušné operace.
  • Server používá tabulky uživatelů a db v databázi mysql k zajištění řízení přístupu.
  • Tabulky user a global_grants udělují globální oprávnění.

Zbývající možnosti budou popsány v nadcházejících příspěvcích.

Shrnutí

Co se týče zabezpečení MySQL, máte na výběr z velmi široké škály možností. Možnosti zahrnují základní bezpečnostní opatření, která lze použít v podstatě na všechny aplikace, ale některé z možností jsou zcela specifické pro MySQL. Mějte na paměti, že ještě nebyly pokryty všechny dostupné možnosti – bude o nich také hovořit v nadcházejících vydáních bezpečnostní série MySQL.


  1. Jak přidat konkrétní počet prázdných řádků do sqlite?

  2. Vyberte 10 nejlepších záznamů pro každou kategorii v MySQL

  3. Řetězec objednávky SQL jako číslo

  4. Převeďte datum řetězce na datum a čas v Oracle