小智 17
mysql -h host -u user -p<whatever> -e"quit"
Run Code Online (Sandbox Code Playgroud)
这允许您使用以编程方式向服务器发送查询所使用的相同连接字符串。您可以添加|| exit 1到末尾以自动退出无效参数。/dev/null如果您不喜欢自动生成的 MySQL 错误消息,您可能还想将 stderr 重定向到。
您可以使用以下命令(假设您在 PATH 中设置了 mysql):
mysql -h 主机 -u 用户 -p
只需用正确的值替换主机和用户,然后系统就会提示您输入密码。
@Phil's Answer和@Mr.Brownstone's Answer应该足以解决您的问题,因此对他们两个都+1。
对于以下内容,假设您使用用户名登录 myuser
连接到 mysql 后,您应该运行以下查询:
SELECT USER(),CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)
有时,它们是不同的。这可能会让您深入了解为什么允许您登录 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 登录。
如果您只想检查密码是否myuser为whateverpassword,您可以执行以下操作:
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 的密码被验证为正确。
| 归档时间: |
|
| 查看次数: |
50046 次 |
| 最近记录: |