Průvodce správou hesel MySQL: Jak nastavit, změnit, resetovat a zabezpečit hesla (Windows, Linux, Mac)

目次

1. Úvod

Důležitost správy hesel v MySQL

MySQL je široce používaný systém pro správu databází po celém světě. Nicméně základ jeho bezpečnostní správy spočívá v správné konfiguraci a administraci hesel. Bez vhodné správy hesel můžete čelit následujícím rizikům:

  • Neoprávněný přístup : Slabá hesla činí váš systém zranitelným vůči externím útokům.
  • Únik dat : Citlivé informace mohou být odhaleny škodlivými uživateli.
  • Manipulace se systémem : Smazání nebo úprava dat může ovlivnit normální fungování webových stránek a aplikací.

Aby se tato rizika předešla, je nezbytné nastavit silná hesla a pravidelně je měnit. V tomto článku podrobně vysvětlíme následující aspekty správy hesel v MySQL:

Jak nastavit hesla pro nové uživatele
Jak změnit hesla pro existující uživatele
Jak obnovit zapomenuté heslo
Jak zkontrolovat sílu hesla
Časté chyby a jak je řešit
Doporučená nastavení pro zvýšení bezpečnosti

Přečtením tohoto článku získáte znalosti a dovednosti potřebné k řádné správě hesel v MySQL, takže si jej přečtěte až do konce.

2. Jak nastavit a měnit hesla v MySQL

Vytvoření nového uživatele a nastavení hesla

Tato sekce vysvětluje, jak vytvořit nového uživatele a nastavit heslo v MySQL.

1. Přihlášení do MySQL

Nejprve se přihlaste jako správce MySQL (například uživatel root).

mysql -u root -p

-u root je volba pro přihlášení jako uživatel root a -p zobrazí výzvu k zadání hesla.

2. Vytvoření nového uživatele a nastavení hesla

Použijte příkaz CREATE USER k vytvoření nového uživatele a nastavení hesla.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'secure_password';
  • 'newuser'@'localhost' : Určuje uživatelské jméno ( newuser ) a hostitele ( localhost ), ze kterého se uživatel může připojit.
  • 'secure_password' : Heslo, které se má nastavit (ujistěte se, že je silné).

3. Přidělení vhodných oprávnění

Musíte přidělit databázová oprávnění novému uživateli. Například pro přidělení všech oprávnění:

GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION;
  • ALL PRIVILEGES : Přiděluje všechna oprávnění.
  • *.* : Umožňuje přístup ke všem databázím a tabulkám.
  • WITH GRANT OPTION : Umožňuje uživateli přidělovat oprávnění dalším uživatelům.

4. Aplikace oprávnění

Spusťte FLUSH PRIVILEGES, aby se změny projevily.

FLUSH PRIVILEGES;

Nyní jste úspěšně vytvořili nového uživatele se zabezpečeným heslem a vhodnými oprávněními.

Změna hesla existujícího uživatele

Tato sekce vysvětluje, jak změnit heslo existujícího uživatele MySQL.

1. Přihlášení do MySQL

Přihlaste se s administrátorskými oprávněními.

mysql -u root -p

2. Změna hesla pomocí ALTER USER (MySQL 5.7 a novější)

ALTER USER 'existinguser'@'localhost' IDENTIFIED BY 'new_secure_password';
  • 'existinguser'@'localhost' : Uživatelské jméno a hostitel, které chcete upravit.
  • 'new_secure_password' : Nové heslo.

3. Změna hesla pomocí SET PASSWORD (MySQL 5.6 a starší)

SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('new_secure_password');

Použití funkce PASSWORD() zajišťuje, že heslo je před uložením řádně zašifrováno.

4. Aplikace změn

Nezapomeňte spustit FLUSH PRIVILEGES;.

FLUSH PRIVILEGES;

Nyní můžete bezpečně změnit heslo existujícího uživatele pomocí této metody.

3. Jak obnovit heslo MySQL, pokud jste ho zapomněli

I když zapomenete své heslo k MySQL, můžete ho obnovit podle správného postupu. Tato sekce popisuje, jak obnovit hesla na Windows, Linuxu a macOS.

Jak obnovit heslo MySQL na Windows

Ve Windows je běžný postup pro resetování hesla root uživatele MySQL použít skip-grant-tables možnost.

1. Zastavte službu MySQL

Nejprve zastavte běžící službu MySQL ve Windows.

net stop mysql

Alternativně můžete otevřít services.msc a ručně zastavit službu MySQL.

2. Spusťte MySQL pomocí mysqld --skip-grant-tables

mysqld --skip-grant-tables --skip-networking

3. Přihlaste se k MySQL

mysql -u root

4. Nastavte nové heslo

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Nebo pro MySQL 5.6 a starší použijte SET PASSWORD.

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

5. Restartujte MySQL

net stop mysql
net start mysql

Jak resetovat heslo MySQL na Linuxu / Macu

1. Zastavte službu MySQL

sudo systemctl stop mysql

2. Spusťte MySQL v režimu --skip-grant-tables

sudo mysqld_safe --skip-grant-tables --skip-networking &

