Testar credenciais do MySQL a partir da linha de comando do Linux?

16

Como você testa credenciais do MySQL na linha de comando em um servidor Linux?

Jake Wilson
fonte

Respostas:

5

As respostas @ Phil e @ Mr.Brownstone devem ser suficientes para a sua pergunta, portanto, +1 para as duas.

Para o seguinte, vamos assumir que você está efetuando login com nome de usuário myuser

Depois de se conectar ao mysql, você deve executar a seguinte consulta:

SELECT USER(),CURRENT_USER();
  • USER () relata como você tentou se autenticar no MySQL
  • CURRENT_USER () relata como você pôde se autenticar no MySQL

Às vezes, eles são diferentes. Isso pode lhe dar informações sobre por que você tem permissão para fazer login no mysql.

Aqui está outra consulta que você precisa executar:

SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';

Isso mostrará as maneiras pelas quais você pode fazer login como myuser.

Se você vir 'myuser'@'localhost', poderá se autenticar de dentro do DB Server.

Se você vir 'myuser'@'127.0.0.1'e não vir 'myuser'@'localhost', poderá se autenticar novamente no DB Server, mas deverá especificar a --protocol=tcppartir da linha de comando.

Se você vir 'myuser'@'%', poderá fazer logins remotos a partir de qualquer servidor.

Se você 'myuse'r@'10.20.30,%'vir, poderá fazer logins remotos apenas do netblock de 10.20.30.%.

Depois de ver o que o 'mysql.user' possui para o usuário, você pode permitir ou restringir o myuser do logggin de uma maneira e não da outra.

Se você simplesmente deseja verificar se a senha myuseré whateverpassword, faça o seguinte:

SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');

Você pode verificar na linha de comando da seguinte maneira:

PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`

Se você não é roote deseja testar apenas o myuser, pode fazer o seguinte:

PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`

Se você obtiver 1, a senha do myuser será verificada como boa.

RolandoMySQLDBA
fonte
13
mysql -h host -u user -p<whatever> -e"quit"

Isso permite que você use a mesma cadeia de conexão usada para enviar consultas programaticamente ao servidor. Você pode adicionar || exit 1ao final a saída automática de argumentos inválidos. Você também pode redirecionar o stderr para /dev/nullse não gostar da mensagem de erro MySQL gerada automaticamente.

CSTobey
fonte
6

Você pode usar o seguinte comando (assumindo que você tenha o mysql configurado no seu PATH):

mysql -h host -u usuário -p

Apenas substitua host e usuário pelos valores corretos e, em seguida, sua senha será solicitada.

Mr.Brownstone
fonte
2
Estou querendo verificar programaticamente. Como algo que retorna verdadeiro ou falso.
Jake Wilson
2
mysql --user=user_name --password=your_password dbname

Sua pergunta é simples ou existe um caso específico que você precisa testar?

Philᵀᴹ
fonte