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.