sql >> Databasteknik >  >> RDS >> Mysql

Hur man säkrar MySQL:Del ett

När applikationssäkerhet nämns tänker folk på att säkra applikationer mot några av de vanligaste attackerna som injektion, trasig autentisering, exponering för känslig data och liknande. Men även om dessa attacker är vanliga, är det inte tillräckligt att veta hur man skyddar din applikation från dem enbart - speciellt när du kör MySQL. Idag ska vi titta på en annan sida av säkerheten - vi ska undersöka hur man säkrar MySQL på rätt sätt.

Eftersom MySQL-säkerhet är en ganska stor sak, behandla detta inlägg som början på en serie inlägg om MySQL-säkerhetsåtgärder. Vi kommer inte att täcka allt, men det här inlägget bör utgöra grunden för några av MySQL:s säkerhetsåtgärder.

Varför behöver du säkra MySQL?

Först och främst måste vi svara på frågan varför vi skulle vilja säkra MySQL. När allt kommer omkring, om vi säkrar vår applikation mot de vanligaste hoten, borde vi vara säkra, eller hur? Tja, ja och nej.

Du förstår, när du säkrar din applikation mot vissa attacker ser du till att angriparna har svårare att penetrera försvaret av din applikation - för att säkra din databas kommer dock att skydda mot sådana attacker inte vara tillräckligt. Att säkra din databas kan vara droppen som kan rädda din applikation (och din databas!) från förstörelse.

Hur säkrar jag MySQL?

Nu till den brännande frågan. Hur säkrar man egentligen MySQL?

När du tänker på säkerheten för din(a) MySQL-instans(er), bör du överväga ett stort antal möjliga alternativ. Lyckligtvis är några av dessa alternativ inte ens begränsade till MySQL, vilket betyder att de kommer att vara tillämpliga i andra scenarier också! Vi börjar med det allmänna.

MySQL-säkerhet - Allmänt

När du säkrar MySQL, kom ihåg att den använder säkerhetsbaserade åtkomstkontrollistor (ACL) för operationer som utförs av användare (åtkomstkontrollistor är en lista över behörigheter som är kopplade till ett objekt). Så här tar du hand om ett par av de mest grundläggande säkerhetsproblemen:

  • Säkra det ursprungliga MySQL-kontot - detta är mycket uppenbart, men du bör se till att root-kontot har ett lösenord. Rotkontot kan ha eller inte ha ett lösenord när MySQL först installeras - du kan ta reda på vad lösenordet är genom att kontrollera felloggen och sedan ändra det till ett starkare om du vill. Alla andra konton bör också ha lösenord.
  • Lagra aldrig lösenord i några MySQL-databaser i vanlig text - använd en enkelriktad hashfunktion som BCrypt.
  • Ge inga användare åtkomst till användartabellen i mysql-databasen (rotanvändaren är ett undantag).

Bekanta dig också med åtkomstkontroll och kontohantering i MySQL. Detta ämne förtjänar en hel bok i och för sig, men de grundläggande sakerna du bör veta inkluderar:

  • Kontrollera åtkomst i MySQL;
  • Skapa, ändra och ta bort användare;
  • Bevilja och återkalla privilegier till och från användare;
  • Veta hur man kontrollerar vilka privilegier som tilldelas;
  • Vad är kontokategorier;
  • Vad är reserverade konton;
  • Vilka roller är;
  • Hur lösenordshantering fungerar;
  • Hur kontolåsning fungerar;
  • Ta en blick på säkerhetsplugin som erbjuds av MySQL;
  • Veta hur man säkrar MySQL-säkerhetskopior.

När det gäller MySQL-säkerhet bör säkerhetskopior också täckas.

Nu ska vi titta närmare på vart och ett av dessa alternativ.

Kontrollera åtkomst i MySQL

  • Som redan nämnts ovan, ge aldrig några konton, förutom rootkontot, åtkomst till användartabellen i mysql-databasen;
  • Se till att alla befintliga MySQL-konton endast använder de privilegier som de absolut behöver för att utföra sina åtgärder.

Skapa, ändra och ta bort användare i MySQL

I MySQL kan användare skapas genom att köra CREATE USER-frågan:

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

Användare kan ändras genom att köra ALTER USER-frågan - frågan låter dig göra många olika saker inklusive att låsa och låsa upp konton, kräva att kontot ansluter med SSL, upprätta det maximala antalet anslutningar per timme, kassera gamla lösenord, etc. Här är ett exempel på en fråga som kan ändra ditt eget lösenord:

ALTER USER USER() IDENTIFIED BY ‘password’;

​Användare kan tas bort genom att köra DROP USER-frågan:

DROP USER ‘demouser’@’localhost’;

Bevilja och återkalla rättigheter till och från användare i MySQL

GRANT-satsen måste ge antingen privilegier eller roller. ON-utlåtandet kan tala om för dig om privilegier eller roller kommer att beviljas. Följande fråga ger privilegier:

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

​Följande fråga ger roller:

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

GRANT ska svara med Query OK, 0 rader påverkas.

För att återkalla vissa privilegier från användare, använd REVOKE-satsen (värdnamnsdelen av kontonamnet är som standard "%"):

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

För att återkalla alla privilegier kan REVOKE ALL användas:

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

Du kanske vill utfärda ett FLUSH PRIVILEGIER; uttalande efter att ha utfört stegen ovan.

Kontrollera vilka privilegier som tilldelas i MySQL

  • För att kontrollera vilka privilegier som är tilldelade, utfärda SHOW GRANTS; uttalande.
  • För varje begäran som utfärdas bestämmer servern vilken operation du vill utföra och kontrollerar sedan om dina privilegier är tillräckliga för att utföra operationen i fråga.
  • Servern använder användar- och db-tabellerna i mysql-databasen för att säkerställa åtkomstkontroll.
  • Tabellerna för användare och global_grants ger globala privilegier.

Resten av alternativen kommer att behandlas i kommande inlägg.

Sammanfattning

När det gäller MySQL-säkerhet har du ett mycket brett utbud av alternativ att välja mellan. Alternativen inkluderar grundläggande säkerhetsåtgärder som kan tillämpas på i stort sett alla applikationer, men några av alternativen är ganska specifika för MySQL. Tänk på att inte alla tillgängliga alternativ har täckts ännu - de kommer också att diskuteras i kommande utgåvor av MySQL-säkerhetsserien.


  1. Distribuera flera Oracle-beräkningsinstanser med hjälp av en instanspool och terraform

  2. SQL Server In-Memory OLTP:Grunderna

  3. Intel SSD, nu utanför sh..err, skamlistan

  4. MySQL – Databas Character Set Encoding and Collation Explained