Como posso definir a senha de um usuário MySQL usando uma senha pré-hashed?

Como posso definir a senha de um usuário MySQL usando uma senha pré-hashed?

Como posso definir a senha de um usuário MySQL usando uma senha pré-hashed?


Eu tenho um servidor de banco de dados MySQL 5.1.73.

De acordo com a documentação do MySQL, nas versões mais recentes do MySQL, criar um usuário usando uma senha pré-hashed como esta:

CREATE USER 'ans'@'localhost'
    IDENTIFIED BY PASSWORD 'hash_string'

Está obsoleto e será removido em uma versão futura do MySQL.

No entanto, não consigo descobrir qual é (se houver) a nova maneira de conseguir isso.

Nós usamosSapateiropara configurar nossos bancos de dados, e gostaria de preencher previamente meus bancos de dados com as contas que eles precisarão, junto com as senhas que usarão, sem ter senhas em texto não criptografado em meus scripts. Eu teria pensado que dopar isso resolveria o problema:

update mysql.user
    set password = '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB'
    where user = 'ans';

Mas meus testes não alteram a senha de login do 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.

Responder1

Quando você hackeia a senha mysql.user, você deve executar

mysql> FLUSH PRIVILEGES;

De acordo comDocumentação MySQL sobre FLUSH

PRIVILÉGIOS

Recarrega os privilégios das tabelas de concessão no banco de dados mysql.

O servidor armazena informações em cache na memória como resultado das instruções GRANT, CREATE USER, CREATE SERVER e INSTALL PLUGIN. Essa memória não é liberada pelas instruções REVOKE, DROP USER, DROP SERVER e UNINSTALL PLUGIN correspondentes, portanto, para um servidor que executa muitas instâncias das instruções que causam armazenamento em cache, haverá um aumento no uso de memória. Essa memória cache pode ser liberada com FLUSH PRIVILEGES.

Agora, você precisa reiniciar o MySQL para que a senha tenha efeito.

Responder2

Um pouco antigo agora, mas para referência futura, usando o SHOW CREATE USER 'ans'@'localhost'comando você pode ver que a nova sintaxe está no formato:

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

informação relacionada