3. Přihlaste se k MySQL

mysql -u root

4. Resetujte heslo

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

5. Restartujte MySQL

sudo systemctl start mysql

Změny v metodách resetování hesla v MySQL 8.0 a novějších

V MySQL 8.0 se mechanismus správy hesel změnil, proto byste si měli všimnout následujícího bodu.

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

To vám umožní nadále používat starší metodu autentizace hesla, pokud je to potřeba.

4. Řešení běžných chyb při změně hesel MySQL

Při pokusu o změnu hesel MySQL můžete narazit na chyby. Tato sekce vysvětluje příčiny a řešení běžných chyb.

CHYBA 1045 (28000): Přístup odepřen pro uživatele

Příčina chyby

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Tato chyba nastane při přihlašování k MySQL, pokud je heslo nesprávné nebo oprávnění nedostatečná.

Řešení

  1. Znovu zkontrolujte zadané heslo
  2. Zadejte správné uživatelské jméno a hostitele
    SELECT User, Host FROM mysql.user;
    
  1. Resetujte heslo (viz sekce o resetování hesla)
  2. Správně nakonfigurujte oprávnění
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

CHYBA 1133: Nelze najít žádný odpovídající řádek v tabulce uživatelů

Příčina chyby

ERROR 1133: Can't find any matching row in the user table

Tato chyba nastane, když zadaný uživatel neexistuje.

Řešení

  1. Zkontrolujte aktuální seznam uživatelů
    SELECT User, Host FROM mysql.user;
    
  1. Znovu vytvořte uživatele
    CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Zadejte správného hostitele (použijte localhost nebo % podle potřeby)

CHYBA 1820: Musíte resetovat své heslo

Příčina chyby

ERROR 1820: You must reset your password using ALTER USER statement before executing this statement.

Tato chyba nastane, když heslo vypršelo.

Řešení

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

Pro zakázání vypršení hesla:

SET GLOBAL default_password_lifetime = 0;

CHYBA 2059: Plugin caching_sha2_password nelze načíst

Příčina chyby

ERROR 2059: Plugin caching_sha2_password could not be loaded

V MySQL 8.0 a novějších se výchozí autentizační plugin změnil na caching_sha2_password, což může způsobovat chyby u některých klientů.

Řešení

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

Nebo přidejte následující do konfiguračního souboru MySQL (my.cnf nebo my.ini) a restartujte MySQL.

[mysqld]
default_authentication_plugin=mysql_native_password

Restartujte MySQL:

sudo systemctl restart mysql

5. Zpevnění zabezpečení MySQL a doporučená nastavení

Zpevnění zabezpečení MySQL je nezbytné pro zlepšení bezpečnosti databáze a zabránění neoprávněnému přístupu a únikům dat. Tato sekce představuje doporučené konfigurace pro zvýšení zabezpečení MySQL.

Nastavte silná hesla

Používání slabých hesel v MySQL činí váš systém snadným cílem útočníků. Nakonfigurujte nastavení tak, aby zvýšilo sílu hesla.

Povolit politiku hesel

Zkontrolujte aktuální politiku hesel:

SHOW VARIABLES LIKE 'validate_password%';

Nakonfigurujte silnou politiku hesel:

SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Nastavte expiraci hesla

Pravidelná změna hesel zvyšuje bezpečnost.

Zkontrolujte aktuální nastavení expirace hesla:

SHOW VARIABLES LIKE 'default_password_lifetime';

Nastavte expiraci hesla na 90 dní:

SET GLOBAL default_password_lifetime = 90;

Zpevněte zabezpečení uživatele root

Omezte vzdálený přístup pro uživatele root

Zkontrolujte aktuální konfiguraci hosta pro uživatele root:

SELECT User, Host FROM mysql.user WHERE User = 'root';

Zakázat vzdálený přístup pro root:

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

Vytvořte alternativní administrátorský účet a zakážete root

CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
FLUSH PRIVILEGES;

Omezte vzdálená připojení MySQL

Upravte konfigurační soubor (my.cnf nebo my.ini):

[mysqld]
bind-address = 127.0.0.1

Nakonfigurujte firewall na Linuxu:

sudo ufw deny 3306

Povolte pouze konkrétní IP adresu:

sudo ufw allow from 192.168.1.100 to any port 3306

Odstraňte zbytečné účty a oprávnění

Zkontrolujte aktuální seznam uživatelů:

SELECT User, Host FROM mysql.user;

Odstraňte anonymní uživatele:

DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

Odstraňte zbytečnou testovací databázi:

DROP DATABASE test;
FLUSH PRIVILEGES;

Povolit logování MySQL

Povolte chybový log:

[mysqld]
log_error = /var/log/mysql/error.log

Povolte obecný log dotazů:

general_log = 1
general_log_file = /var/log/mysql/general.log

Restartujte MySQL:

sudo systemctl restart mysql

6. Často kladené otázky (FAQ)

Tato sekce shrnuje běžné otázky a řešení související s nastavením, úpravou a resetováním hesla MySQL.

Q1: Jaký je nejjednodušší způsob, jak obnovit zapomenuté heslo root uživatele MySQL?

