Gebruikers (MySQL): verschil tussen versies
Regel 7: | Regel 7: | ||
maar hiermee kun je nix, omdat er geen rechten (''privileges'') zijn toegekend. | maar hiermee kun je nix, omdat er geen rechten (''privileges'') zijn toegekend. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Wat ik meestal zoek: | Wat ik meestal zoek: | ||
Regel 20: | Regel 14: | ||
* <code>mijn_db.*</code> - Alle objecten van de betreffende database | * <code>mijn_db.*</code> - Alle objecten van de betreffende database | ||
* Wachtwoord moet tussen haakjes staan. Overige haakjes optioneel | * 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 [https://dev.mysql.com/doc/refman/8.0/en/grant.html]. 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 | ||
=== Flush === | === Flush === | ||
Regel 45: | Regel 52: | ||
* De routine tijdens installatie van een MySQL-database, doet het niet goed. Oa. het aanmaken van een gebruiker werkt niet. In dat geval kun je in ieder geval als root inloggen middels <code>sudo mysql</code> | * De routine tijdens installatie van een MySQL-database, doet het niet goed. Oa. het aanmaken van een gebruiker werkt niet. In dat geval kun je in ieder geval als root inloggen middels <code>sudo mysql</code> | ||
* Met <code>select Host, User from mysql.user;</code> kun je zien of het betreffende account wel of niet is aangemaakt | * Met <code>select Host, User from mysql.user;</code> kun je zien of het betreffende account wel of niet is aangemaakt | ||
− | * Om beheerder-accounts aan te maken, moet je de ''grant-privilege'' apart instellen | + | * Om beheerder-accounts aan te maken, moet je de ''grant-privilege'' apart instellen: |
+ | GRANT ALL ON *.* TO 'someuser'@'somehost' WITH GRANT OPTION; | ||
== Rechten inzien == | == Rechten inzien == |
Versie van 7 mei 2018 17:18
Gebruikers aanmaken
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
Flush
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 relevante rechten voor zo'n account:
- CREATE - Nee
- DROP - Nee
- INSERT - Ja
- SELECT - Ja
- UPDATE - Ja
- GRANT OPTION - Nee.
Interessant dat er geen apart privilege is om nieuwe tabellen te mogen aanmaken - Relevant voor website-databases.
Beheerder
- De routine tijdens installatie van een MySQL-database, doet het niet goed. Oa. het aanmaken van een gebruiker werkt niet. In dat geval kun je in ieder geval als root inloggen middels
sudo mysql
- Met
select Host, User from mysql.user;
kun je zien of het betreffende account wel of niet is aangemaakt - Om beheerder-accounts aan te maken, moet je de grant-privilege apart instellen:
GRANT ALL ON *.* TO 'someuser'@'somehost' 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 Grant_priv from mysql.user where User like "root" or User like "konijn";
Probleem met inloggen in een verse instantie?
Probeer
sudo mysql -u root -p
Inloggegevens onthouden
Werkt fantastisch, en dankzij aanpassen bestandspermissies, valt het beveiligingsprobleem mee:
Create a file named .my.cnf in your home directory that looks like this. Make sure the filesystem permissions are set such that only the owning user can read it (0600). [client] host = localhost user = username password = thepassword socket = /var/run/mysqld/mysqld.sock #database = mysql