MySQL—修改数据库root用户密码

三种方式

  1. linux命令行执行mysqladmin客户端程序
  2. mysql命令行set password命令
  3. mysql命令行update命令 (推荐使用,避免多用户问题)

方式一:mysqladmin方式

格式

$ mysqladmin -uuser_name -p'oldPasswd' password 'newPasswd'

其中user_name即为用户名,oldPasswd即为旧密码,newPasswd即为新密码;

示例

$ mysqladmin -uroot -p'1qaz!QAZ' password 123456

方式二:set password方式

需要先通过mysql -uroot -p进入mysql命令行

格式

mysql> set password for user_name@localhost=password('newPasswd');
Query OK, 0 rows affected (0.94 sec)

其中user_name即为用户名,newPasswd即为新密码;

示例

mysql> set password for root@localhost = password('1qw2!QW@');

方式三:update命令

需要先通过mysql -uroot -p进入mysql命令行

格式

mysql> update mysql.user set password=password('newPasswd') where user='userName';
mysql> flush privileges;

其中user_name即为用户名,newPasswd即为新密码;

示例

mysql> update mysql.user set password=password('1qaz!QAZ') where user='root';
Query OK, 0 rows affected (0.94 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.94 sec)

Q & A

问题:修改密码后服务端生效,但是navicat还能使用旧密码连接mysql?

  其实mysql数据库中,我们所说的用户不仅仅只是'root',更多的是指root@localhostroot@%这种带有'userName'@'hostName'的才是具体的用户。
1)当我们使用:

mysql> set password for root@localhost=password('newPasswd');`

可能只是改了root@localhost这个用户,有可能还有root@%用户。
2)查看user表:

mysql> select host, user, password from mysql.user where user='root';

在这里插入图片描述
从user表中,我们可以看到root对应到多个host,使用之前的set语句可能我们只是更改了其中一个用户,我们可以通过update命令更新mysql.user表,全局更新所有root@hostName的密码;
3)所以,我们应该使用:

mysql> update mysql.user set password=password('newPasswd') where user='root';
Query OK, 1 row affected (0.11 sec)
Rows matched: 5  Changed: 1  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.94 sec)

这样可以全局改变所有带有root@的用户密码,再通过navicat使用旧密码连接数据库时,远程访问拒绝。

原文地址:https://www.cnblogs.com/Andya/p/12552162.html