Vraag kan niet inloggen als mysql-gebruikersroot van een normaal gebruikersaccount in ubuntu 16.04


Ik heb zojuist Ubuntu 16.04 LTS samen met de pakketten geïnstalleerd php, mariadb en nginx. ik rende mysql_secure_installation en veranderde het root-wachtwoord.

Nu probeer ik me aan te melden mysql als ik het root-account gebruik terwijl ik in Ubuntu ben ingelogd als normale gebruikersaccount krijg ik toegang geweigerd.

Wanneer ik inlog met sudo mysql, mysql vraagt ​​me niet eens een wachtwoord. Als ik ren mysql_secure_installtion Ik zie dat oude instellingen nooit permanent zijn ingesteld.

Wat doe ik verkeerd?


125
2018-05-02 11:45


oorsprong




antwoorden:


Ik heb onlangs mijn Ubuntu 15.04 geüpgraded naar 16.04 en dit heeft voor mij gewerkt:

  1. Maak eerst verbinding in sudo mysql

    sudo mysql -u root
    
  2. Controleer uw accounts aanwezig in uw db

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Verwijder de huidige root @ localhost-account

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Maak uw gebruiker opnieuw

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Geef rechten aan je gebruiker (vergeet niet om privileges door te spoelen)

    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. Sluit MySQL af en probeer opnieuw verbinding te maken zonder sudo.

Ik hoop dat dit iemand zal helpen :)


232
2018-06-08 09:04



Dit was het enige dat voor me werkte, weet iemand precies wat er met de root-gebruiker gebeurde toen je mysql-server op 16.04 installeerde? - Ruggi
Houd hem vast, niet % bedoel dat je overal kunt verbinden ... op afstand? - Stevie G
U kunt de rij wijzigen in: CREATE USER 'root' @ 'localhost' IDENTIFICEED BY ''; - vladnev
Voor de beveiliging: het onbeveiligde root @ localhost mysql-verbindingspatroon is een brood-en-boterstapel van lokale ontwikkeling maar zou absoluut nergens anders moeten verschijnen. - charneykaye
De toekenningsinstructie voor de nieuwe root-gebruiker geeft hier niet "met subsidie" aan root zodat root niet kan worden verleend zonder dit achteraf te doen: dba.stackexchange.com/a/62046/115679  Wijzig de subsidieverklaring alstublieft in grant all privileges on *.* to 'root'@'localhost' with grant option; - Loren


Als u 5.7 installeert en geen wachtwoord verstrekt voor de root gebruiker, het   zal de gebruiken auth_socket inpluggen. Die plugin maakt het niet uit en   heeft geen wachtwoord nodig. Het controleert alleen of de gebruiker verbinding maakt   met behulp van een UNIX-socket en vergelijkt vervolgens de gebruikersnaam.

Genomen van Verander gebruikerswachtwoord in MySQL 5.7 Met "plugin: auth_socket"

Dus om het plugin terug naar mysql_native_password:

  1. Inloggen met sudo:

    sudo mysql -u root
    
  2. Verander de plugin en stel een wachtwoord in met een enkele opdracht:

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

Natuurlijk kunt u ook de bovenstaande opdracht gebruiken om een ​​leeg wachtwoord in te stellen.

Gewoon voor de goede orde (en MariaDB < 10.2 gebruikers) er is ook een andere manier om alleen de plugin zonder een wachtwoord in te voeren (laat het leeg):

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;

81
2017-07-23 07:46



Bedankt, om de een of andere reden werd dit automatisch plots gezet na een apt-get upgrade denk ik ... - Tominator
Dit was ten slotte het probleem na een updateformulier Ubuntu 14.04 tot 16.04 en ik werd uitgesloten van mijn database ... - Reflic
Ook hou ik meer van dit antwoord - het is een stuk minder destructief ;-) - benzkji
Voor MariaDB <10.2, om de plug-in samen met het wachtwoord te wijzigen, hier is de vraag: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES; Bron: stackoverflow.com/a/41537019/1004587 - Pothi Kalimuthu
10x @PothiKalimuthu, heeft zojuist het antwoord bijgewerkt. - Todor


Het probleem is hier dat wanneer MariaDB of MySQL zijn geïnstalleerd / bijgewerkt (vooral als op een bepaald moment root is ingesteld zonder een wachtwoord), het wachtwoord in de tabel Gebruikers feitelijk leeg is (of genegeerd) en het aanmelden is afhankelijk van de systeemgebruiker die correspondeert naar een MySQL-gebruiker. U kunt dit als volgt testen door naar de systeemroot te schakelen en vervolgens het volgende te typen:

mysql -uroot -p

