se nemůže přihlásit jako root uživatele mysql z běžného uživatelského účtu v ubuntu 16.04

127

Právě jsem nainstaloval Ubuntu 16.04 LTS spolu s balíčkyphp,mariadb anginx. Spustil jsemmysql_secure_installation a změnil heslo uživatele root.

Nyní, když se pokouším přihlásit se kmysql pomocí kořenového účtu při přihlášení do Ubuntu jako běžného uživatelského účtu, dostanu přístup odmítnutý.

Když se přihlásím pomocísudo mysql, mysql se ani neptej heslo. Pokud spustímmysql_secure_installtion vidím, že staré nastavení se nikdy nenastavilo trvale.

Co dělám špatně?

    
dané codescope 02.05.2016 13:45

10 odpovědí

238

Nedávno jsem upgradoval můj Ubuntu 15.04 na 16.04 a to pro mě pracovalo:

  1. Nejprve připojte v sudo mysql

    sudo mysql -u root
    
  2. Zkontrolujte své účty přítomné ve vašem db

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Odstraňte aktuální účet root @ localhost

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Obnovte uživatele

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Udělujte svému uživateli oprávnění (nezapomeňte vypustit oprávnění)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Ukončete MySQL a pokuste se znovu připojit bez sudo.

Doufám, že to někomu pomůže:)

    
odpověděl Loremhipsum 08.06.2016 11:04
83
  

Pokud nainstalujete 5.7 a neposkytnete heslo uživateliroot, je to   použije pluginauth_socket. Tento plugin se nestará a   nepotřebuje heslo. Prostě kontroluje, zda se uživatel připojuje   pomocí soketu UNIX a porovnává uživatelské jméno.

Odvozeno z Změna hesla uživatele v MySQL 5.7 S "plugin: auth_socket "

Takže za účelem změnyplugin zpět namysql_native_password:

  1. Přihlaste se pomocí sudo:

    sudo mysql -u root
    
  2. Změňteplugin a nastavte heslo jedním příkazem:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

Samozřejmě můžete také použít výše uvedený příkaz pro nastavení prázdného hesla.

Jen pro záznam, (aMariaDB < 10.2 uživatelů) existuje i jiný způsob, jak změnitplugin bez zadání hesla (ponechat prázdné):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
    
odpověděl Todor 23.07.2016 09:46
8

Problém je v tom, že při instalaci / aktualizaci aplikace MariaDB nebo MySQL (zejména pokud je v určitém bodě nastavena bez hesla), pak v tabulce Uživatelé je heslo skutečně prázdné (nebo ignorováno) a přihlašování závisí na uživatel systému odpovídající uživateli služby MySQL. Toto můžete provést následujícím způsobem přepnutím na kořenový systém a poté zadejte:

mysql -uroot -p

Potom zadejte buď žádné heslo nebo heslo nesprávné . Budete se pravděpodobně pustit dovnitř. (Možná se budete moci přihlásit z kořenového adresáře unixem jednoduše# mysql, protože heslo je irelevantní a uživatel je definován).

Tak co se děje? Pokud se přihlásíte jako root a proveďte následující:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

uvidíteauth_socket (který může na MariaDB přečístunix_socket). Tyto sokety ignorují hesla a povolí příslušnému uživateli Unixu bez kontrolu hesla. Proto se můžete přihlásit pomocí root , ale nikoli s jiným uživatelem.

Takže řešením je aktualizovat uživatele, aby nepoužiliauth_socket/unix_socket a správně nastavili heslo.

Na MariaDB (<10.2), který je na verzi 16 Ubuntu od roku 2017, stačí to

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(Je možné, že nastavení pluginu bude prázdné.) YMMV: Nezkoušel jsem to.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

Jinak:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

Pak

FLUSH PRIVILEGES;

Pro řešení, které obsahovalo smazání uživatele a jeho vytvoření s '%', jsem se úplně zablokoval z databáze a může způsobit další problémy, pokud nebudete mít příkazgrant přesně pravý - jednodušší jednoduše aktualizujte kořen, který již máte.

Podle mých zkušeností se problém stane pouze s uživatelem root, jelikož ostatní uživatelé nebudou přidáni ručně, aniž by byli součástí počáteční instalace / aktualizace.

    
odpověděl Gazzer 14.10.2017 06:18
4

Pokud jste nainstalovali MySQL / MariaDB ze základního úložiště, uživatelé se nemohou přihlásit do MySQL jako uživatel root MySQL z přihlašování Unixu (neplatí, pokud mají přístup sudo )

  1. Přihlaste se do kořenového shellu MySQL:

    $ sudo mysql -u root -p
    
  2. Spustit pod dotazy:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Otevřete nový shell a pak:

    $ mysql -u root -p
    

Zdroj:

Odkaz

    
odpověděl Gayan Weerakutti 02.12.2017 09:31
2

Zkuste vytvořit nový účet mysql, pro mě funguje (mysql 5.7.12):

  1. Přihlaste se jako sudo:

    sudo mysql -uroot
    
  2. Vytvořte nového uživatele a udělejte mu oprávnění (bez hesla):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Přihlaste se jako nový uživatel:

    mysql -uadmin
    
odpověděl Alex Yakovlev 28.05.2016 11:37
1

Zkuste tento kód nejprve

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

a pak

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

a poté stiskněteCtrl+Z a zadejte:bg spusťte proces z popředí do pozadí a ověřte svůj přístup pomocí:

mysql -u root -proot
mysql> show grants;
    
odpověděl ADHITHYA SRINIVASAN 28.05.2016 11:47
1

Pokud právě spustíte příkaz mysql pod uživatelem root, bude vám udělen přístup bez požadavku na heslo, protože autentizace soketu je povolena pro root @ localhost. .

Jediný způsob, jak nastavit heslo, je přepnout na přirozené ověřování, jako je:

  

$ sudo mysql

     

mysql > ALTER USER 'root' @ 'localhost' IDENTIFIKOVANÝ S   mysql_native_password BY 'test';

    
odpověděl Vadiaz 26.07.2017 17:23
1

Musel jsem dělat dvě věci (díky @Todor a @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

a potom:

FLUSH PRIVILEGES;

Nehodlám doporučit uživateleroot.

    
odpověděl Franc Drobnič 03.01.2018 17:43
0

Přizpůsobil jsem některé skripty, které jsem vytvořil, abych použil MariaDB a narazil na tento přesný problém. Spolu s množstvím informací zde najdete odpověď Gazzera skutečně nula v čísle; to všechno se snižuje naauth_socket /unix_socket nastavení.

Takže když používáte MariaDB 5.5 (pod Ubuntu 14.04) a MariaDB 10 pod (Ubuntu 16.04), přihlašování do MySQL a spuštění tohoto příkazu okamžitě vyřešilo:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Ostatní odpovědi - včetně nejvyšší hlasované odpovědi z tohoto příspěvku od společnosti Loremhipsum - opravdu doporučujeme špatné postupy tím, že doporučujeme zrušení uživatele a poté je znovu vytvořit. Pro mě je to radikální řešení. Nejlepší / nejjednodušší řešení os vynuluje hodnotuplugin, vyprázdní oprávnění a získáte život.

    
odpověděl JakeGould 20.10.2017 02:54
-1

Měl jsem stejný problém a spustil následující fix:

mysql_upgrade --force
    
odpověděl klob 03.05.2016 08:48