Как установить пароль пользователя MySQL, используя предварительно хэшированный пароль?
У меня есть сервер баз данных MySQL 5.1.73.
Согласно документации MySQL, в новых версиях MySQL создание пользователя с использованием предварительно хешированного пароля выглядит следующим образом:
CREATE USER 'ans'@'localhost'
IDENTIFIED BY PASSWORD 'hash_string'
Устарело и будет удалено в будущей версии MySQL.
Однако я не могу понять, каков новый способ (если он вообще есть) добиться этого.
Мы используемСапожникдля настройки наших баз данных, и я хотел бы предварительно заполнить свои базы данных учетными записями, которые им понадобятся, вместе с паролями, которые они будут использовать, без открытых текстовых паролей в моих скриптах. Я бы подумал, что допинг этого сработает:
update mysql.user
set password = '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB'
where user = 'ans';
Но мои тесты показали, что это на самом деле не меняет пароль для входа в MySQL.
mysql> create user 'ans'@'localhost' identified by 'foo';
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| ans | localhost | *F3A2A51A9B0F2BE2468926B4132313728C250DBF |
+------+-----------+-------------------------------------------+
mysql> update mysql.user set password = password('bar') where user = 'ans';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| ans | localhost | *E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB |
+------+-----------+-------------------------------------------+
mysql> quit
$ mysql -uans -pbar
ERROR 1045 (28000): Access denied for user 'ans'@'localhost' (using password: YES)
$ mysql -uans -pfoo
Welcome to the MySQL monitor. Commands end with ; or \g.
решение1
Когда вы взламываете пароль mysql.user
, вы должны запустить
mysql> FLUSH PRIVILEGES;
СогласноДокументация MySQL по FLUSH
ПРИВИЛЕГИИ
Перезагружает привилегии из таблиц привилегий в базе данных mysql.
Сервер кэширует информацию в памяти в результате операторов GRANT, CREATE USER, CREATE SERVER и INSTALL PLUGIN. Эта память не освобождается соответствующими операторами REVOKE, DROP USER, DROP SERVER и UNINSTALL PLUGIN, поэтому для сервера, который выполняет много экземпляров операторов, вызывающих кэширование, будет наблюдаться увеличение использования памяти. Эту кэшированную память можно освободить с помощью FLUSH PRIVILEGES.
Теперь вам придется перезапустить MySQL, чтобы пароль вступил в силу.
решение2
Сейчас это немного устарело, но на будущее: используя команду, SHOW CREATE USER 'ans'@'localhost'
вы можете увидеть, что новый синтаксис имеет вид:
CREATE USER 'ans'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT