![17ad0a3ae8c0c5b2861e8ae7cd9f2b40.png](https://i-blog.csdnimg.cn/blog_migrate/1a895c27e4fd17a76a0afed48cdb5c1d.png)
MySQL中的账号与权限管理
权限系统的工作原理
MySQL权限系统通过下面两个阶段进行认证:
1. 对连接的用户进行身份认证,合法的用户通过认证、不合法的用户拒绝连接。
2. 对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作。
对于身份,MySQL是通过IP地址
和用户名
联合进行确认的,例如MySQL安装默认创建的用户root@localhost
表示用户root只能从本地(localhost)进行连接才可以通过认证,此用户从其他任何主机对数据库进行的连接都将被拒绝。也就是说,同样的一个用户名,如果来自不同的IP地址,则MySQL将其视为不同的用户。
MySQL的权限表在数据库启动地时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了。
权限表
系统会用到名叫“mysql”数据库(安装MySQL时被创建)中user表作为权限表
我们看看user表的结构(注:本文示例使用的是MySQL5.7.25版本)
mysql> desc user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv |