写点什么

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

作者:java易二三
  • 2023-08-11
    湖南
  • 本文字数:965 字

    阅读完需:约 3 分钟

三种方式

  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: 0mysql> flush privileges;Query OK, 0 rows affected (0.94 sec)
复制代码

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

用户头像

java易二三

关注

还未添加个人签名 2021-11-23 加入

还未添加个人简介

评论

发布
暂无评论
MySQL—修改数据库root用户密码_Java_java易二三_InfoQ写作社区