Domů > MySQL > Obejití hesla k MySQL s minimálním „výpadkem“

Obejití hesla k MySQL s minimálním „výpadkem“

mysqlDnes jsem náhodou potřeboval řešit přístup k MySQL serveru na kterém bylo špatně uloženo root heslo. Aby to nebylo tak jednoduché, jednalo se o produkční server kde se odstávka nedá řešit na delší dobu než 1 – 2 vteřiny, takže klasický postup s přidáním parametru –skip-grant-tables tak jak je popisován ve spoustě návodů nejde použít, protože server by byl vystven veřejně na Internetu s vypnutou autorizací.

Řešení je kupodivu překvapivě jednoduché, ale návod se o něm nezmiňuje. Stačí vytvořit script obsahující například takovýto dotaz:

UPDATE
  mysql.user
SET
  Password=PASSWORD('noveheslo')
WHERE
  User='root';

FLUSH PRIVILEGES;

Tento script uložte napřiklad do souboru /var/lib/mysql/init.sql (samozřejmě cesta k instalaci MySQL se na Vašem serveru může lišit, tato je ale nejobvyklejší) a do souboru /etc/my.cnf přidejte do sekce označené [mysqld] řádku:

[mysqld]
.
.
.
.
init-file=/var/lib/mysql/init.sql

Nyní MySQL server restartujte a přihlašte se nově nastaveným heslem. Celý výpadek jsme tímto tedy minimalizovali jen na dobu restartu služby.

Nezapomeňte ihned po úspěšné změně hesla odstranit záznam init-file ze souboru /etc/my.cnf a samozřejmě také smazat script init.sql který jste pro tuto změnu hesla vytvořili!!!

Tento postup byl testován na MySQL 5.1.46. Na starších verzích nemusí fungovat nebo se může chovat jinak.

Tags:
  1. pek
    10.05.2011 na 11:23 | #1

    Dobrej tip. Díky za něj.

  1. Žádné zpětné odkazy