## Een Dedicated gebruiker en rechten toekennen

Na installatie maakt MySQL een rootgebruikersaccount aan die je kunt gebruiken om je database te beheren. Deze gebruiker heeft volledige privileges over de MySQL-server, wat betekent dat hij volledige controle heeft over elke database, tabel, gebruiker, enzovoort. Daarom is het het beste om dit account niet buiten administratieve functies te gebruiken. In deze stap wordt beschreven hoe je de MySQL- rootgebruiker gebruikt om een ​​nieuw gebruikersaccount aan te maken en deze rechten te verlenen.

    sudo mysql

Opmerking: als je MySQL samen met een andere tutorial hebt geïnstalleerd en wachtwoordverificatie voor root hebt ingeschakeld , moet je een ander commando gebruiken om toegang te krijgen tot de MySQL-shell. Het volgende zal uw MySQL-client uitvoeren met normale gebruikersrechten, en je krijgt alleen beheerdersrechten binnen de database door te verifiëren:

    sudo mysql -u root -p

Zodra je toegang hebt tot de MySQL-prompt, kun je een nieuwe gebruiker aanmaken met een `CREATE USER`instructie. Deze volgen deze algemene syntaxis:

    CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Daarna `CREATE USER`specificeert je een gebruikersnaam. Dit wordt onmiddellijk gevolgd door een `@`teken en vervolgens de hostnaam waarmee deze gebruiker verbinding zal maken. Als je alleen van plan bent om deze gebruiker lokaal te benaderen vanaf je Ubuntu-server, kun je specificeren `localhost`. Het is niet altijd nodig om zowel de gebruikersnaam als de host tussen enkele aanhalingstekens te plaatsen, maar dit kan helpen om fouten te voorkomen.

Voer de volgende opdracht uit om een ​​gebruiker te maken waarmee wordt geverifieerd `caching_sha2_password`. Zorg ervoor dat je `linda`uw gebruikersnaam en `password`een sterk wachtwoord naar keuze wijzigt :

    CREATE USER 'linda'@'localhost' IDENTIFIED BY 'password';

Opmerking: er is een bekend probleem met sommige versies van PHP dat problemen veroorzaakt met `caching_sha2_password`. Als je van plan bent om deze database te gebruiken met een PHP-applicatie, bijvoorbeeld phpMyAdmin, wil je misschien een gebruiker aanmaken die zich zal authenticeren met de oudere, maar nog steeds veilige `mysql_native_password`plug-in:

    CREATE USER 'linda'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Als je het niet zeker weet, kun je altijd een gebruiker maken die zich aanmeldt met `caching_sha2_plugin`en `ALTER`deze later met deze opdracht:

    ALTER USER 'linda'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Nadat je de nieuwe gebruiker hebt aangemaakt, kun je deze de juiste rechten verlenen. De algemene syntaxis voor het toekennen van gebruikersrechten is als volgt:

    GRANT PRIVILEGE ON database.table TO 'username'@'host';

De `PRIVILEGE`waarde in de syntaxis van dit voorbeeld definieert welke acties de gebruiker mag uitvoeren op de opgegeven `database`en `table`. Je kunt in één opdracht meerdere rechten toekennen aan dezelfde gebruiker door ze te scheiden met een komma. Je kunt een gebruiker ook globaal privileges verlenen door asterisks ( `*`) in te voeren in plaats van de database- en tabelnamen. In SQL zijn asterisken speciale tekens die worden gebruikt om "alle" databases of tabellen weer te geven.

Ter illustratie, de volgende opdracht geeft een gebruiker wereldwijde rechten om `CREATE`, `ALTER`en `DROP`databases, tabellen en gebruikers, evenals de bevoegdheid om `INSERT`, `UPDATE`en `DELETE`gegevens van een tabel op de server. Het geeft de gebruiker ook de mogelijkheid om gegevens op te vragen `SELECT`, externe sleutels te maken met het `REFERENCES`sleutelwoord en `FLUSH`bewerkingen uit te voeren met het `RELOAD`recht. Geef gebruikers echter alleen de rechten die ze nodig hebben, dus voel je vrij om de rechten van je eigen gebruikers aan te passen als dat nodig is.

Voer deze `GRANT`instructie uit en vervang deze `linda`door je eigen MySQL-gebruikersnaam om je gebruiker deze rechten te verlenen:

    GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'linda'@'localhost' WITH GRANT OPTION;

Waarschuwing : sommige beheerders willen misschien hun MySQL-gebruiker het `ALL PRIVILEGES`privilege geven, waardoor ze brede superuser-privileges krijgen die vergelijkbaar zijn met de privileges van de root gebruiker, zoals:

    GRANT ALL PRIVILEGES ON *.* TO 'linda'@'localhost' WITH GRANT OPTION;

Dergelijke brede privileges moeten niet te makkelijk worden toegekend, aangezien iedereen met toegang tot deze MySQL-gebruiker volledige controle heeft over elke database op de server.

Hierna is het een goede gewoonte om de `FLUSH PRIVILEGES`opdracht uit te voeren. Zo zal er geen geheugen dat de server in de cache als een resultaat van het voorgaande `CREATE USER`en `GRANT`verklaringen:

    FLUSH PRIVILEGES;

Vervolgens kunt je de MySQL-client verlaten:

    exit

Om in de toekomst in te loggen als je nieuwe MySQL-gebruiker, gebruik je een commando zoals het volgende:

    mysql -u linda -p

De `-p`vlag zorgt ervoor dat de MySQL-client je vraagt ​​om het wachtwoord van je MySQL-gebruiker om te verifiëren.