Gebruikers (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
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.
 
Veel uitgebreider:
 
 
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
 
 
Deze gebruiker mag 'alles' op alle databases.Dit doe ik alleen als ik bv. voor mezelf een admin-account aanmaak.
 
  
 
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
* Nog een keertje uitzoeken of ik deze rechten niet verder kan beperken
+
* 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

Bronnen