查看用户
MySQL 中的用户都存储在系统数据库 mysql 的 user 表中,如下所示:

select host,user,authentication_string from user;创建用户
create user [if not exists] '用户名'@'主机名' identified by '密码';可能实际在设置密码的时候,因为
mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出如下报错:ERROR 1819 (HY000): Your password does not satisfy the current policyrequirements解决方案:https://blog.csdn.net/zhanaolu4821/article/details/93622812
查看密码设置相关要求:
show variables like 'validate_password%';
☠** 注意事项:**
-
如果不指定【主机名】,则相当于
'user_name'@'%',%表示所有主机都可以连接到数据库 ,但是强烈建议不要这样设置,因为会导致严重的安全问题。 -
【主机名】可以通过子网掩码设置主机范围
-
198.0.0.0/255.0.0.0:表示A段网络中的任意一台主机 -
198.51.0.0/255.255.0.0:198.51:表示B段网络中的任意一台主机 -
198.51.100.0/255.255.255.0:198.51.100:表示C段网络中的任意一台主机 -
198.51.100.1:只包含特定IP地址的主机
-
-
从
MySQL8.0.23开始,指定为IPv4地址的主机值可以使用CIDR表示法写入,例如198.51.100.44/24 -
允许在
IP地址中使用%通配符,比如主机值%匹配任何主机名,198.51.100.%匹配198.51.100表示C段网络中的任何主机。但是MySQL8.0.35中已弃用,以后可能会删除。
修改密码
# root使用的指令
alter user '用户名'@'主机名' identified BY '新密码';
# 普通用户使用的指令
set password = password('新密码');删除用户
drop user '用户名'@'主机名';MySQL 内置权限
下图是 MySQL 内置支持的权限列表:

查看用户现有权限
show grants for '用户名'@'主机名';
或
select * from information_schema.USER_PRIVILEGES where GRANTEE = "'用户名'@'主机名'";授予权限
grant 权限类型 on 权限层级 to '用户名'@'主机名' [WITH GRANT OPTION];-
权限类型:指要授予的具体权限,比如SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等,也可以是ALL PRIVILEGES(所有权限)。 -
ON 权限层级:指定权限的作用范围,可以是:-
数据库级别:
database.*,表示对指定数据库的所有表。 -
表级别:
database.table,表示对指定数据库中的特定表。 -
列级别:
database.table(column),表示对指定表的特定列。
-
-
TO '用户名'@'主机名':-
'用户名':指定要授予权限的用户。 -
'主机名':指定用户可以从哪些主机连接到数据库。可以是具体的主机名(如localhost)、IP地址(如192.168.1.1),也可以是%(表示任何主机)。
-
-
[WITH GRANT OPTION](可选部分):- 如果加上
WITH GRANT OPTION,表示被授权的用户不仅可以使用这些权限,还可以将这些权限授予其他用户。
- 如果加上
| 权限名称 | 描述 |
|---|---|
| SELECT | 允许用户从表中检索数据 |
| INSERT | 允许用户向表中插入数据 |
| UPDATE | 允许用户更新表中的数据 |
| DELETE | 允许用户删除表中的数据 |
| CREATE | 允许用户创建新的数据库、表、视图等 |
| DROP | 允许用户删除数据库、表、视图等 |
| ALTER | 允许用户修改表的结构,如添加、删除或修改列 |
| INDEX | 允许用户创建或删除索引 |
| ALTER ROUTINE | 允许用户修改存储过程或函数 |
| CREATE ROUTINE | 允许用户创建存储过程或函数 |
| EXECUTE | 允许用户执行存储过程或函数 |
| FILE | 允许用户读取或写入服务器上的文件 |
| GRANT OPTION | 允许用户将自己拥有的权限授予其他用户 |
| REFERENCES | 允许用户创建外键约束 |
| RELOAD | 允许用户重新加载MySQL服务器的配置文件 |
| SHUTDOWN | 允许用户关闭MySQL服务器 |
| PROCESS | 允许用户查看当前运行的线程和查询 |
| SUPER | 允许用户执行一些高级操作,如杀死线程、更改全局变量等 |
| REPLICATION SLAVE | 允许用户从主服务器复制数据 |
| REPLICATION CLIENT | 允许用户查看主从复制的配置信息 |
举个例子:假设有一个数据库叫mydb,一个用户叫user1,主机名是localhost,要授予user1对mydb数据库的所有权限,并且允许他将权限授予其他用户,代码如下所示:
GRANT ALL PRIVILEGES ON mydb.* TO 'user1'@'localhost' WITH GRANT OPTION;回收权限
这里的权限类型和权限层级和上面是一样的!
revoke 权限类型 on 权限层级 from '用户名'@'主机名';刷新指令
flush privileges;