【MySQL】用户和权限管理
一、用户和权限
在数据库服务安装之后,会自带一个 root 用户,它是MySQL的超级管理员账户,拥有最高权限,可以新建和操作数据库服务中管理的所有数据库。
但是在实际应用中,我们更希望某个用户只能使用其对应管理和操作的那个数据库,对于其他的则数据库无法进行访问。这时候就可以创建一个用户并给予相关的权限来实现
二、用户管理
2.1 查看用户与权限
查看当前数据库可以看到有一个mysql库,里面储存了相关表、视图、存储过程数据库对象,也包括我们的用户
通过查看表结构就可以看到各种权限,删除、创建、修改等等
可以通过 Navicat 来查看用户表中的记录
- host:代表当前可以登录的主机
- user:代表了用户名
- aurhentication_string:被加密过后的用户密码
- 后面的字段代表着各种权限,Y具有权限,N没有权限
可以看到 root 老大哥拥有了所有的权限
使用命令对user表中的记录进行查询
select host,user, authentication_string from user\G;
-- \G 去掉查询时的边框
2.2 查看当前用户
# 语法
select user();
2.3 创建用户
# 语法
CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY 'auth_string';
其中 'user_name'@'host_name' 统一称为用户,user部分就是用来登录MYSQL的用户名,host部分是可以用来登录的主机名或IP(可以指定一个具体的机器或一个IP的范围),只有指定的机器才可以访问当前的MYSQL
- 如果不指定 host_name 相当于 'user_name'@'%' ,%表示所有主机都可以连接到数据库,这会导致严重的安全问题,所以不建议这种写法
- user_name 和 host_name 必须用单引号包裹,然后写成 'user_name@host_name'相当于 'user_name'@'%'
host_name 有以下四种写法:
- localhost 或 127.0.0.1 : 只允许从本机登录
- 192.168.100.1 :只包含特定的主机可以登录
- 192.168.100.0/255.255.255.0 :网络号为192.168.100.0的主机可以登录
- 192.168.100.23/24 : 与第二种范围一样,从MySQL8.0.23开始使用
2.4 修改密码
修改密码的前提依旧是有权限,例如root用户就可以为任何用户修改密码
# 语法
# 为指定用户设置密码
ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';# 为指定用户设置密码
SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string';# 为当前登录用户设置密码
SET PASSWORD = 'auth_string';
2.5 删除用户
有相应的权限可以一次删除多个用户
# 语法
DROP USER [IF EXISTS] 'user_name'@'host_name' [,...];
三、权限管理
3.1 可用权限摘要
MySQL官方说明文档:MySQL :: MySQL 5.7 参考手册 :: 6.2.2 MySQL 提供的权限https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
3.2 用户授权
# 语法
GRANT priv_type[,priv_type ...] ON priv_level
TO 'user_name'@'host_name' [WITH GRANT OPTION]
- priv_type:权限类型,参考3.1表中的 "特权" 列
- priv_level:可操作的表的范围,* 或 *.* 或 db_name.* ,*.*代表了数据库下的所有表
- 'user_name'@'host_name' :指定用户
- [WITH GRANT OPTION]:可选,允许用户将自己的权限授权给其他用户
如果授权后还是无法进行操作可以用以下命令刷新权限,或是重新登陆
flush privileges
3.3 权限回收
# 语法
REVOKE [IF EXISTS] priv_type[,priv_type...] ON priv_level
FROM 'user_name'@'host_name' [,'user_name'@'host_name'...]
[未完待续...]