Voer vervolgens geen wachtwoord of het wachtwoord in fout wachtwoord. U zult waarschijnlijk worden ingelaten. (U kunt zelfs eenvoudig inloggen vanuit de unix-root # mysql omdat het wachtwoord niet relevant is en de gebruiker is gedefinieerd).

Dus wat gebeurt er? Nou, als je inlogt als root en het volgende doet:

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

je zult opmerken auth_socket (die mag lezen unix_socket op MariaDB). Deze sockets negeren wachtwoorden en staan ​​de corresponderende Unix-gebruiker toe zonder een wachtwoordcontrole. Dit is de reden waarom je kunt inloggen met wortel maar niet met een andere gebruiker.

Dus de oplossing is om de gebruikers bij te werken om het niet te gebruiken auth_socket/unix_socket en stel een wachtwoord correct in.

Op MariaDB (<10.2) die vanaf 2017 op de Ubuntu-versie 16 staat, zou dit moeten volstaan:

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

(Het is mogelijk dat het instellen van de plug-in om te legen zou werken. YMMV. Ik heb dit niet geprobeerd.)

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

Anders:

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

Dan

FLUSH PRIVILEGES;

Voor de goede orde: de oplossing om de gebruiker te verwijderen en opnieuw te maken met '%' heeft me volledig uitgesloten van de database en kan andere problemen veroorzaken, tenzij je de grantverklaring precies goed - eenvoudiger om gewoon de root die je al hebt bij te werken.

Naar mijn ervaring gebeurt het probleem alleen met de root-gebruiker, omdat andere gebruikers handmatig worden toegevoegd en geen deel uitmaken van een eerste installatie / update.


7
2017-10-14 04:18



Ik vond dit perfect werken. Maakt me echter afvragen waarom het wijzigen van het root-wachtwoord met mysql_secure_installation had niet hetzelfde effect. Waar slaat het het nieuwe wachtwoord op? - Mausy5043


Probeer een nieuw mysql-account te maken, voor mij werkte het (mysql 5.7.12):

  1. Login als sudo:

    sudo mysql -uroot
    
  2. Maak een nieuwe gebruiker en verleen hem privileges (geen wachtwoord):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Inloggen als nieuwe gebruiker:

    mysql -uadmin
    

2
2018-05-28 09:37



Het hielp! bedankt. - Ejaz


Als u MySQL / MariaDB hebt geïnstalleerd vanuit de basisrepository, kunnen gebruikers zich niet aanmelden bij MySQL als MySQL-rootgebruiker vanaf hun Unix-aanmeldingen (niet van toepassing als ze sudo toegang)

  1. Inloggen bij MySQL rootshell:

    $ sudo mysql -u root -p
    
  2. Voer onderstaande zoekopdrachten uit:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Open een nieuwe shell en ga als volgt te werk:

    $ mysql -u root -p
    

Bron:

http://www.itzgeek.com/how-tos/linux/debian/how-to-install-mariadb-on-debian-9.html


2
2017-12-02 08:31



Dit werkte voor mij. Bedankt - Junaid Qadir Shekhanzai
Toen ik dit deed, kon ik mysql als root niet meer sudo. Ik moest su eerst, en kon daarna als root inloggen op mysql. Dus veranderde ik het terug naar auth_socket. - untill
Eén opdracht: mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;" - Chris Stryczynski


Probeer deze code eerst,

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

en dan,

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

druk vervolgens op Ctrl+Z en typ: bg om het proces van de voorgrond naar de achtergrond uit te voeren, verifieer uw toegang door:

mysql -u root -proot
mysql> show grants;

1
2018-05-28 09:47





Als u mysql-opdracht gewoon uitvoert onder root-gebruiker, krijgt u toegang zonder dat u om een ​​wachtwoord wordt gevraagd, omdat socket-verificatie is ingeschakeld voor root @ localhost. .

De enige manier om het wachtwoord in te stellen, is om over te schakelen naar native authenticatie zoals:

$ sudo mysql

mysql> ALTER GEBRUIKER 'root' @ 'localhost' IDENTIFICEED MET   mysql_native_password BY 'test';


1
2017-07-26 15:23





Ik moest twee dingen doen (dankzij @Todor en @ Lememhipsum):

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

en dan:

FLUSH PRIVILEGES;

Ik zou niet aanraden om de gebruiker te laten vallen root.


1
2018-01-03 16:43





Ik heb enkele provisioning-scripts aangepast die ik heb gemaakt om MariaDB te gebruiken en ben tegen dit exacte probleem aangelopen. Hier veel info samenvoegen Gazzer's antwoord komt echt in de kwestie terug; het komt allemaal neer op de auth_socket/unix_socket setting.

Dus bij het gebruik van MariaDB 5.5 (onder Ubuntu 14.04) en MariaDB 10 onder (Ubuntu 16.04), meldde het inloggen bij MySQL zich aan en het uitvoeren van deze opdracht wist alles meteen:

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

De andere antwoorden-inclusief het hoogst gestemde antwoord vanaf deze post door Loremhipsum- Moedig slechte praktijken echt aan door te adviseren een gebruiker te laten vallen en deze vervolgens opnieuw te maken. Voor mij is dat een vrij radicale oplossing. De beste / eenvoudigste oplossing os om de plugin waarde, spoel privileges en ga door met het leven.


0
2017-10-20 00:54





Ik had hetzelfde probleem en het volgende werd opgelost door het volgende uit te voeren:

mysql_upgrade --force

-1
2018-05-03 06:48



Helaas werkte dat niet. Ik installeer ubuntu opnieuw. - codescope
Ik heb net een nieuwe installatie van ubuntu 16.04 gedaan en een mariad-server geïnstalleerd. Na installatie heb ik mysql_secure_installation uitgevoerd en een wachtwoord ingesteld. Na het doorlopen van de stappen in mysql_secure_installation, heb ik het opnieuw uitgevoerd en het ziet ernaar uit dat het de wijzigingen niet opslaat. Ik kan nog steeds niet inloggen vanuit mijn normale gebruikersaccount. Zou het een fout kunnen zijn? - codescope
Dit zal nooit helpen. Het probleem heeft niets te maken met de daadwerkelijke installatie van het binaire MariaDB, maar eerder met de gebruiker root zijn ingesteld met plugin instellingen die niet standaard zijn. De enige edge-case waarbij een upgrade van de DB kan helpen in een geval als dit, is als het mysql_upgrade proces zelf rekeningen voor de plugin instelling die ik betwijfel. - JakeGould