为数据库用户改动password是DBA比較常见的工作之中的一个。对于MySQL用户账户的password改动,有几种不同的方式。推荐的方式使用加密函数来改动password。

本文主要描写叙述了通过几种不同的方式来改动用户password以及mysql root账户password丢失(重置rootpassword)的处理方法。

1、password改动的几种方法

a、能够在创建用户的时候指定password。以及直接使用grant创建用户的时候指定password。
对于已经存在的用户直接使用grant方式也能够改动password
例如以下: --演示版本号
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,并设定password
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) --再次登陆时。之前的password已经失效。无法登陆
SZDB:~ # mysql -ufred -pfred
ERROR 1045 (28000): Access denied for user 'fred'@'localhost' (using password: YES) --以下使用新password登陆成功
SZDB:~ # mysql -ufred -ppasswd fred@localhost[(none)]> --检索数据库是否存在jack用户。例如以下password为null
root@localhost[(none)]> select host,user,password from mysql.user where user='jack';
+-----------+------+----------+
| host | user | password |
+-----------+------+----------+
| localhost | jack | |
+-----------+------+----------+ c、加密方式更新系统表user的password列
--我们尝试直接更新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的password,提示找不到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 --以下我们尝试用password函数方式来更新password列
root@localhost[mysql]> update user set password=password('passwd') where user='jack'; --此方式更新成功
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0 root@localhost[mysql]> select host,user,password from user where user='jack'; --能够看到密码已经变成了密文
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | jack | *59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0 |
+-----------+------+-------------------------------------------+ root@localhost[mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec) --此时登陆成功
robin@SZDB:~> mysql -ujack -ppasswd jack@localhost[(none)]>

2、重置root帐户password

--假定此时我们的root帐户忘记或遗失了password,如以下的演示,我们给出的是xxx,不能登陆到mysql(真实的password为mysql)
SZDB:~ # mysql -uroot -pmysql root@localhost[(none)]> SZDB:~ # mysql -uroot -pxxx #忘记password,此时无法正常登录
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) --首先停止mysqlserver
SZDB:~ # service mysql stop
Shutting down MySQL.. done --使用--skip-grant-tables选项跳过授权表验证,
SZDB:~ # mysqld --help --verbose #获取mysqld帮助信息 --skip-grant-tables Start without grant tables. This gives all users FULL
ACCESS to all tables. --使用--skip-grant-tables启动mysqlserver
SZDB:~ # mysqld --skip-grant-tables --user=mysql &
[1] 10209
SZDB:~ # ps -ef | grep mysql
mysql 10209 14240 4 13:52 pts/0 00:00:00 mysqld --skip-grant-tables --user=mysql
root 10229 14240 0 13:53 pts/0 00:00:00 grep mysql
SZDB:~ # mysql root@localhost[(none)]> select user,host,password from mysql.user where user='root';
+-------+-----------+-------------------------------------------+
| user | host | password |
+-------+-----------+-------------------------------------------+
| root | % | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
| root | 127.0.0.1 | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
+-------+-----------+-------------------------------------------+ --更新mysql账户password为NULL或设定为新password,注设定为空password时能够直接设置。无须使用加密函数,2者等同
root@localhost[(none)]> update mysql.user set password='' where user='root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0 root@localhost[(none)]> select user,host,password from mysql.user where user='root';
+------+-----------+----------+
| user | host | password |
+------+-----------+----------+
| root | % | |
| root | 127.0.0.1 | |
+------+-----------+----------+ root@localhost[(none)]> exit
Bye #再次停止mysql数据库server
SZDB:~ # service mysql stop
Shutting down MySQL. done
[1]+ Done mysqld --skip-grant-tables --user=mysql
SZDB:~ # service mysql start
Starting MySQL.. done
SZDB:~ # mysql #重新启动后再次登陆。不再须要不论什么password root@localhost[(none)]>

3、小结
a、能够使用set password for 'user_name'@'host_name'=password('new_pwd')方式来改动密码  #更正@20141031
b、能够使用update系统表方式,update user set password=password('passwd') where user='user_name'
       注: 对于user表password类,假设不用password函数的话。导致更新后无法登陆。
            但假设将账户更新为空密码,能够使用加密函数。也能够不使用,2者等同。
