之前已经提到过了,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