Answers:
@Phil的答案和@ Mr.Brownstone的答案足以满足您的问题,因此对他们两个都+1。
对于以下内容,假设您使用用户名登录 myuser
连接到mysql后,应运行以下查询:
SELECT USER(),CURRENT_USER();
有时,它们是不同的。这可以让您深入了解为什么允许您登录mysql。
这是您需要运行的另一个查询:
SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';
这将向您显示允许您以身份登录的方式myuser
。
如果看到'myuser'@'localhost'
,则可以从DB Server内部进行身份验证。
如果看到'myuser'@'127.0.0.1'
和看不到'myuser'@'localhost'
,则可以再次从DB Server内部进行身份验证,但是必须--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');
您可以从命令行进行如下检查:
PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`
如果您不是,root
并且只想测试myuser,则可以执行以下操作:
PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`
如果您得到1,则验证myuser的密码是否正确。