MySQL入门之(八)设置用户密码并删除匿名用户

之前已经提到过了,MySQL默认情况下已经创建了一个没有密码的”root”用户,”root”用户权限非常高我们使用”root”用户可以执行任何操作,如:删除所有数据库。因此有必要为”root”设置一个密码,这里的”root”用户仅用来管理数据库,不建议把它当作一个普通的用户来使用。

设置”root”用户密码

让我们在命令行继续执行以下代码 — 从”mysql”数据库的”user”表中查询所有用户及密码 — “;”作为命令的结束符

mysql> SELECT host, user, password FROM mysql.user;
+-----------+------+----------+
| host      | user | password |
+-----------+------+----------+
| localhost | root |          |
| 127.0.0.1 | root |          |
| ::1       | root |          |
| localhost |      |          |
+-----------+------+----------+
4 rows in set (0.09 sec)

— 为’root’@’127.0.0.1’设置密码,将xxxx替换成你的密码

— 注意字符串密码一定要在前后加上单引号’

mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = password('xxxx');
Query OK, 0 rows affected (0.00 sec)

— 为’root’@’localhost’设置密码

mysql> SET PASSWORD FOR 'root'@'localhost' = password('xxxx');
Query OK, 0 rows affected (0.00 sec)

— 为’root’@’::1’设置密码

mysql> SET PASSWORD FOR 'root'@'::1' = password('xxxx');
Query OK, 0 rows affected (0.00 sec)

— 此处再次查询用户名和密码 — 此处的密码是采用密文的形式存储的

mysql> SELECT host, user, password FROM mysql.user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| 127.0.0.1 | root | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| ::1       | root | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| localhost |      |                                           |
+-----------+------+-------------------------------------------+
4 rows in set (0.00 sec)

— 退出并终止客户端程序

mysql> quit
Bye

解释说明

SELECT host, user, password FROM mysql.user;

该命令将查询表”user”(”mysql”数据库)中的所有用户,你可以通过<数据库>.<表名>的方式引用,如:mysql.user。从中我们可以看出默认情况下MySQL内置了4个用户:

'root'@'localhost'
'root'@'127.0.0.1'
'root'@'::1'
''@'localhost' – 此处为匿名用户

以上用户都未设置用户密码。这里我们需要注意的是MySQL通过三个属性唯一标识一个用户:用户名、密码和IP地址(此处为客户端的IP地址),例如:’root’用户只能从localhost,127.0.0.1或IPv6::1上进行登录,而不允许从其他地址上登录。

SQL命令可以跨越多行,我们使用”;”作为命令的结束符,否则当我们键入回车后可以继续输入SQL命令,输入”;”表名执行命令,或’\c’取消当前命令,例如:

mysql> SELECT host, user, password FROM mysql.user;
......

— 分号”;”是命令的结束符,它的作用是将命令发送到服务器端执行。

mysql> SELECT host, user, password FROM mysql.user
    -> ;
......

— 第一行命令并未完成,我们将分号”;”作为第二行的结束符,回车后将命令发送至服务器端。

mysql> SELECT
 -> host, user, password
 -> FROM mysql.user;
......

— 也可以将SQL命令拆分成多行,最后用分号”;”作为结束符。

mysql> SELECT host, u \c

— “\c”表明取消当前SQL命令,SQL命令将不发送至服务器。

SET PASSWORD FOR 'root'@'localhost' = password('xxxx');

你可以使用”set password”命令为’root’@’localhost’, ‘root’@’127.0.0.1’和’root’@’::1’设置密码,此处的xxxx就是你的密码。”localhost”是一个特殊的hostname,他意味着本地”loop-back”(如:服务器与客户端运行在同一台设备上),还有两个IP地址,一个是IPv4的127.0.0.1,另一个是IPv6的::1。

我们可以通过”quit”,”exit”或者输入ctrl+c命令终止客户端程序。 在客户端的命令行内我们可以通过键入”help”或”\h”命令获取帮助。

使用密码启动客户端程序

我们刚刚为”root”用户设置了密码,现在我们在使用客户端进行登录时我们就必须要指定”-p”选项了。此时在控制台将会提示我们输入密码:

— 将当前目录切换至\bin

D:\Courses\MySQL\tools\mysql\bin> mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor.
......

— 客户端已经启动,这里我们随时输入SQL命令了

mysql>

删除匿名用户

考虑到安全因素,这里我们把匿名用户(即用户名为空的用户)删除掉:

mysql> DROP USER ''@'localhost';
mysql> SELECT host, user, password FROM mysql.user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| 127.0.0.1 | root | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| ::1       | root | *XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
+-----------+------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql> quit