第
03
章
_
用户与权限管理
1.
用户管理
1.1
登录
MySQL
服务器
启动
MySQL
服务后,可以通过
mysql
命令来登录
MySQL
服务器,命令如下:
下面详细介绍命令中的参数:
-
h
参数
后面接主机名或者主机
IP
,
hostname
为主机,
hostIP
为主机
IP
。
-
P
参数
后面接
MySQL
服务的端口,通过该参数连接到指定的端口。
MySQL
服务的默认端口是
3306
,
不使用该参数时自动连接到
3306
端口,
port
为连接的端口号。
-
u
参数
后面接用户名,
username
为用户名。
-
p
参数
会提示输入密码。
DatabaseName
参数
指明登录到哪一个数据库中。如果没有该参数,就会直接登录到
MySQL
数据库
中,然后可以使用
USE
命令来选择数据库。
-
e
参数
后面可以直接加
SQL
语句。登录
MySQL
服务器以后即可执行这个
SQL
语句,然后退出
MySQL
服务器。
举例:
1.2
创建用户
CREATE USER
语句的基本语法形式如下:
用户名参数表示新建用户的账户,由
用户(
User
)
和
主机名(
Host
)
构成;
“[ ]”
表示可选,也就是说,可以指定用户登录时需要密码验证,也可以不指定密码验证,这样用户
可以直接登录。不过,不指定密码的方式不安全,不推荐使用。如果指定密码值,这里需要使用
IDENTIFIED BY
指定明文密码值。
CREATE USER
语句可以同时创建多个用户。
举例:
mysql –h hostname|hostIP –P port –u username –p DatabaseName –e
"SQL
语句
"
mysql -uroot -p -hlocalhost -P3306 mysql -e
"select host,user from user"
CREATE USER
用户名
[IDENTIFIED
BY
'
密码
'
][,
用户名
[IDENTIFIED
BY
'
密码
'
]];
CREATE USER
zhang3 IDENTIFIED
BY
'123123'
;
#
默认
host
是
%
CREATE USER
'kangshifu'
@'localhost' IDENTIFIED BY '123456'
;
1.3
修改用户
修改用户名:
1.4
删除用户
方式
1
:使用
DROP
方式删除(推荐)
使用
DROP USER
语句来删除用户时,必须用于
DROP USER
权限。
DROP USER
语句的基本语法形式如下:
举例:
方式
2
:使用
DELETE
方式删除
执行完
DELETE
命令后要使用
FLUSH
命令来使用户生效,命令如下:
举例:
注意:不推荐通过
DELETE FROM USER u WHERE USER='li4'
进行删除,系统会有残留信息保
留。而
drop user
命令会删除用户以及对应的权限,执行命令后你会发现
mysql.user
表和
mysql.db
表
的相应记录都消失了。
UPDATE
mysql
.user
SET USER
=
'li4'
WHERE USER
=
'wang5'
;
FLUSH PRIVILEGES
;
DROP USER user
[,
user
]…;
DROP USER
li4 ;
#
默认删除
host
为
%
的用户
DROP USER
'kangshifu'
@'localhost'
;
DELETE FROM
mysql
.user
WHERE
Host=’hostname’
AND User
=’username’;
FLUSH PRIVILEGES
;
DELETE FROM
mysql
.user
WHERE
Host=
'localhost'
AND User
=
'Emily'
;
FLUSH PRIVILEGES
;
1.5
设置当前用户密码
旧的写法如下
:
这里介绍
推荐的写法
:
1.
使用
ALTER USER
命令来修改当前用户密码
用户可以使用
ALTER
命令来修改自身密码,如下语句代表修
改当前登录用户的密码。基本语法如下:
2.
使用
SET
语句来修改当前用户密码
使用
root
用户登录
MySQL
后,可以使用
SET
语句来修改密码,具体
SQL
语句如下:
该语句会自动将密码加密后再赋给当前用户。
1.6
修改其它用户密码
1.
使用
ALTER
语句来修改普通用户的密码
可以使用
ALTER USER
语句来修改普通用户的密码。基本语法形
式如下:
2.
使用
SET
命令来修改普通用户的密码
使用
root
用户登录到
MySQL
服务器后,可以使用
SET
语句来修改普
通用户的密码。
SET
语句的代码如下:
3.
使用
UPDATE
语句修改普通用户的密码(不推荐)
1.7 MySQL8
密码管理
(
了解
)
1.
密码过期策略
在
MySQL
中,数据库管理员可以
手动设置
账号密码过期,也可以建立一个
自动
密码过期策略。
过期策略可以是
全局的
,也可以为
每个账号
设置单独的过期策略。
练习:
方式①:使用
SQL
语句更改该变量的值并持久化
方式②:配置文件
my.cnf
中进行维护
#
修改当前用户的密码:(
MySQL5.7
测试有效)
SET PASSWORD
=
PASSWORD
(
'123456'
);
ALTER USER USER
() IDENTIFIED
BY
'new_password'
;
SET PASSWORD
=
'new_password'
;
ALTER USER user
[IDENTIFIED
BY
'
新密码
'
]
[,
user
[IDENTIFIED
BY
'
新密码
'
]]…;
SET PASSWORD FOR
'username'
@'hostname'='new_password'
;
UPDATE
MySQL
.user
SET
authentication_string=
PASSWORD
(
"123456"
)
WHERE User
=
"username"
AND
Host =
"hostname"
;
ALTER USER user PASSWORD
EXPIRE;
ALTER USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE;
SET
PERSIST default_password_lifetime =
180
;
#
建立全局策略,设置密码每隔
180
天过期
手动设置指定时间过期方式
2
:单独设置
每个账号既可延用全局密码过期策略,也可单独设置策略。在
CREATE USER
和
ALTER USER
语句上加
入
PASSWORD EXPIRE
选项可实现单独设置策略。下面是一些语句示例。
2.
密码重用策略
手动设置密码重用方式
1
:全局
方式①:使用
SQL
方式②:
my.cnf
配置文件
手动设置密码重用方式
2
:单独设置
[mysqld]
default_password_lifetime
=
180 #
建立全局策略,设置密码每隔
180
天过期
#
设置
kangshifu
账号密码每
90
天过期:
CREATE USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE
INTERVAL
90
DAY;
ALTER USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE
INTERVAL
90
DAY;
#
设置密码永不过期:
CREATE USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE NEVER;
ALTER USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE NEVER;
#
延用全局密码过期策略:
CREATE USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE
DEFAULT
;
ALTER USER
'kangshifu'
@'localhost'
PASSWORD
EXPIRE
DEFAULT
;
SET
PERSIST password_history =
6
;
#
设置不能选择最近使用过的
6
个密码
SET
PERSIST password_reuse_interval =
365
;
#
设置不能选择最近一年内的密码
[mysqld]
password_history
=
6
password_reuse_interval
=
365
#
不能使用最近
5
个密码:
CREATE USER
'kangshifu'
@'localhost'
PASSWORD
HISTORY
5
;
ALTER USER
'kangshifu'
@'localhost'
PASSWORD
HISTORY
5
;
#
不能使用最近
365
天内的密码:
CREATE USER
'kangshifu'
@'localhost'
PASSWORD
REUSE
INTERVAL
365
DAY;
ALTER USER
'kangshifu'
@'localhost'
PASSWORD
REUSE
INTERVAL
365
DAY;
#
既不能使用最近
5
个密码,也不能使用
365
天内的密码
CREATE USER
'kangshifu'
@'localhost'
PASSWORD
HISTORY
5
PASSWORD
REUSE
INTERVAL
365
DAY;
ALTER USER
'kangshifu'
@'localhost'
2.
权限管理
2.1
权限列表
MySQL
到底都有哪些权限呢?
(
1
)
CREATE
和
DROP
权限
,可以创建新的数据库和表,或删除(移掉)已有的数据库和表。如果将
MySQL
数据库中的
DROP
权限授予某用户,用户就可以删除
MySQL
访问权限保存的数据库。 (
2
)
SELECT
、
INSERT
、
UPDATE
和
DELETE
权限
允许在一个数据库现有的表上实施操作。 (
3
)
SELECT
权限
只有在它们真正从一个表中检索行时才被用到。 (
4
)
INDEX
权限
允许创建或删除索引,
INDEX
适用于已
有的表。如果具有某个表的
CREATE
权限,就可以在
CREATE TABLE
语句中包括索引定义。 (
5
)
ALTER
权
限
可以使用
ALTER TABLE
来更改表的结构和重新命名表。 (
6
)
CREATE ROUTINE
权限
用来创建保存的
程序(函数和程序),
ALTER ROUTINE
权限用来更改和删除保存的程序,
EXECUTE
权限
用来执行保存的
程序。 (
7
)
GRANT
权限
允许授权给其他用户,可用于数据库、表和保存的程序。 (
8
)
FILE
权限
使用
户可以使用
LOAD DATA INFILE
和
SELECT ... INTO OUTFILE
语句读或写服务器上的文件,任何被授予
FILE
权
限的用户都能读或写
MySQL
服务器上的任何文件(说明用户可以读任何数据库目录下的文件,因为服务
器可以访问这些文件)。
2.2
授予权限的原则
权限控制主要是出于安全因素,因此需要遵循以下几个
经验原则
:
1
、只授予能
满足需要的最小权限
,防止用户干坏事。比如用户只是需要查询,那就只给
select
权限就可
以了,不要给用户赋予
update
、
insert
或者
delete
权限。
2
、创建用户的时候
限制用户的登录主机
,一般是限制成指定
IP
或者内网
IP
段。
3
、为每个用户
设置满足密码复杂度的密码
。
4
、
定期清理不需要的用户
,回收权限或者删除用户。
2.3
授予权限
给用户授权的方式有
2
种,分别是通过把
角色赋予用户给用户授权
和
直接给用户授权
。用户是数据库的
使用者,我们可以通过给用户授予访问数据库中资源的权限,来控制使用者对数据库的访问,消除安全
隐患。
授权命令:
该权限如果发现没有该用户,则会直接新建一个用户。
比如:
给
li4
用户用本地命令行方式,授予
atguigudb
这个库下的所有表的插删改查的权限。
PASSWORD
HISTORY
5
PASSWORD
REUSE
INTERVAL
365
DAY;
mysql>
show privileges
;
GRANT
权限
1,
权限
2,…
权限
n
ON
数据库名称
.
表名称
TO
用户名
@
用户地址
[IDENTIFIED
BY
‘
密码口令
’];
GRANT SELECT
,
INSERT
,
DELETE
,
UPDATE ON
atguigudb.*
TO
li4
@localhost
;
授予通过网络方式登录的
joe
用户 ,对所有库所有表的全部权限,密码设为
123
。注意这里唯独不包
括
grant
的权限
我们在开发应用的时候,经常会遇到一种需求,就是要根据用户的不同,对数据进行横向和纵向的
分组。
所谓横向的分组,就是指用户可以接触到的数据的范围,比如可以看到哪些表的数据;
所谓纵向的分组,就是指用户对接触到的数据能访问到什么程度,比如能看、能改,甚至是
删除。
2.4
查看权限
查看当前用户权限
查看某用户的全局权限
2.5
收回权限
收回权限就是取消已经赋予用户的某些权限。
收回用户不必要的权限可以在一定程度上保证系统的安全
性。
MySQL
中使用
REVOKE
语句
取消用户的某些权限。使用
REVOKE
收回权限之后,用户账户的记录将从
db
、
host
、
tables_priv
和
columns_priv
表中删除,但是用户账户记录仍然在
user
表中保存(删除
user
表中
的账户记录使用
DROP USER
语句)。
注意:在将用户账户从
user
表删除之前,应该收回相应用户的所有权限。
收回权限命令
举例
注意:
须用户重新登录后才能生效
3.
权限表
GRANT ALL PRIVILEGES ON
*.*
TO
joe
@'%' IDENTIFIED BY '123'
;
SHOW GRANTS
;
#
或
SHOW GRANTS FOR CURRENT_USER
;
#
或
SHOW GRANTS FOR CURRENT_USER
();
SHOW GRANTS FOR
'user'
@'
主机地址
'
;
REVOKE
权限
1,
权限
2,…
权限
n
ON
数据库名称
.
表名称
FROM
用户名
@
用户地址
;
#
收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON
*.*
FROM
joe
@'%'
;
#
收回
mysql
库下的所有表的插删改查权限
REVOKE SELECT
,
INSERT
,
UPDATE
,
DELETE ON
mysql.*
FROM
joe
@localhost
;
3.1 user
表
user
表是
MySQL
中最重要的一个权限表,
记录用户账号和权限信息
,有
49
个字段。如下图:
这些字段可以分成
4
类,分别是范围列(或用户列)、权限列、安全列和资源控制列。
1.
范围列(或用户列)
host
:
表示连接类型
%
表示所有远程通过
TCP
方式的连接
IP
地址
如
(192.168.1.2
、
127.0.0.1)
通过制定
ip
地址进行的
TCP
方式的连接
机器名
通过制定网络中的机器名进行的
TCP
方式的连接
::1
IPv6
的本地
ip
地址,等同于
IPv4
的
127.0.0.1
localhost
本地方式通过命令行方式的连接 ,比如
mysql -u xxx -p xxx
方式的连接。
user
:
表示用户名,同一用户通过不同方式链接的权限是不一样的。
password
:
密码
所有密码串通过
password(
明文字符串
)
生成的密文字符串。
MySQL 8.0
在用户管理方面增加了
角色管理,默认的密码加密方式也做了调整,由之前的
SHA1
改为了
SHA2
,不可逆 。同时
加上
MySQL 5.7
的禁用用户和用户过期的功能,
MySQL
在用户管理方面的功能和安全性都较之
前版本大大的增强了。
mysql 5.7
及之后版本的密码保存到
authentication_string
字段中不再使用
password
字
段。
2.
权限列
Grant_priv
字段
表示是否拥有
GRANT
权限
Shutdown_priv
字段
表示是否拥有停止
MySQL
服务的权限
Super_priv
字段
表示是否拥有超级权限
Execute_priv
字段
表示是否拥有
EXECUTE
权限。拥有
EXECUTE
权限,可以执行存储过程和函数。
Select_priv , Insert_priv
等
为该用户所拥有的权限。
3.
安全列
安全列只有
6
个字段,其中两个是
ssl
相关的(
ssl_type
、
ssl_cipher
),用于
加密
;两个是
x509
相关的(
x509_issuer
、
x509_subject
),用于
标识用户
;另外两个
Plugin
字段用于
验证用户身份
的插件,
该字段不能为空。如果该字段为空,服务器就使用内建授权验证机制验证用户身份。
4.
资源控制列
资源控制列的字段用来
限制用户使用的资源
,包含
4
个字段,分别为:
①
max_questions
,用户每小时允许执行的查询操作次数; ②
max_updates
,用户每小时允许执行的更新
操作次数; ③
max_connections
,用户每小时允许执行的连接操作次数; ④
max_user_connections
,用户
允许同时建立的连接次数。
查看字段:
查看用户
,
以列的方式显示数据:
查询特定字段:
DESC
mysql
.user
;
SELECT
*
FROM
mysql
.user
\G;
SELECT
host,user,authentication_string,select_priv,insert_priv,drop_priv
FROM
mysql
.user
;
3.2 db
表
使用
DESCRIBE
查看
db
表的基本结构:
1.
用户列
db
表用户列有
3
个字段,分别是
Host
、
User
、
Db
。这
3
个字段分别表示主机名、用户名和数据库
名。表示从某个主机连接某个用户对某个数据库的操作权限,这
3
个字段的组合构成了
db
表的主键。
2.
权限列
Create_routine_priv
和
Alter_routine_priv
这两个字段决定用户是否具有创建和修改存储过程的权限。
3.3 tables_priv
表和
columns_priv
表
tables_priv
表用来
对表设置操作权限
,
columns_priv
表用来对表的
某一列设置权限
。
tables_priv
表和
columns_priv
表的结构分别如图:
tables_priv
表有
8
个字段,分别是
Host
、
Db
、
User
、
Table_name
、
Grantor
、
Timestamp
、
Table_priv
和
Column_priv
,各个字段说明如下:
Host
、
Db
、
User
和
Table_name
四个字段分别表示主机名、数据库名、用户名和表名。
Grantor
表示修改该记录的用户。
Timestamp
表示修改该记录的时间。
Table_priv
表示对象的操作权限。包括
Select
、
Insert
、
Update
、
Delete
、
Create
、
Drop
、
Grant
、
References
、
Index
和
Alter
。
Column_priv
字段表示对表中的列的操作权限,包括
Select
、
Insert
、
Update
和
References
。
3.4 procs_priv
表
procs_priv
表可以对
存储过程和存储函数设置操作权限
,表结构如图:
DESCRIBE
mysql
.db
;
desc
mysql
.tables_priv
;
desc
mysql
.columns_priv
;
desc
mysql
.procs_priv
;
4.
访问控制
(
了解
)
4.1
连接核实阶段
当用户试图连接
MySQL
服务器时,服务器基于用户的身份以及用户是否能提供正确的密码验证身份来确
定接受或者拒绝连接。即客户端用户会在连接请求中提供用户名、主机地址、用户密码,
MySQL
服务器
接收到用户请求后,会
使用
user
表中的
host
、
user
和
authentication_string
这
3
个字段匹配客户端提供信
息
。
服务器只有在
user
表记录的
Host
和
User
字段匹配客户端主机名和用户名,并且提供正确的密码时才接受
连接。
如果连接核实没有通过,服务器就完全拒绝访问
;
否则,服务器接受连接,然后进入阶段
2
等待
用户请求。
4.2
请求核实阶段
一旦建立了连接,服务器就进入了访问控制的阶段
2
,也就是请求核实阶段。对此连接上进来的每个请
求,服务器检查该请求要执行什么操作、是否有足够的权限来执行它,这正是需要授权表中的权限列发
挥作用的地方。这些权限可以来自
user
、
db
、
table_priv
和
column_priv
表。
确认权限时,
MySQL
首先
检查
user
表
,如果指定的权限没有在
user
表中被授予,那么
MySQL
就会继续
检
查
db
表
,
db
表是下一安全层级,其中的权限限定于数据库层级,在该层级的
SELECT
权限允许用户查看指
定数据库的所有表中的数据;如果在该层级没有找到限定的权限,则
MySQL
继续
检查
tables_priv
表
以
及
columns_priv
表
,如果所有权限表都检查完毕,但还是没有找到允许的权限操作,
MySQL
将
返回错
误信息
,用户请求的操作不能执行,操作失败。
提示:
MySQL
通过向下层级的顺序(从
user
表到
columns_priv
表)检查权限表,但并不是所有的权
限都要执行该过程。例如,一个用户登录到
MySQL
服务器之后只执行对
MySQL
的管理操作,此时只
涉及管理权限,因此
MySQL
只检查
user
表。另外,如果请求的权限操作不被允许,
MySQL
也不会继
续检查下一层级的表。
5.
角色管理
5.1
角色的理解
引入角色的目的是
方便管理拥有相同权限的用户
。
恰当的权限设定,可以确保数据的安全性,这是至关
重要的
。
5.2
创建角色
创建角色使用
CREATE ROLE
语句,语法如下:
角色名称的命名规则和用户名类似。如果
host_name
省略,默认为
%
,
role_name
不可省略
,不可为
空。
练习:我们现在需要创建一个经理的角色,就可以用下面的代码:
5.3
给角色赋予权限
创建角色之后,默认这个角色是没有任何权限的,我们需要给角色授权。给角色授权的语法结构是:
上述语句中
privileges
代表权限的名称,多个权限以逗号隔开。可使用
SHOW
语句查询权限名称,图
11-43
列出了部分权限列表。
练习
1
:我们现在想给经理角色授予商品信息表、盘点表和应付账款表的只读权限,就可以用下面的代码
来实现:
CREATE
ROLE
'role_name'
[
@'host_name'] [,'role_name'[@'host_name'
]]...
CREATE
ROLE
'manager'
@'localhost'
;
GRANT privileges ON table_name TO
'role_name'
[
@'host_name'
];
SHOW PRIVILEGES
\G
;
5.4
查看角色的权限
赋予角色权限之后,我们可以通过
SHOW GRANTS
语句,来查看权限是否创建成功了:
只要你创建了一个角色,系统就会自动给你一个
“
USAGE
”
权限,意思是
连接登录数据库的权限
。代码的
最后三行代表了我们给角色
“manager”
赋予的权限,也就是对商品信息表、盘点表和应付账款表的只读权
限。
结果显示,库管角色拥有商品信息表的只读权限和盘点表的增删改查权限。
5.5
回收角色的权限
角色授权后,可以对角色的权限进行维护,对权限进行添加或撤销。添加权限使用
GRANT
语句,与角色
授权相同。撤销角色或角色权限使用
REVOKE
语句。
修改了角色的权限,会影响拥有该角色的账户的权限。
撤销角色权限的
SQL
语法如下:
练习
1
:撤销
school_write
角色的权限。 (
1
)使用如下语句撤销
school_write
角色的权限。
(
2
)撤销后使用
SHOW
语句查看
school_write
对应的权限,语句如下。
5.6
删除角色
当我们需要对业务重新整合的时候,可能就需要对之前创建的角色进行清理,删除一些不会再使用的角
色。删除角色的操作很简单,你只要掌握语法结构就行了。
注意,
如果你删除了角色,那么用户也就失去了通过这个角色所获得的所有权限
。
练习:执行如下
SQL
删除角色
school_read
。
GRANT SELECT ON
demo
.settlement
TO
'manager'
;
GRANT SELECT ON
demo
.goodsmaster
TO
'manager'
;
GRANT SELECT ON
demo
.invcount
TO
'manager'
;
mysql>
SHOW GRANTS FOR
'manager'
;
+-------------------------------------------------------+
|
Grants for
manager@% |
+-------------------------------------------------------+
|
GRANT USAGE ON
*.*
TO
`manager`@`%`
|
|
GRANT SELECT ON
`demo`
.
`goodsmaster`
TO
`manager`@`%`
|
|
GRANT SELECT ON
`demo`
.
`invcount`
TO
`manager`@`%`
|
|
GRANT SELECT ON
`demo`
.
`settlement`
TO
`manager`@`%`
|
+-------------------------------------------------------+
REVOKE privileges ON
tablename
FROM
'rolename'
;
REVOKE INSERT
,
UPDATE
,
DELETE ON
school.*
FROM
'school_write'
;
SHOW GRANTS FOR
'school_write'
;
DROP
ROLE role [,role2]...
DROP
ROLE
'school_read'
;
5.7
给用户赋予角色
角色创建并授权后,要赋给用户并处于
激活状态
才能发挥作用。给用户添加角色可使用
GRANT
语句,语
法形式如下:
在上述语句中,
role
代表角色,
user
代表用户。可将多个角色同时赋予多个用户,用逗号隔开即可。
练习:给
kangshifu
用户添加角色
school_read
权限。 (
1
)使用
GRANT
语句给
kangshifu
添加
school_read
权
限,
SQL
语句如下。
(
2
)添加完成后使用
SHOW
语句查看是否添加成功,
SQL
语句如下。
(
3
)使用
kangshifu
用户登录,然后查询当前角色,如果角色未激活,结果将显示
NONE
。
SQL
语句如
下。
5.8
激活角色
方式
1
:使用
set default role
命令激活角色
举例:
举例:使用
SET DEFAULT ROLE
为下面
4
个用户默认激活所有已拥有的角色如下:
方式
2
:将
activate_all_roles_on_login
设置为
ON
默认情况:
GRANT
role [,role2,...]
TO user
[,user2,...];
GRANT
'school_read'
TO
'kangshifu'
@'localhost'
;
SHOW GRANTS FOR
'kangshifu'
@'localhost'
;
SELECT
CURRENT_ROLE();
SET DEFAULT
ROLE
ALL TO
'kangshifu'
@'localhost'
;
SET DEFAULT
ROLE
ALL TO
'dev1'
@'localhost'
,
'read_user1'
@'localhost'
,
'read_user2'
@'localhost'
,
'rw_user1'
@'localhost'
;
mysql>
show variables like
'activate_all_roles_on_login'
;
+-----------------------------+-------+
| Variable_name |
Value
|
+-----------------------------+-------+
| activate_all_roles_on_login | OFF |
+-----------------------------+-------+
1
row in set
(
0.00
sec)
设置:
这条
SQL
语句的意思是,对
所有角色永久激活
。运行这条语句之后,用户才真正拥有了赋予角色的所有
权限。
5.9
撤销用户的角色
撤销用户角色的
SQL
语法如下:
练习:撤销
kangshifu
用户的
school_read
角色。 (
1
)撤销的
SQL
语句如下
(
2
)撤销后,执行如下查询语句,查看
kangshifu
用户的角色信息
执行发现,用户
kangshifu
之前的
school_read
角色已被撤销。
5.10
设置强制角色
(mandatory role)
方式
1
:服务启动前设置
方式
2
:运行时设置
SET GLOBAL
activate_all_roles_on_login=
ON
;
REVOKE
role
FROM user
;
REVOKE
'school_read'
FROM
'kangshifu'
@'localhost'
;
SHOW GRANTS FOR
'kangshifu'
@'localhost'
;
[mysqld]
mandatory_roles
=
'role1,role2@localhost,r3@%.atguigu.com'
SET PERSIST mandatory_roles
=
'role1,role2@localhost,r3@%.example.com'
;
#
系统重启后仍然
有效
SET GLOBAL mandatory_roles
=
'role1,role2@localhost,r3@%.example.com'
;
#
系统重启后失效