c、也能够在用户创建后直接使用grant方式来更新用户密码。

d、相应root密码丢失或须要重置root密码的情形,须要使用系统选项--skip-grant-tables启动server后进行重置。
e、有关mysql权限及用户管理。创建用户时指定密码,请參考:MySQL 用户与权限管理

idkey=e61fdd22421b38cb5eef12db3c564ac0b5840f0f5cae4958e8b646740a79e680" target="_blank">

MySQL 改动用户password及重置rootpassword的更多相关文章

  1. mysql改动用户password

    登录root用户 用root用户登录控制台. use mysql use mysql,mysql是mysql数据库自己主动创建的一个数据库. 改动user表的数据 update user set pa ...

  2. [加入用户]解决useradd 用户后没有加入用户Home文件夹的情况,Linux改变文件或文件夹的訪问权限命令,linux改动用户password,usermod的ysuum安装包。飞

    usermod的yum安装包: shadow-utils 将nobody用户加入到nogroup 组: usermod -g nogroup nobody cat /etc/passwd|grep n ...

  3. VisualSVN Server 改动用户password

    VisualSVN Server是很方便好用的SVNserver端软件.但有个问题,你在server端创建了usernamepassword后,用户无法自己改动password.据说VisualSVN ...

  4. Mysql—修改用户密码(重置密码)

    1.登录mysql [root@localhost ~]# mysql -uroot -p123456 [root@localhost ~]# mysql -hlocalhost -uroot -p1 ...

  5. MediaWiki怎样重置用户password

    今天.弄mediawiki因为一个周末另一夜没有睡觉导致忘记password了(欢迎吐槽~) 就開始折腾之旅,本来以为能够直接执行一条sql语句就都搞定了结果...依照网上大多数讲述的 我已经找不到原 ...

  6. linux上MySQL改动password的各种方法,yc整理

    MySQL改动password的各种方法 整理了下面四种在MySQL中改动rootpassword的方法,可能对大家有所帮助! 方法1: 用SET PASSWORD命令 mysql -uroot my ...

  7. Mysql 用户root密码重置

    Asterisk安装完成之后,接手新的Asterisk系统后不清楚Mysql的root账号密码. 重新重置mysql的root密码的方式 先查看mysql的版本号. 我的测试环境下的mysql版本为5 ...

  8. 转:linux环境mysql root用户密码重置

    经常设置了mysql的root密码,就忘记掉了,这种事还是经常发生的.转自他人(http://www.osyunwei.com/archives/2014.html),权做笔记.linux环境下,解决 ...

  9. 详解MySQL的用户密码过期功能

    这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下   Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...

随机推荐

  1. 转载【浅谈ThreadPool 线程池】

    浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

  2. PowerShell与Unix Shell对比:八大实例

    PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...

  3. 一次ORA-03113错误解决

    ---------------------------------------------------------------------------- -----------------ORA错误处 ...

  4. golang使用pprof检查goroutine泄露

    有一段时间,我们的推送服务socket占用非常不正常,我们自己统计的同一时候在线就10w的用户,可是占用的socket居然达到30w,然后查看goroutine的数量,发现已经60w+. 每一个用户占 ...

  5. 线程同步辅助类——Exchanger

    下面是java6中文API对Exchanger的解释: 能够在对中对元素进行配对和交换的线程的同步点.每一个线程将条目上的某个方法呈现给 exchange 方法.与伙伴线程进行匹配,而且在返回时接收其 ...

  6. [容斥原理] zoj 3556 How Many Sets I

    主题链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4535 How Many Sets I Time Limit: 2 ...

  7. hibernate学习(一)

    一.准备工作:导入jar包 1.hibernate的jar包 位置: hibernate-release-5.0.2.Final\hibernate-release-5.0.2.Final\lib\r ...

  8. IOCP模型与网络编程

    IOCP模型与网络编程 一.前言:        在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模 ...

  9. POJ 2418 Hardwood Species( AVL-Tree )

    #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> ...

  10. IE与FF脚本兼容性问题

    (1) window.event: 表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象 (2) 获取事件源 IE用srcElement获取事件源,而FF用target获取 ...