Gebruikers & rechten (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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

MySQL-rechten volgens Worfence - Handig!

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;

Zie ook

Bronnen