Beveiliging van MySQL-installatie is iets waar elke MySQL DBA aan moet denken. Hoewel we hebben besproken hoe u voor uw MySQL-beveiliging als geheel moet zorgen (bekijk enkele van onze eerdere berichten, met name de MySQL-beveiligingsreeksen deel één en deel twee), hebben we geen specifieke beveiligingsgerelateerde problemen besproken. inclusief de problemen met betrekking tot rechten. Dat doen we hier.
Wat zijn bevoegdheden in MySQL?
Privileges in MySQL kunnen worden toegekend aan accounts. Als je accountrechten toekent in MySQL, bepaal je welke bewerkingen het account kan uitvoeren. Privileges kunnen worden toegekend aan databases of database-objecten (tabellen, indexen, views enz.). Privileges kunnen ook dynamisch of statisch zijn. Statische privileges zijn ingebouwd in de server, terwijl dynamische privileges tijdens runtime kunnen worden gedefinieerd.
Bevoegdheden gebruiken voor MySQL-beveiliging
Om gebruik te maken van privileges in MySQL, moet u dit onthouden:
-
Om privileges toe te wijzen of in te trekken, moet u een MySQL-gebruiker hebben. Gebruikers kunnen worden gemaakt door een CREATE USER-query uit te voeren:
CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;
-
Als u rechten wilt toewijzen of intrekken, gebruikt u respectievelijk de instructies GRANT en REVOKE:
GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’; REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;
-
U kunt privileges opslaan door FLUSH PRIVILEGES uit te voeren. Bekijk ze door SHOW GRANTS uit te voeren.
-
De GRANT-instructie kan niet worden gebruikt om zowel privileges als rollen toe te kennen; de verklaring moet privileges of rollen toekennen.
Overweeg het volgende om uw MySQL-installatie veiliger te maken:
-
Verleen uw gebruikers alleen de privileges die nodig zijn om hun taken uit te voeren (gebruik bijvoorbeeld GRANT ALL niet als dat niet nodig)
-
In het algemeen, vermijd het uitvoeren van MySQL als een Unix-rootgebruiker, omdat elke gebruiker met het FILE-privilege kan veroorzaken de server om bestanden als root aan te maken.
-
Verleen het FILE-privilege niet aan gebruikers die geen beheerder zijn (zie de uitleg hierboven)
-
Overweeg om mysqld uit te voeren als een gewone gebruiker zonder rechten.
-
Verleen geen PROCES- of SUPER-rechten aan gebruikers die geen beheerders zijn. Met het PROCESS-privilege kan de gebruiker alle processen bekijken die in MySQL worden uitgevoerd. Het SUPER-privilege maakt onder andere wijzigingen in de serverconfiguratie mogelijk, maakt het gebruik van de CREATE SERVER-, ALTER SERVER- en DROP SERVER-statements mogelijk, en maakt ook het gebruik van het KILL-statement mogelijk, waardoor de gebruiker instructies van andere accounts kan doden. Houd er rekening mee dat MySQL een extra verbinding reserveert voor gebruikers die het SUPER-privilege hebben. Met het SUPER-privilege kan een gebruiker ook replicatieservers besturen.
Volg het bovenstaande advies en je zou goed op weg moeten zijn naar een veiligere MySQL-installatie. Als u echter een nieuwere versie van MySQL gebruikt, is er nog één ding waar u rekening mee moet houden:MySQL heeft rollen geïntroduceerd in MySQL 8.0.16.
Rollen in MySQL-beveiliging
Als je nog nooit van rollen in MySQL hebt gehoord, maak je dan geen zorgen. Rollen lijken erg op privileges en daarom hebben we ze in deze blogpost opgenomen. In feite zijn rollen precies dat:het zijn verzamelingen van privileges, d.w.z. wanneer een rol wordt toegewezen aan een gebruiker, krijgt een gebruiker alle privileges toegewezen die aan die rol zijn gekoppeld. Rollen kunnen worden toegevoegd en verwijderd met behulp van de CREATE ROLE en DROP ROLE statements. Om gebruik te maken van rollen in MySQL, maakt u een rolnaam aan, verleent u bevoegdheden aan die rol en wijst u deze vervolgens toe aan een gebruiker als volgt:
CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];
Welke rechten moet u verlenen?
Volg bij het verlenen van privileges het principe van de minste privileges:een MySQL-account mag alleen privileges krijgen die nodig zijn voor zijn doeleinden. De meest gebruikte privileges zijn:
-
ALLE PRIVILEGES die alle privileges aan een account verlenen.
-
CREATE verleent de privileges die nodig zijn om databases en tabellen te maken.
-
DROP verleent de privileges die nodig zijn om databases en tabellen te verwijderen.
-
DELETE verleent de benodigde rechten om rijen uit tabellen te verwijderen.
-
INSERT verleent de privileges die nodig zijn om rijen in tabellen in te voegen.
-
SELECT verleent de privileges die nodig zijn om SELECT-query's uit te voeren.
-
UPDATE verleent de privileges die nodig zijn om rijen in een tabel bij te werken (om UPDATE-query's uit te voeren)
Over het algemeen is het een goed idee om niet alle rechten aan een account toe te kennen; overweeg in plaats daarvan het principe van de minste privileges te volgen. Houd er ook rekening mee dat het toekennen van extra privileges aan een bepaalde gebruiker de privileges die eerder van kracht waren niet verwijdert. U kunt ook de rechten van een specifieke gebruiker bekijken door deze syntaxis te gebruiken (vervang gebruikersnaam door de gebruikersnaam van uw gebruiker):
SHOW GRANTS FOR ‘username’;
Samenvatting
Bij het omgaan met privileges in MySQL moet u er rekening mee houden dat u het principe van de minste privileges moet volgen (d.w.z. alleen privileges verlenen die nodig zijn). Het volgen van het advies dat in deze blog wordt beschreven, zou moeten helpen om uw MySQL-installatie veiliger te maken. Onthoud dat uw privileges moeten worden opgeslagen om van kracht te worden (de instructie FLUSH PRIVILEGES kan u daarbij helpen), houd er bovendien rekening mee dat u vanaf MySQL 8.0.16 gebruik kunt maken van rollen in MySQL om sets privileges toe te wijzen aan een specifieke gebruiker.
We hopen dat deze blogpost je heeft geholpen bij het beveiligen van je MySQL-instantie(s). Als je vragen of opmerkingen hebt, voel je vrij om commentaar te geven, overweeg ook om onze MySQL-beveiligingsserie te bekijken (hier en hier)