MySQL——用户权限和管理
目录
一:本节⽬标
二:应⽤场景
三:⽤⼾
3.1 查看⽤⼾
3.2 创建⽤⼾
3.2.1 语法
3.2.2 注意事项
3.2.3 ⽰例
3.4 修改密码
3.4.1 语法
3.5 删除⽤⼾
3.5.1 语法
3.5.2 ⽰例
四:权限与授权
4.1.1 语法
4.1.2 ⽰例
4.2 回收权限
4.2.1 语法
4.2.2:实例
一:本节⽬标
了解数据库的⽤⼾与常⽤操作
了解数据库权限与授权
二:应⽤场景
数据库服务安装成功后默认有⼀个root⽤⼾,可以新建和操纵数据库服务中管理的所有数据库。在真实的使⽤过程中,通常每个应⽤对应着⼀个数据库,我们只希望某个⽤⼾只能操纵和管理当前应⽤对应的那个数据库,⽽不能操纵和管理其他应⽤的数据库,这时就可以添加⼀个⽤⼾并指定⽤⼾的权限
如上图所⽰:
root 可以访问和操纵所有的数据库:DB1, DB2, DB3, DB4赋予某个数据库的所有权限包括增删改查
普通⽤⼾1 只能访问和操纵数据库DB1
普通⽤⼾2 只能访问和操纵数据库DB3只能查询被赋予查询权限的库和表
只读⽤⼾1 只能访问数据库DB3
只读⽤⼾2 只能访问数据库DB4root就是老大,可以对所有的库和表进行操作
在mysql中如果对数据进行某些操作,必须添加一个用户,并对用户赋予相应的权限。
三:⽤⼾
3.1 查看⽤⼾
MySQL的⽤⼾信息保存在mysql系统数据库的user表中,可以通过Select语句查看,如下所⽰选择数据库:
查看表
查看user表结构:
查看use中的记录:当前可以登录的主机v
navitact查看表结构
host: 允许登录的主机,相当于⽩名单,如果是localhost,表⽰只能从本机登陆
user: ⽤⼾名
_ priv: ⽤⼾拥有的权限
authentication_string: 加密后的⽤⼾密码
3.2 创建⽤⼾
3.2.1 语法
CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY'auth_string';
user 部分也就是用来登录MySQL的用户名
host_name 可以用来登录主机名或ip 可以起到一个白名单的作用,只有在指定的机器上才可以访问当前的MySQL,可以指定一个具体的机器或一个ip的范围'user'@'HOST'才是一个的用户的编码方式
3.2.2 注意事项
如果不指定host_name相当于'user_name'@'%', %表⽰所有主机都可以连接到数据库,强烈建议不要这样设置,因为会导致严重的安全问题
•
user_name和host_name分别⽤单引号包裹,如果写成'user_name@host_name',相当
于'user_name@host_name'@'%'
•
host_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地址的主机
•
从MySQL 8.0.23开始,指定为IPv4地址的主机值可以使⽤CIDR表⽰法写⼊,例如198.51.100.44/24
•
允许在IP地址中使⽤%通配符,⽐如,主机值'%'匹配任何主机名, 198.51.100.% 匹配
198.51.100 C段⽹络中的任何主机。MySQL 8.0.35中已弃⽤,以后可能会删除
3.2.3 ⽰例
我们先查询当前登录的用户是谁
然后添加用户并且设置密码
然后我们重新查询一下我们的用户:
我们的1和2就是我们新创建的用户思考一下 我们创建用户可以使用数据库吗?
不可以的哦 使用数据库需要有权限的。
3.4 修改密码
3.4.1 语法
为指定⽤⼾设置密码 【推荐】 ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';为指定⽤⼾设置密码 SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string';为当前登录⽤⼾设置密码 SET PASSWORD = 'auth_string';
3.5 删除⽤⼾
3.5.1 语法
DROP USER [IF EXISTS] 'user_name'@'host_name'[, ...]; 可以一次删除多个数据但是需要权限
3.5.2 ⽰例
删除⽤⼾'bit1'@'192.168.1.1/24' mysql> drop user 'bit1'@'192.168.1.1/24';
四:权限与授权
4.1.1 语法
grant priv_type[, priv_type ...] on priv_levelto 'user_name'@'host_name' [WITH GRANT OPTION] priv_type:根据类型,参考根据列表4.1中的Privilege列 priv_level: * | *.* | db_name.* | db_name.tbl_name | tbl_name,⽐如*.*表⽰所有数据库下的所 有表 'user_name'@'host_name':指定⽤⼾ [WITH GRANT OPTION]:可选,允许⽤⼾将⾃⼰的权限授权给其它⽤⼾
4.1.2 ⽰例
为bit@localhost⽤⼾授权于 java01 数据库的 select 权限
4.2 回收权限
4.2.1 语法
REVOKE [IF EXISTS] priv_type[, priv_type] ... ON priv_levelFROM 'user_name'@'host_name' [, 'user_name'@'host_name']