mysql改密码怎么这么麻烦呀? 如果是本机登录,可以不用加 -h localhost -p , 因为第一个登录认证是不需要密码的,默认也是localhost,而第二条则用在远程登录上,如果密码忘记了,可以用本地用户登录后,再修改 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢,上面还有一个问题没完。我刚刚改的密码怎么是 2e782c85379a326e 了?难道是加密后的? 1:use mysql; update user set password =password('12345') where host='%' and user='root';select host,user,password from user;结果是:-------------------------------------------------||host | user | password ||------------------------------------------------||localhost | root | null || % | root | 2e782c85379a326e |-------------------------------------------------| 以上你的操作是完全正确的,显示的 2e78....... 是经过 PASSWORD() 函数加密后的密文,(localhost='%' ?? 应该是笔误吧! )但是你在执行下面的语句之前,你还应该执行一句 FLUSH PRIVILEGES;mysql>mysql -h localhost -u root -penter password:12345ERROR 1045:Access denied for user:'[email protected]'语句 FLUSH PRIVILEGES 是用于通知 MySQL 服务程序刷新授权表信息的{ 为什么要使用 FLUSH PRIVILEGES ,这一语句呢? 这是因为当 MySQL 启动时,它会读取一下用户授权表信息,并将它加载到内存中 当运行以后,有用户登录时,它将直接从内存中查找匹配的授权信息, 而如果你使用 SQL 数据操纵语句来对用户授权表进行修改时, MySQL 并不会注意到授权表信息的变化, 只有发出 FLUSH PRIVILEGES 语句, 才能使 MySQL 重新加载授权表信息, 而如果你使用 GRANT ,则授权信息的更改就立即被 MySQL 接受, 因而也不再需要 执行 FLUSH PRIVILEGES 语句了.}2:在你执行了 FLUSH PRIVILEGES 语句后,再执行mysql -h localhost -u root -p12345很不幸的事发生,你会依然得到一个出错信息ERROR 1045:Access denied for user:'[email protected]'这是为什么呢,呵呵,因为你登录时的用户信息为Host = localhostUser = rootPassword = 12345你的登录信息匹配的是第一条记录,而该条记录中密码是空,所以你登录时应该使用mysql -h localhost -u root或者使用mysql -h 192.168.0.1 -u root -p12345使你的授权匹配第二条记录{ 为什么 mysql -h localhost -u root 匹配的是用户授权表中的第一条记录 而不是第二条 Host = %, User = root, Password = 12345 的记录呢?? :) 这是由于 MySQL 在启动时读入用户授权表后, 在内存中对其进行了一次排序, 用户授权表 +----------+--------------+----------------------+ |host | user | password | +----------+--------------+----------------------+ |localhost | root | null | | % | root | 2e782c85379a326e | +----------+--------------+----------------------+ 排序后的结果仍是 +----------+--------------+----------------------+ |host | user | password | +----------+--------------+----------------------+ |localhost | root | null | | % | root | 2e782c85379a326e | +----------+--------------+----------------------+ 然后在你以 mysql -h localhost -u root 登录时,它会首先检查 Host 字段, 你的 Host = localhost ,所以就匹配 第一个用户信息! 用户授权表的排序规则 \ 当用户授权表中出现多个 Host = localhsot 的记录, mysql -h localhost -u root 会匹配那一个呢????? 能不能你自己回答一下?? } 回第一个问题: %是针对远程登陆的,而localhost才是针对本地登陆。第2个问题:没听懂:) 1:% 并不是表示远程登陆, 它表示的是通配符, 192.168.0.% 通配 192.168.0.0 ~ 192.168.0.2552: 如果用户表是这样的+----------+----------+----------------------+|host | user | password | +----------+----------+----------------------+|localhost | | ||localhost | root | | |localhost | root1 | |+----------+----------+----------------------+现在这样登录mysql -h localhost -u tttt 它匹配哪一个用户??mysql -h localhost -u root 它匹配哪一个用户?? 请教一个关于复杂指标报表的Mysql数据库设计问题 姓名 性别 密码等在mysql中都保存为什么类型 mysql支持PLSQL中begin-end那样的块操作吗? 初学MySQL,查询时关于字符集的问题,在线等!!! mysql支持表的级联吗 在servlet中用mysql乱码问题 asp vbscript--- mysql mysql 查询表中字段值相同的记录 什么是文档数据库? 求一条跟in 有关的SQL语句 怎么知道mysql使用什么中文编码(charsetEncoding)方式?或者说怎么设置中文编码方式? 大家来讨论 MySQL 常用工具
上面还有一个问题没完。
我刚刚改的密码怎么是 2e782c85379a326e 了?难道是加密后的?
update user set password =password('12345') where host='%' and user='root';
select host,user,password from user;
结果是:
-------------------------------------------------|
|host | user | password |
|------------------------------------------------|
|localhost | root | null |
| % | root | 2e782c85379a326e |
-------------------------------------------------| 以上你的操作是完全正确的,
显示的 2e78....... 是经过 PASSWORD() 函数加密后的密文,
(localhost='%' ?? 应该是笔误吧! )
但是你在执行下面的语句之前,你还应该执行一句 FLUSH PRIVILEGES;mysql>mysql -h localhost -u root -p
enter password:12345
ERROR 1045:Access denied for user:'[email protected]'语句 FLUSH PRIVILEGES 是用于通知 MySQL 服务程序刷新授权表信息的
{
为什么要使用 FLUSH PRIVILEGES ,这一语句呢?
这是因为当 MySQL 启动时,它会读取一下用户授权表信息,并将它加载到内存中
当运行以后,有用户登录时,它将直接从内存中查找匹配的授权信息, 而如果你使用 SQL 数据操纵语句来对用户授权表进行修改时,
MySQL 并不会注意到授权表信息的变化,
只有发出 FLUSH PRIVILEGES 语句,
才能使 MySQL 重新加载授权表信息,
而如果你使用 GRANT ,则授权信息的更改就立即被 MySQL 接受,
因而也不再需要 执行 FLUSH PRIVILEGES 语句了.
}
2:在你执行了 FLUSH PRIVILEGES 语句后,再执行
mysql -h localhost -u root -p12345很不幸的事发生,你会依然得到一个出错信息
ERROR 1045:Access denied for user:'[email protected]'这是为什么呢,呵呵,因为你登录时的用户信息为
Host = localhost
User = root
Password = 12345你的登录信息匹配的是第一条记录,
而该条记录中密码是空,所以你登录时应该使用
mysql -h localhost -u root或者使用
mysql -h 192.168.0.1 -u root -p12345
使你的授权匹配第二条记录{
为什么 mysql -h localhost -u root 匹配的是用户授权表中的第一条记录
而不是第二条 Host = %, User = root, Password = 12345 的记录呢?? :)
这是由于 MySQL 在启动时读入用户授权表后,
在内存中对其进行了一次排序,
用户授权表
+----------+--------------+----------------------+
|host | user | password |
+----------+--------------+----------------------+
|localhost | root | null |
| % | root | 2e782c85379a326e |
+----------+--------------+----------------------+
排序后的结果仍是
+----------+--------------+----------------------+
|host | user | password |
+----------+--------------+----------------------+
|localhost | root | null |
| % | root | 2e782c85379a326e |
+----------+--------------+----------------------+
然后在你以 mysql -h localhost -u root 登录时,它会首先检查 Host 字段,
你的 Host = localhost ,所以就匹配 第一个用户信息!
用户授权表的排序规则 \ 当用户授权表中出现多个 Host = localhsot 的记录,
mysql -h localhost -u root 会匹配那一个呢?????
能不能你自己回答一下??
}
第2个问题:没听懂:)
% 并不是表示远程登陆,
它表示的是通配符,
192.168.0.% 通配 192.168.0.0 ~ 192.168.0.255
2:
如果用户表是这样的
+----------+----------+----------------------+
|host | user | password |
+----------+----------+----------------------+
|localhost | | |
|localhost | root | |
|localhost | root1 | |
+----------+----------+----------------------+现在这样登录
mysql -h localhost -u tttt 它匹配哪一个用户??
mysql -h localhost -u root 它匹配哪一个用户??