从 Linux 命令行测试 MySQL 凭据?

Jak*_*son 21 mysql linux command-line

如何在 Linux 服务器上从命令行测试 MySQL 凭据?

小智 17

mysql -h host -u user -p<whatever> -e"quit"
Run Code Online (Sandbox Code Playgroud)

这允许您使用以编程方式向服务器发送查询所使用的相同连接字符串。您可以添加|| exit 1到末尾以自动退出无效参数。/dev/null如果您不喜欢自动生成的 MySQL 错误消息,您可能还想将 stderr 重定向到。


Wor*_*DBA 8

您可以使用以下命令(假设您在 PATH 中设置了 mysql):

mysql -h 主机 -u 用户 -p

只需用正确的值替换主机用户,然后系统就会提示您输入密码。

  • 我想以编程方式检查。就像返回真或假的东西。 (2认同)

Rol*_*DBA 6

@Phil's Answer@Mr.Brownstone's Answer应该足以解决您的问题,因此对他们两个都+1。

对于以下内容,假设您使用用户名登录 myuser

连接到 mysql 后,您应该运行以下查询:

SELECT USER(),CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)
  • USER()报告您尝试在 MySQL 中进行身份验证的方式
  • CURRENT_USER()报告您如何被允许在 MySQL 中进行身份验证

有时,它们是不同的。这可能会让您深入了解为什么允许您登录 mysql。

这是您需要运行的另一个查询:

SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';
Run Code Online (Sandbox Code Playgroud)

这将向您展示允许您以 身份登录的方式myuser

如果您看到'myuser'@'localhost',则您可以从数据库服务器中进行身份验证。

如果您看到'myuser'@'127.0.0.1'但没有看到'myuser'@'localhost',那么您可以再次从数据库服务器中进行身份验证,但您必须--protocol=tcp从命令行指定。

如果看到'myuser'@'%',则可以从任何服务器进行远程登录。

如果您看到'myuse'r@'10.20.30,%',那么您只能从 10.20.30.% 的 netblock 进行远程登录。

一旦您看到 'mysql.user' 为您的用户提供了什么,您可能希望以一种方式而不是另一种方式允许或限制 myuser 登录。

如果您只想检查密码是否myuserwhateverpassword,您可以执行以下操作:

SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');
Run Code Online (Sandbox Code Playgroud)

您可以从命令行进行检查,如下所示:

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

如果您不是root并且只想测试 myuser,您可以这样做:

PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`
Run Code Online (Sandbox Code Playgroud)

如果您得到 1,则 myuser 的密码被验证为正确。