Skapa en root användare
Vi skall skapa en ny användare i databasen, en användare som har samma behörighet som root användaren.
Spara SQL-koden du gör i en fil och döp den till create-user-dbwebb.sql
.
Om du redan har skapat en root användare som heter dbwebb
så är det bra, men se ändå till att utföra nedan instruktioner och spara undan all din kod i skriptet.
#Problem med authenticering
Detta är en lösning på problemet som inträffar när äldre klienter kopplar sig mot nyare databaser (MySQL från och med version 8.0.4). Felmeddelandet som visas är ofta följande.
“ERROR 2059 (HY000): Authentication plugin ‘caching_sha2_password’ cannot be loaded: /…/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory”
Du kan läsa om problematiken på StackOverflow och “Authentication plugin ‘caching_sha2_password’”.
Problemet inträffar när man tar en klient (terminal, workbench, javascript, etc) som inte har den allra senaste uppdateringen (MySQL 8.0.4) av den del av programvaran som hanterar hur lösenordet krypteras.
För att undvika det så skapar vi alltså en ny root-användare som är kompatibel med äldre klienter, genom att använda en äldre algoritm för hur lösenordet krypteras.
Som ett alternativ hade vi kunnat uppdatera nuvarande root-användare och bytt lösenordet på den, samt bytt hur lösenordet krypteras. Men den vägen väljer vi ej, vi låter root-användaren vara så inget går fel med den.
#Problem med authenticering
Vi öppnar en klient, som root, och skriver följande SQL-kod för att skapa en användare. Jag väljer här att döpa användaren till “dbwebb” och tillåta att användaren kan koppla upp sig från alla hostar %
.
DROP USER IF EXISTS 'dbwebb'@'%'; CREATE USER 'dbwebb'@'%' IDENTIFIED WITH mysql_native_password -- Only MySQL > 8.0.4 BY 'password' ;
Det är konstruktionen WITH mysql_native_password
som ger den bakåtkompatibla användaren. Detta gäller alltså enbart på MySQL där versionen är större än 8.0.4.
Kommandot CREATE USER
finns beskrivet i manualen.
Vi ger nu denna användare fullständiga rättigheter på alla databaser *.*
, det blir i princip samma rättigheter som root-användaren.
GRANT ALL PRIVILEGES ON *.* TO 'dbwebb'@'%' WITH GRANT OPTION ;
Den sista delen med WITH GRANT OPTION
gör så att användaren kan göra GRANT för andra användare.
Kommandot GRANT
finns beskrivet i manualen.
Bra, då har vi en användare som har samma rättigheter som root-användaren. En anledning till att vi gör detta nu är att det finns olika kryptering på lösenorden och denna användare vi nu skapade är mer kompatibel mellan versioner, mer kompatibel än den root-användare som skapades.
#Kontrollera versionen av MySQL
Du kan dubbelkolla vilken version du har av MySQL, med följande SQL-uttryck.
SHOW VARIABLES LIKE "%version%";
Det kan se ut så här.
MySQL [(none)]> SHOW VARIABLES LIKE "%version%"; +-------------------------+------------------------------+ | Variable_name | Value | +-------------------------+------------------------------+ | innodb_version | 8.0.13 | | protocol_version | 10 | | slave_type_conversions | | | tls_version | TLSv1,TLSv1.1,TLSv1.2 | | version | 8.0.13 | | version_comment | MySQL Community Server - GPL | | version_compile_machine | x86_64 | | version_compile_os | Win64 | | version_compile_zlib | 1.2.11 | +-------------------------+------------------------------+ 9 rows in set (0.03 sec)
Ibland är det bra att ha koll på vilken version man kör.
#Kontrollera status på användare
Du kan kontrollera att du nu har de användare som krävs för att jobba vidare i guiden. Kör följande sql-uttryck för att se viss information om dina användare.
--
-- Check the status for users root, dbwebb and user.
--
SELECT
User,
Host,
Grant_priv,
plugin
FROM mysql.user
WHERE
User IN ('root', 'dbwebb', 'user')
ORDER BY User
;
Exakt hur utskriften från kommandot ser ut (för root användaren) kan skilja, så här ser det ut för mig.
MySQL [(none)]> SELECT -> User, -> Host, -> Grant_priv, -> plugin -> FROM mysql.user -> WHERE -> User IN ('root', 'dbwebb', 'user') -> ORDER BY User -> ; +--------+-----------+------------+-----------------------+ | User | Host | Grant_priv | plugin | +--------+-----------+------------+-----------------------+ | dbwebb | % | Y | mysql_native_password | | root | localhost | Y | caching_sha2_password | | user | % | N | mysql_native_password | +--------+-----------+------------+-----------------------+ 3 rows in set (0.00 sec)
Det viktiga är att du har tre användare och att hosten är %
för dbwebb och user-användaren samt att dessa två användare har plugin mysql_native_password
.
Oavsett vad så skall du nu ha en alternativ root-användare i dbwebb
, med Grant_priv -> Y
, som du kan använda för att koppla dig med godtycklig klient, även äldre klienter.
#Kontrollera ditt skript
Se till att du kan köra alla instruktionern ditt skript i en sekvens. Det är viktigt om du senare behöver återställa din databas.
#Problem och facit?
Om du får problem så finns det ett par skript som du kan köra för att skapa rätt användare.
Se till att du kör nedan skript i en klient där du kan logga in med användaren root.
Här är hur du skapar användaren dbwebb
och användaren user
samt dubbelkollar status på användarna root, dbwebb och user.
# Stå i rooten av ditt kursrepo mysql -uroot -p < example/sql/create-user-dbwebb.sql mysql -uroot -p < example/sql/create-user-user.sql mysql -t -uroot -p < example/sql/check-users.sql
Du kan titta i de skripten och använda informationen för att skapa ditt egna skript.
#Revision history
- 2019-01-24: (B, mos) Bort med överflödigt ;.
- 2019-01-21: (A, mos) Första versionen.