MySQL - zmiana hasła użytkownika

  • Data: 2015

Zmiana hasła w bazie MySQL można przeprowadzić na kilka sposobów m.in. narzędziem mysqladmin, za pomocą zapytania lub używając różnych narzędzi tj. phpMyAdmin czy MySQL Workbench. Ja skupię się na dwóch pierwszych rozwiązaniach.

Zmiana hasła za pomocą mysqladmin

Z narzędzia mysqladmin korzystać mogą tylko użytkownicy z nadanymi uprawnieniami SUPER ( Pozwala użytkownikowi na korzystanie z działań administracyjnych takich jak CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, i polecenia mysqladmin ). Na zainstalowanym świeżym serwerze MySQL takim użytkownikiem jest root, jeśli jesteśmy świadomi co robimy zawsze możemy nadać takie uprawnienia zapytaniem:

mysql> GRANT SUPER ON *.* TO 'nazwa_użytkownika'@'localhost';

W innym przypadku zostaniemy uraczeni następującą odmową: mysqladmin: Can't turn off logging; error: 'Access denied; you need the SUPER privilege for this operation' Z powłoki systemowej wydajemy polecenie: mysqladmin -u root -p'stare hasło' password nowe hasło i jeszcze przeładujemy uprawnienia poleceniem: mysqladmin -u root -p flush-privileges.

Zmiana hasła za pomocą zapytania SQL

W tym wypadku rozpatrujemy dwa warianty zmiany hasła przez zwykłego użytkownika bez specjalnych uprawnień, w tym braku dostępu do bazy mysql i użytkownika root.

  • Zmiana hasła (swojego) przez zwykłego użytkownika
  • Logujemy się do konsoli mysql: mysql -u nazwa_użytkownika -p
  • Następnie w konsoli mysql wydajemy polecenie: SET PASSWORD = PASSWORD('nowe_hasło');
  • Po wylogowaniu się możemy ponownie się zalogować używając już nowego hasła.
  • Oczywiście użytkownik root też w ten sposobów może zmienić swoje hasło.
  • Zmiana hasła użytkownika root
  • Logujemy się do konsoli mysql: mysql -uroot -p
  • Możemy zmienić hasło na kilka różnych sposobów:
  • ## I sposób:
    mysql> SET PASSWORD = PASSWORD('nowe_hasło');
    ## II sposób - w tym przypadku określamy dodatkowo hosta:
    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nowe_hasło');
    ## III sposób - w tym przypadku również określamy dodatkowo hosta:
    mysql> UPDATE mysql.user SET Password=PASSWORD('nowe_hasło') WHERE User='root' AND Host='localhost';
    mysql> flush privileges;
    
  • Zmiana hasła innemu użytkownikowi
  • Standardowo logujemy się do konsoli mysql
  • ## I sposób - lokalny użytkownik:
    mysql> UPDATE mysql.user SET Password=PASSWORD('nowe_hasło') WHERE User='nazwa_użytkownika' AND Host='localhost';
    mysql> flush privileges;
    ## II sposób - zdalny użytkownik:
    mysql> UPDATE mysql.user SET Password=PASSWORD('nowe_hasło') WHERE User='nazwa_użytkownika' AND Host='hostname';
    mysql> flush privileges;
    

Ostatnia uwaga dotyczy opcji host. W domyślnej konfiguracji mysql bierze pod uwagę reverse DNS. Należy na to zwrócić uwagę przy tworzeniu użytkownika, ponieważ podając adres IP, z którego użytkownik będzie się łączył zakończy się niepowodzeniem. Rewers adresu IP sprawdzimy np:

host -t PTR 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com. (bez ostatniej kropki)

Naturalnie możemy wymusić żeby mysql brał pod uwagę adres IP. W pliku konfiguracyjnym serwera mysql (my.cnf) w sekcji [mysqld] dodajmy opcję skip-name-resolve i rzecz jasna restart mysql.

Powrót »