sql >> Databasteknik >  >> RDS >> MariaDB

Säkra MySQL - Använda dataåtkomsträttigheter för en säker installation

MySQL-installationssäkerhet är något som bör tänkas på i varje MySQL DBA. Även om vi har diskuterat hur du bör ta hand om din MySQL-säkerhet som helhet (ta en titt på några av våra tidigare inlägg, särskilt MySQL-säkerhetsserierna del ett och del två), har vi inte diskuterat specifika säkerhetsrelaterade frågor, inklusive de frågor som rör privilegier. Det gör vi här.

Vad är privilegier i MySQL?

Behörigheter i MySQL kan ges till konton. Om du beviljar kontoprivilegier i MySQL bestämmer du vilka operationer kontot kan utföra. Privilegier kan ges till antingen databaser eller databasobjekt (tabeller, index, vyer etc.) Privilegier kan också vara dynamiska eller statiska. Statiska privilegier är inbyggda i servern medan dynamiska privilegier kan definieras vid körning.

Hur man använder sig av rättigheter för  MySQL-säkerhet

För att använda privilegier i MySQL är det här vad du måste komma ihåg:

  • För att tilldela eller återkalla privilegier måste du ha en MySQL-användare. Användare kan skapas genom att köra en CREATE USER-fråga:
     

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

  • För att tilldela eller återkalla privilegier, använd GRANT- respektive REVOKE-satserna:
     

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

  • Du kan spara privilegier genom att köra FLUSH PRIVILEGES. Se dem genom att köra SHOW GRANTS.

  • GRANT-satsen kan inte användas för att ge både privilegier och roller; uttalandet måste ge antingen privilegier eller roller.

Tänk på följande för att göra din MySQL-installation säkrare:

  • Ge bara dina användare de privilegier som krävs för att utföra sina uppgifter (använd t.ex. inte GRANTA ALLA om det är inte nödvändigt)

  • Undvik i allmänhet att köra MySQL som en Unix-rotanvändare eftersom alla användare med FILE-behörighet kan orsaka servern för att skapa filer som root.

  • Ge inte FILE-behörigheten till användare som inte är administratörer (se förklaringen ovan)

  • Överväg att köra mysqld som en vanlig oprivilegierad användare.

  • Ge inte PROCESS eller SUPER-privilegier till användare som inte är administratörer. PROCESS-privilegiet tillåter användaren att se alla processer som körs i MySQL. SUPER-privilegiet, bland annat, möjliggör serverkonfigurationsändringar, möjliggör användning av CREATE SERVER-, ALTER SERVER- och DROP SERVER-satserna, och möjliggör även användning av KILL-satsen som låter användaren döda uttalanden som tillhör andra konton. Tänk på att MySQL reserverar en extra anslutning för användare som har SUPER-privilegiet. SUPER-privilegiet låter också en användare styra replikeringsservrar.

Följ råden ovan så bör du vara på god väg mot en säkrare MySQL-installation. Men om du använder en nyare version av MySQL, finns det ytterligare en sak som vi måste vara medveten om - MySQL har introducerat roller i MySQL 8.0.16.

Roller i MySQL-säkerhet

Om du aldrig har hört talas om roller i MySQL, oroa dig inte. Roller är väldigt lika privilegier och det är därför vi har tagit med dem i det här blogginlägget. I själva verket är roller just det – de är samlingar av privilegier, det vill säga när en roll tilldelas en användare tilldelas en användare alla privilegier som är kopplade till den rollen. Roller kan läggas till och tas bort med satserna CREATE ROLE och DROP ROLE. För att använda roller i MySQL, skapa ett rollnamn, ge privilegier till den rollen och tilldela den sedan till en användare så här:

CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];

Vilka privilegier bör du ge?

När du beviljar privilegier, följ principen om minsta privilegium:ett MySQL-konto bör endast ges privilegier som krävs för dess syften. De vanligaste privilegierna är:

  • ALLA PRIVILEGIER som ger alla privilegier till ett konto.

  • CREATE ger de privilegier som krävs för att skapa databaser och tabeller.

  • DROP ger de privilegier som krävs för att ta bort databaser och tabeller.

  • DELETE ger de privilegier som krävs för att radera rader från tabeller.

  • INSERT ger de privilegier som krävs för att infoga rader i tabeller.

  • SELECT ger de privilegier som krävs för att köra SELECT-frågor.

  • UPDATE ger de privilegier som krävs för att uppdatera rader i en tabell (för att köra UPPDATERINGSfrågor)

I allmänhet är det en bra idé att undvika att bevilja alla privilegier till ett konto; överväg istället att följa principen om minsta privilegium. Tänk också på att beviljande av ytterligare behörigheter till en viss användare inte tar bort behörigheter som fanns på plats tidigare. Du kan också se privilegierna för en specifik användare genom att använda denna syntax (ersätt användarnamn med användarnamnet för din användare):

SHOW GRANTS FOR ‘username’;

Sammanfattning

När du hanterar privilegier i MySQL, tänk på att du bör följa principen om minsta privilegium (dvs. endast bevilja privilegier som är nödvändiga). Att följa råden som beskrivs i den här bloggen bör bidra till att göra din MySQL-installation säkrare. Kom ihåg att dina privilegier måste sparas för att träda i kraft (FLUSH PRIVILEGES-satsen kan hjälpa dig att göra det), tänk dessutom på att från MySQL 8.0.16 kan du använda roller i MySQL för att tilldela uppsättningar privilegier till en specifik användare.

Vi hoppas att det här blogginlägget har hjälpt dig att säkra dina MySQL-instanser. Om du har några frågor eller funderingar, kommentera gärna, överväg också att ta en titt igenom vår MySQL-säkerhetsserie (här och här)


  1. Skapa en tillfällig tabell i SQLite

  2. PostgreSQL JDBC nollsträng tagen som en byte

  3. Hur INTERSECT fungerar i PostgreSQL

  4. Hur man uppgraderar PostgreSQL 11 till PostgreSQL 12 med noll driftstopp