目录
[1. 用户相关](#1. 用户相关)
[1.1 查看已存在用户的信息](#1.1 查看已存在用户的信息)
[1.2 创建新用户](#1.2 创建新用户)
[1.3 删除用户](#1.3 删除用户)
[1.4 修改用户登入密码](#1.4 修改用户登入密码)
[2. 权限相关](#2. 权限相关)
[2.1 给用户权限](#2.1 给用户权限)
[2.2 回收权限](#2.2 回收权限)
我们在MySQL的学习过程中一开始基本上都是使用root用户来进行各种操作的,但是其实这样是不好的,因为我们在以后工作的时候是不可能给你root用户来进行操作的,所以我们在这里要提前适应普通用户。
1. 用户相关
我们首先要学会查看用户的信息,再我看来这是第一步,接着我们在学会创建,销毁用户之类的操作。
1.1 查看已存在用户的信息
sql
use mysql;
sql
select host,user,authentication_string from user;
我们需要使用到上面两条指令来进行查看信息。
不知道各位有没有这个疑惑,就是我是查看用户信息又不是所有某一个数据库,为什么需要先use mysql呢?这是因为在mysql这个数据库系统里面,用户相关的各种信息也是存放在表里面的。
各位仔细看下面这张图片,这里面有三个用户,这三个用户都是系统自带的,分别是:
root@localhost:MySQL 的超级管理员用户,拥有最高权限(可以操作所有数据库、表、权限等),是我们日常管理数据库时常用的账号。
mysql.session@localhost:MySQL 内部服务使用的用户,主要用于系统进程之间的通信(比如 MySQL 的插件、内部管理操作),不能手动登录使用。
mysql.sys@localhost:MySQL 5.7 及以上版本新增的用户,用于管理系统视图(sys schema)(sys 库是 MySQL 提供的简化性能监控、运维管理的视图集合),同样是内部专用,不能手动登录。

字段解释:
host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
user: 用户名
authentication_string: 用户密码通过password函数加密后的
*_priv: 用户拥有的权限
1.2 创建新用户
代码:
sql
create user '用户名'@'登陆主机/ip' identified by '密码';
我们通过上面的代码就可以创建一个新用户。
在我们接下来的学习中我们创建新用户都是使用root账号来进行创建的,但是我们不可以误以为只有root账号可以创建新用户,有cheate user权限的普通用户也可以创建新用户,这个我们在后面会说到。
我们看下面这张图,这样我们就创建好一个用户。
PS:当我们使用root账号创建一个新用户的时候,这个新用户默认是没有权限的,也就是什么都做不了的,因为创建库和创建表以及select都是需要一定的权限的。
这边想要额外提一下,就是我们的那个登入主机的位置如果选的是localhost的话就是说这个账号只支持本地登入,也就是只有创建这个账号的这台设备可以登入这个用户。
如果是想要某一台设备可以登入的话,那么就在这个位置输入那台设备的ip。
如果是想要什么设备只要知道密码都可以登入的话,那么我们就在这个位置直接输入一个'%'就可以了。
1.3 删除用户
代码:
sql
drop user '用户名'@'主机名'
我们看,这样我们就可以把叫做'1'的本地登入的用户给删除了。
这一步是不需要密码的,也就是不需要'1'的密码,可以直接删除。

1.4 修改用户登入密码
这个的话又比较不同了,因为在这里可以分为用户自己修改密码和root用户来修改普通用户的密码。
用户自己修改密码:
sql
set password=password('新的密码');
如果是普通用户自己修改密码的话,我们需要先登入那个账号。
root用户来修改密码:
sql
set password for '用户名'@'主机名'=password('新的密码');
root的话直接指定需要修改哪一个就好了。
2. 权限相关
首先我们需要知道什么叫做权限。在MySQL中什么都是需要权限的,无论是创建查看数据库数据表或者创建删除用户,这些都是需要相应的权限我们才可以做到的。
相关的权限:
一、全局权限(作用于所有数据库)
全局权限存储在mysql.user表中,授权时用ON *.*指定:
-
ALL PRIVILEGES:所有权限(除GRANT OPTION外的全部权限,加上WITH GRANT OPTION则包含授权权限)。 -
CREATE USER:创建 / 删除用户、修改用户密码。 -
DROP USER:删除用户。 -
SUPER:超级权限(如 kill 进程、修改全局变量、日志管理)。 -
SHOW DATABASES:查看所有数据库列表。 -
RELOAD:重新加载权限表、刷新日志等。 -
SHUTDOWN:关闭 MySQL 服务。 -
PROCESS:查看所有进程(SHOW PROCESSLIST)。 -
FILE:读写服务器本地文件(如LOAD DATA INFILE)。
二、数据库权限(作用于指定数据库)
数据库权限存储在mysql.db表中,授权时用ON 数据库名.*指定:
-
CREATE:创建新数据库或表。 -
DROP:删除数据库或表。 -
ALTER:修改表结构(如ALTER TABLE)。 -
INDEX:创建 / 删除索引。 -
INSERT:插入数据到表。 -
DELETE:删除表中数据。 -
UPDATE:更新表中数据。 -
SELECT:查询表中数据。 -
REFERENCES:创建外键约束。 -
CREATE TEMPORARY TABLES:创建临时表。 -
LOCK TABLES:锁定表(用于事务)。 -
EXECUTE:执行存储过程 / 函数。
三、表权限(作用于指定表)
表权限存储在mysql.tables_priv表中,授权时用ON 数据库名.表名指定:
-
SELECT/INSERT/UPDATE/DELETE(同数据库权限,但仅作用于单表)。 -
ALTER:修改该表结构。 -
INDEX:该表的索引操作。 -
CREATE VIEW:基于该表创建视图。 -
SHOW VIEW:查看该表的视图定义。 -
TRIGGER:创建 / 触发该表的触发器。
四、列权限(作用于表中指定列)
列权限存储在mysql.columns_priv表中,授权时需指定列(如ON 库.表 (列1,列2)):
- 仅支持
SELECT/INSERT/UPDATE(对指定列的操作权限)。
五、存储对象权限(作用于存储过程 / 函数 / 视图)
-
EXECUTE:执行指定存储过程 / 函数。 -
ALTER ROUTINE:修改 / 删除指定存储过程 / 函数。 -
CREATE ROUTINE:创建存储过程 / 函数。 -
CREATE VIEW/SHOW VIEW:视图的创建 / 查看权限。
2.1 给用户权限
代码:
sql
GRANT ALTER ON *.* TO '用户名'@'登录位置';
sql
grant all [privileges] on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
sql
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
第一条代码的意思是授予一个用户修改所有表的权限。
第二个给指定用户授予 "指定库 / 对象" 的全部操作权限。
第三条是给一个用户关于某个库的权限。
identified by是可选, 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户。
2.2 回收权限
我们可以给一个用户权限,同时也可以回收用户的权限。
代码:
sql
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';