【数据库系列教程】MySQL用户管理和用户权限

一、用户管理

1.用户名格式

  • 用户名@客户端地址
  • 客户端地址:
    • IP地址 admin@192.168.1.1
    • 主机名 admin@node01.linux.com
    • 网段 admin@192.168.1.%
    • 所有主机 admin@%
    • 本机 admin@localhost

2.存储用户的表 mysql.user

  • user 用户名
  • host 登录地址
  • (5.7版本以后)authentication_string 密码
  • (5.6版本之前)password 密码
mysql> select user, host, authentication_string from mysql.user;
+-----------+-----------+-------------------------------------------+
| user      | host      | authentication_string                     |
+-----------+-----------+-------------------------------------------+
| root      | localhost | *F00AFD2CA41EF081905BE7FC7051A0D3D53B49AD |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+

3.创建用户(只能登录MySQL)

命令格式

create user 用户名@客户端地址 identified by '密码'

创建只允许本机登录的MySQL用户admin

mysql> create user 'admin'@"localhost" identified by "WWW.1.com";
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| admin     | localhost |
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
3 rows in set (0.00 sec)

创建远程连接用户admin

mysql> create user 'admin'@'192.168.140.11' identified by 'WWW.1.com';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;	#刷新用户表信息
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
远程用户验证
[root@localhost ~]# mysql -uadmin -pWWW.1.com -h <数据库服务器地址>

在数据库服务器查看都有哪些用户连接

mysql> show processlist;   
+--------+--------+----------------------+------+---------+------+----------+------------------+
| Id     | User   | Host                 | db   | Command | Time | State    | Info             |
+--------+--------+----------------------+------+---------+------+----------+------------------+
| 509975 | root   | localhost            | NULL | Query   |    0 | starting | show processlist |
| 509976 | martin | 192.168.140.11:33616 | NULL | Sleep   |   54 |          | NULL             |
+--------+--------+----------------------+------+---------+------+----------+------------------+

创建所有地址都可连接的admin用户

mysql> create user 'admin'@'%' identified by 'WWW.1.com';	#%为通配符
Query OK, 0 rows affected (0.00 sec)

4.删除用户

命令格式

drop user 用户名@客户端地址
mysql> drop user 'admin'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

5.修改用户密码

方法1

set password for 用户@地址 = PASSWORD("密码");	#PASSWORD()是MySQL自带的函数
mysql> set password for 'admin'@'192.168.140.11' = PASSWORD("WWW.2.com");
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

方法2

update 库.表 set authentication_string=PASSWORD("密码") where 条件
mysql> update mysql.user set authentication_string=PASSWORD("WWW.3.com") where user="admin" and host="192.168.140.11";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

方法3(一般用于重置root密码)

编辑配置文件
[root@localhost ~]# vim /etc/my.cnf

[mysqld]	#添加以下内容
skip-grant-tables=1	#跳过授权表

重启服务

[root@localhost ~]# systemctl restart mysqld 
回到Mysql使用update更新密码
[root@localhost ~]# mysql -uroot -p	#此时登录是不需要密码的
mysql> update mysql.user set authentication_string=PASSWORD("WWW.1.com") where user="root" and host="localhost";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
删除刚刚配置文件添加的字段
[root@localhost ~]# vim /etc/my.cnf
重启MySQl服务
[root@localhost ~]# systemctl restart mysqld

二、用户权限管理

1.查看用户权限

mysql> show grants for 'admin'@'192.168.140.11';
+------------------------------------------------+
| Grants for admin@192.168.140.11                |
+------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.140.11' |
+------------------------------------------------+
1 row in set (0.00 sec)

USAGE:默认最小的权限

2.用户授权

  • 几个基本权限:
    • create 创建
    • drop 删除
    • select 查询
    • update 更新
    • delete 删除
    • insert 插入
  • all 所有权限

命令格式

grant 权限,权限,权限 on 库名.表名 to 用户名 [identified by "密码"]
#[]内容为可写可不写
#在MySQL5.x版本可以使用上述格式命令直接创建用户,并且授权权限
mysql> grant select on jiaowu.tutors to 'admin'@'192.168.140.11';
mysql> flush privileges;

mysql> show grants for 'admin'@'192.168.140.11';

3.撤销权限(回收权限)

命令格式

revoke delete on 库.表 from 用户@地址;
mysql> revoke delete on jiaowu.students from 'admin'@"192.168.140.1";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'admin'@"192.168.140.1";
+----------------------------------------------------------------------+
| Grants for admin@192.168.140.1                                       |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'admin'@'192.168.140.1'                        |
| GRANT SELECT, DELETE ON `jiaowu`.`tutors` TO 'admin'@'192.168.140.1' |
| GRANT SELECT ON `jiaowu`.`students` TO 'admin'@'192.168.140.1'       |
+----------------------------------------------------------------------+
3 rows in set (0.00 sec)