sql >> Databáze >  >> RDS >> Mysql

Jak zakázat přihlášení k MySQL root, když není zadáno žádné heslo?

Uživatelé, kteří se s tímto chováním setkávají v novějších verzích MySQL/MariaDB (např. Debian Stretch atd.), by si měli být vědomi toho, že v tabulce mysql.user je sloupec nazvaný 'plugin'. Pokud je povolen plugin 'unix_socket', bude se root moci přihlásit pomocí příkazového řádku bez nutnosti zadání hesla. Ostatní přihlašovací mechanismy budou deaktivovány.

Chcete-li zkontrolovat, zda je tomu tak:

SELECT host, user, password, plugin FROM mysql.user;

což by mělo vrátit něco takového (se zapnutým unix_socket):

+-----------+------+--------------------------+-------------+
| host      | user | password                 | plugin      |
+-----------+------+--------------------------+-------------+
| localhost | root | <redacted_password_hash> | unix_socket |
+-----------+------+--------------------------+-------------+

Chcete-li to zakázat a vyžadovat, aby root používal heslo:

UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

Poznámka: Jak poznamenal @marioivangf (v komentáři) v novějších verzích MySQL (např. 5.7.x), možná budete muset nastavit plugin na 'mysql_native_password' (spíše než prázdný).

Poté restartujte:

service mysql restart

Problém vyřešen!:

[email protected] ~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Zdroj:https://stackoverflow.com/a/44301734/3363571 Velké díky @SakuraKinomoto (prosím, hlasujte pro jeho odpověď, pokud to považujete za užitečné).



  1. Zpracování dat z vícenásobného výběru pole

  2. Dotaz na porovnání dat v SQL

  3. Jak opravit "Pro hromadnou sadu řádků v klauzuli from musí být zadán název korelace." v SQL Server

  4. Souhrnné sloupce s dalšími (odlišnými) filtry