Řešení

  1. Zastavte MySQL
    sudo systemctl stop mysql
    
  1. Spusťte MySQL v režimu skip-grant-tables
    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
  1. Přihlaste se do MySQL
    mysql -u root
    
  1. Nastavte nové heslo
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';
    
  1. Restartujte MySQL
    sudo systemctl restart mysql
    

Q2: Co mám dělat, když se zobrazí „ERROR 1045 (28000): Access denied for user“?

Řešení

  1. Ověřte zadané heslo
    mysql -u root -p
    
  1. Potvrďte, že uživatel existuje
    SELECT User, Host FROM mysql.user;
    
  1. Resetujte heslo (viz předchozí instrukce)

  2. Přidělte odpovídající oprávnění

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

Q3: Existuje rozdíl mezi MySQL 5.6 a 8.0 při změně hesel?

Změna hesla v MySQL 5.6 a starších

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_secure_password');

Změna hesla v MySQL 8.0 a novějších

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_secure_password';

V MySQL 8.0, protože caching_sha2_password je výchozí metoda ověřování, starší klienti mohou vyžadovat následující úpravu:

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

Q4: Jak mohu posílit politiku hesel v MySQL?

Nastavte silnou politiku hesel

SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

Q5: Je bezpečné zakázat uživatele root v MySQL?

Řešení

  1. Vytvořte administrátorský účet
    CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'secure_password';
    GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
    
  1. Zakázat účet root
    RENAME USER 'root'@'localhost' TO 'disabled_root'@'localhost';
    FLUSH PRIVILEGES;
    

Q6: Existují nástroje pro bezpečnou správu hesel MySQL?

Řešení

  1. mysql_config_editor (oficiální nástroj MySQL)
    mysql_config_editor set --login-path=local --host=localhost --user=root --password
    

To vám umožní přihlásit se bez explicitního zadání hesla.

mysql --login-path=local
  1. Správci hesel (Bitwarden, 1Password, KeePass, atd.)
    * Užitečné pro generování a bezpečné ukládání silných hesel.

Q7: Můžu zaznamenávat změny hesel v MySQL?

Řešení

Povolit obecný dotazovací log

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log

Restartujte MySQL:

sudo systemctl restart mysql

7. Závěr

Tento článek vysvětlil vše od základů po pokročilé techniky správy hesel v MySQL. Níže je shrnutí klíčových bodů spolu s kontrolním seznamem pro správnou správu hesel MySQL.

Klíčové body správy hesel v MySQL

Správná konfigurace a správa hesel jsou základem bezpečnosti
Nastavujte silná hesla při vytváření nových uživatelů
Pravidelně měňte hesla a nastavujte zásady expirace
Pochopte postupy obnovy pro zapomenutá hesla
Správně řešte chyby při změně hesel
Optimalizujte vzdálený přístup a správu uživatele root pro zvýšení bezpečnosti
Povolte logování pro sledování aktivit souvisejících s hesly

Kontrolní seznam správy hesel MySQL

Checklist ItemStatus
Have you set a strong root password for MySQL?✅ / ❌
Do you use the CREATE USER command when creating new users?✅ / ❌
Have you enabled the validate_password plugin and configured a strong password policy?✅ / ❌
Do you regularly change passwords and set expiration policies?✅ / ❌
Have you disabled remote access for the root user?✅ / ❌
Have you removed unnecessary or anonymous accounts?✅ / ❌
Do you understand how to reset passwords using skip-grant-tables mode?✅ / ❌
Do you understand how to resolve ERROR 1045 and ERROR 1820 during password changes?✅ / ❌
Have you enabled MySQL logs (general_log and error_log)?✅ / ❌

Doporučené další kroky po přečtení tohoto článku

  1. Zkontrolujte aktuální politiku hesel a v případě potřeby ji posilte
    SHOW VARIABLES LIKE 'validate_password%';
    SET GLOBAL validate_password.policy = STRONG;
    SET GLOBAL validate_password.length = 12;
    
  1. Odstraňte zbytečné účty
    DELETE FROM mysql.user WHERE User='';
    DROP DATABASE test;
    FLUSH PRIVILEGES;
    
  1. Omezte vzdálený přístup pro uživatele root
    UPDATE mysql.user SET Host='localhost' WHERE User='root';
    FLUSH PRIVILEGES;
    
  1. Nastavte pravidelnou expiraci hesel
    SET GLOBAL default_password_lifetime = 90;
    
  1. Povolte logování pro monitorování
    [mysqld]
    log_error = /var/log/mysql/error.log
    general_log = 1
    general_log_file = /var/log/mysql/general.log
    

Restartujte MySQL:

sudo systemctl restart mysql

Související články pro další vzdělávání

📌 Podrobný průvodce správou uživatelských oprávnění v MySQL
📌 Postupy zálohování a obnovy MySQL
📌 Jak optimalizovat databáze MySQL
📌 Konfigurace MySQL s externím ověřováním (LDAP nebo OAuth)

Závěrečné úvahy

MySQL password management is zásadní znalost for protecting database security.
Apply the practices covered in this guide and ensure bezpečnou správu databáze! 💪