Om du får ett felmeddelande om att åtkomst nekas för root
användare i MariaDB, kan den här artikeln hjälpa.
Felet
Jag försökte importera mitt systems tidszonsinformation till MariaDB med följande kommando:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Men det resulterade i följande fel:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Orsaken
Efter att ha undersökt detta insåg jag att root
användaren hade ännu inte fått sitt lösenord inställt.
När jag körde följande fråga:
SELECT user, password
FROM user
WHERE User = 'root';
Jag fick följande resultat:
+-------------+----------+ | User | Password | +-------------+----------+ | root | invalid | +-------------+----------+
MariaDB-dokumentationen anger följande:
Ändå kanske vissa användare vill logga in som MariaDB-rot utan att använda sudo. Därför är den gamla autentiseringsmetoden - konventionellt MariaDB-lösenord - fortfarande tillgänglig. Som standard är det inaktiverat ("ogiltigt" är inte en giltig lösenordshash), men man kan ställa in lösenordet med en vanlig
SET PASSWORD
påstående. Och fortfarande behålla den lösenordslösa åtkomsten via sudo.
Så det ser ut som vårt svar.
Lösningen
Enligt stycket ovan behövde jag ställa in lösenordet för root
användare:
SET PASSWORD FOR 'root'@localhost = PASSWORD("myReallyStrongPwd");
Att köra det (med ett annat lösenord) gjorde susen.
Så om du får ovanstående fel kanske detta hjälper.