MySQL修改用户密码及重置root密码(一)

2014-11-24 15:37:55 · 作者: · 浏览: 5

数据库用户修改密码是DBA比较常见的工作之一。对于MySQL用户账户的密码修改,有几种不同的方式,推荐的方式使用加密函数来修改密码。本文主要描述了通过几种不同的方式来修改用户密码以及mysql root账户密码丢失(重置root密码)的处理方法。

1、密码修改的几种方法

a、可以在创建用户的时候指定密码,以及直接使用grant创建用户的时候指定密码。
   对于已经存在的用户直接使用grant方式也可以修改密码
如下:

--演示版本
root@localhost[(none)]> show variables like 'version%';  
+-------------------------+------------------------------+   
| Variable_name           | Value                        |  
+-------------------------+------------------------------+   
| version                 | 5.5.37                       |  
| version_comment         | MySQL Community Server (GPL) |  
| version_compile_machine | x86_64                       |  
| version_compile_os      | Linux                        |  
+-------------------------+------------------------------+   

--下面我们使用grant方式创建一个新帐户fred,并设定密码
root@localhost[(none)]> grant usage on *.* to 'fred'@'localhost' identified by 'fred';
Query OK, 0 rows affected (0.00 sec)

--查看刚刚创建的账户
root@localhost[(none)]> select host,user,password from mysql.user where user='fred';
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | fred | *6C69D17939B2C1D04E17A96F9B29B284832979B7 |
+-----------+------+-------------------------------------------+

--下面可以成功登陆mysql
SZDB:~ # mysql -ufred -pfred

fred@localhost[(none)]> 

b、使用set password方式来修改账户密码
--下面我们使用set password方式来设定密码
root@localhost[(none)]> set password for 'fred'@'localhost'=password('passwd');
Query OK, 0 rows affected (0.00 sec)

root@localhost[(none)]>
flush privileges; Query OK, 0 rows affected (0.00 sec) --再次登陆时,之前的密码已经失效,无法登陆 SZDB:~ # mysql -ufred -pfred ERROR 1045 (28000): Access denied for user 'fred'@'localhost' (using password: YES) --下面使用新密码登陆成功 SZDB:~ # mysql -ufred -ppasswd fred@localhost[(none)]> --检索数据库是否存在jack用户,如下密码为null root@localhost[(none)]> select host,user,password from mysql.user where user='jack'; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | localhost | jack | | +-----------+------+----------+ c、加密方式更新系统表user的password列 --我们尝试直接更新密码列(不使用加密函数方式) root@localhost[(none)]> update mysql.user set password='jack' where user='jack'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 --由于直接使用明文,因此系统表user列password显示为明文 root@localhost[(none)]> select host,user,password from mysql.user where user='jack'; +-----------+------+----------+ | host | user | password | +-----------+------+----------+ | localhost | jack | jack | +-----------+------+----------+ --Author : Leshami --Blog :http://blog.csdn.net/leshami root@localhost[(none)]> flush privileges; Query OK, 0 rows affected (0.02 sec) --此时无法登陆 SZDB:~ # mysql -ujack -pjack -h localhost ERROR 1045 (28000): Access denied for user 'jack'@'localhost' (using password: YES) --下面我们通过set方式来修改jack的密码,提示找不到jack用户 root@localhost[(none)]> set password for 'jack'@'localhost'=password('jack'); ERROR 1133 (42000): Can't find any matching row in the user table --我们切换到mysql数据库下尝试, root@localhost[(none)]> use mysql root@localhost[mysql]> set password for 'jack'@'localhost'=password('passwd'); --在mysql数据库下依旧无法更新用户jack的密码 ERROR 1133 (42000): Can't find any matching row in the user table --下面我们尝