为数据库用户改动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. javascript (十二)对象二

    JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. 属性和方法 属性是与对象相关的值. 方法是能够在对象上执行的动 ...

  2. Delphi中使用GDI+进行绘图(2)

    2)使用IGDIPlus接口 (1)下载安装所需软件 可以在以下地址下载IGDI+最新的安装程序. http://www.mitov.com/products/igdi+ www.igdiplus.o ...

  3. c++ try throw catch

    c++ try throw catch 这三者联合使用 , try { statement list; } catch( typeA arg ) { statement list; } catch( ...

  4. Windows XP环境下 搭建Android NDK环境

    搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygw ...

  5. Ajax 下拉列表联动显示

    一般处理程序文件 代码 using System;using System.Web;using System.Linq;using System.Data.Linq;using System.Text ...

  6. MySQL 关闭FOREIGN_KEY_CHECKS检查

    SET FOREIGN_KEY_CHECKS=0; truncate table QRTZ_BLOB_TRIGGERS; truncate table QRTZ_CALENDARS; truncate ...

  7. URAL 1056(树形DP)

    1056. Computer Net Time limit: 2.0 second Memory limit: 64 MB Background Computer net is created by ...

  8. hibernate级联保存问题,出错not-null property references a null or transient value

    Servlet.service() for servlet default threw exception org.hibernate.PropertyValueException: not-null ...

  9. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  10. 算法起步之动态规划LCS

    原文:算法起步之动态规划LCS 前一篇文章我们了解了什么是动态规划问题,这里我们再来看动态规划另一个经典问题,最长公共子序列问题(LCS),什么是子序列,我们定义:一个给定序列将其中的0个或者多个元素 ...