Gebruikers (MySQL)
Gebruikers aanmaken - Basis
Het basiscommando om een gebruiker aan te maken [1]:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
maar hiermee kun je nix, omdat er geen rechten (privileges) zijn toegekend.
Wat ik meestal zoek:
grant all on mijn_db.* to mijn_user@localhost identified by 'mijn_wachtwoord';
mijn_db.*
- Alle objecten van de betreffende database- Wachtwoord moet tussen haakjes staan. Overige haakjes optioneel
- Zoals je hieronder bij rechten kunt zien, heb je al snel create en drop nodig. Vandaar dat je snel belandt bij all.
Om een beheerder-account aan te maken: Zie verderop
Verschillende rechten
Er zijn enkele tientallen verschillende rechten [2]. Wellicht de belangrijkste:
- CREATE - Databases én tabellen aanmaken
- DROP - Databases én tabellen verwijderen
- INSERT - Rijen toevoegen aan een database
- SELECT - select-queries uitvoeren
- UPDATE - Rijen bijwerken
- GRANT OPTION - Beheer van privileges van andere gebruikers.
Deze rechten kun je meestal per database, per tabel, en op nog een derde niveau (effe vergeten wat precies) inregelen. Op tabel-niveau doe je dit door iets in te vullen voor het '*' in mijn_db.*
.
Flush privileges
Na het toekennen van rechten, moet je die activeren middels
FLUSH PRIVILEGES;
Website-database
Indien ik werk met aparte MySQL-accounts per website, dan zijn dit de meest relevante rechten + instellingen daarvoor:
- CREATE - Nee
- DROP - Nee
- INSERT - Ja
- SELECT - Ja
- UPDATE - Ja
- GRANT OPTION - Nee.
Meestal gebruik ik dit:
grant all on mijn_db.* to mijn_user@localhost identified by 'mijn_wachtwoord';
Vermoedelijk kan dit fijnmaziger. Bv. wel drop-privilege op tabel-niveau, maar niet op database-niveau.
Beheerder-account
Om beheerder-accounts aan te maken, moet je de grant-privilege apart benoemen. Bv.:
grant all on *.* to jeroen@localhost identified by 'MijnGeheimeWachtwoord' with grant option;
Rechten inzien
De rechten per gebruiker worden bijgehouden in tabel mysql.user
. Deze tabel is meestal te groot om goed te kunnen zien via de mysql-client. Wellicht handiger:
select Host, User from mysql.user; +-----------+------------------+ | Host | User | +-----------+------------------+ | localhost | debian-sys-maint | | localhost | kbb3 | | localhost | kbb_2_ | | localhost | kbb_2_2 | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+
grant-privileges aan een gebruiker toekennen
Wat in ieder geval werkt (ingelogd via sudo mysql
):
update mysql.user set grant_priv="Y" where User like "konijn";
En om het zeker te weten:
select user, grant_priv from mysql.user;