Configurando Senhas


Na maioria dos casos você deve utilizar GRANT para configurar seus usuários e senhas, portanto, as informações exibidas a seguir são aplicadas somentes para usuários avançados. Leia "A Sintaxe de GRANT e REVOKE".

Os exemplos nas seções precedentes ilustram um princípio importante: quando você armazena uma senha não-vazia utilizando INSERT ou UPDATE você deve utilizar a função PASSWORD() para criptografá-la. Isto é porque a tabela user armazena senhas na forma criptografada, e não como texto puro. Se você esquecer deste fato, é provável que você possa tentar configurar senhas desta forma:

shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password)
 VALUES('%','jeffrey','biscuit');
mysql> FLUSH PRIVILEGES;

O resultado é que o valor 'biscuit' é armazenado como a senha na tabela user. Quando o usuário jeffrey tentar se conectar ao servidor utilizando esta senha, o cliente MariaDB a criptografa utilizando a função PASSWORD(), gerando um vetor de autenticação baseado em uma senha criptografada e um número randômico, obtido do servidor, e envia o resultado ao servidor. O servidor usa o valor do campo password na tabela user (que é o valor 'biscuit' não criptografado ) para realizar os mesmos cálculos e comparar os resultados. A comparação falha e o servidor rejeita a conexão:

shell> mysql -u jeffrey -pbiscuit test
Access denied

As senhas devem ser criptografadas quando elas são inseridas na tabela user, portanto a instrução INSERT deveria ter sido informada no seguinte formato:

mysql> INSERT INTO user (Host,User,Password)
 VALUES('%','jeffrey',PASSWORD('biscuit'));

Você deve também utilizar a função PASSWORD() quando utilizar instruções SET PASSWORD:

mysql> SET PASSWORD FOR jeffrey@'%' = PASSWORD('biscuit');

Se você configurar senhas utilizando a instrução GRANT ... IDENTIFIED BY ou o comando mysqladmin password, a função PASSWORD() é desnecessária. Ambos tomam o cuidado de criptografar a senha para você, então você deve especificar a senha 'biscuit' desta forma:

mysql> GRANT USAGE ON *.* TO jeffrey@'%' IDENTIFIED BY 'biscuit';

ou

shell> mysqladmin -u jeffrey password biscuit

NOTA: PASSWORD() é diferente da senha criptografada do Unix.

Retornar