配色: 字号:
【任务6-11】剖析MySQL权限表的验证过程
2022-11-06 | 阅:  转:  |  分享 
  
“数据库类课程资源建设( MySQL 数据库应用与设计)”教学方向资源建设

1



【任务 6-11】剖析 MySQL 权限表的验证过程

【任务描述】

假定 MySQL 的 user 数据表的权限设置如表 6-4 所示,假定 db 数据表的权限设置如表

6-5 所示。

表 6-4 MySQL中 user数据表的权限设置示例

序号 字段名 字段值 序号 字段名 字段值

1 Host localhost 10 Shutdown_priv ''N''

2 User admin 11 Process_priv ''N''

3 Select_priv ''Y'' 12 File_priv ''N''

4 Insert_priv ''N'' 13 Grant_priv ''N''

5 Update_priv ''N'' 14 References_priv ''N''

6 Delete_priv ''N'' 15 Index_priv ''N''

7 Create_priv ''N'' 16 Alter_priv ''Y''

8 Drop_priv ''N'' 17 Execute_priv ''N''

9 Reload_priv ''N'' 18 Super_priv ''N''

表 6-5 MySQL的 db数据表的权限设置示例

序号 字段名 字段值 序号 字段名 字段值

1 Host localhost 10 Grant_priv ''Y''

2 Db book 11 References_priv ''N''

3 User admin 12 Index_priv ''N''

4 Select_priv ''Y'' 13 Alter_priv ''N''

5 Insert_priv ''Y'' 14 Create_view_priv ''N''

6 Update_priv ''Y'' 15 Show_view_priv ''N''

7 Delete_priv ''Y'' 16 Create_routine_priv ''N''

8 Create_priv ''N'' 17 Alter_routine_priv ''N''

9 Drop_priv ''N'' 18 Execute_priv ''N''

( 1)分析 MySQL 权限表验证的基本过程。

( 2)分析 MySQL 服务器的访问控制的基本原理。

( 3)分析以下情景 MySQL 权限表的验证过程:

情景 1:失败的连接尝试。

“数据库类课程资源建设( MySQL 数据库应用与设计)”教学方向资源建设

2



情景 2: user 表中数据库权限设置为 Y, db 表中数据库权限设置为 N。

情景 3: user 表中数据库权限设置为 N, db 表中数据库权限设置为 Y。

情景 4: user 表中数据库权限设置为 N, db 表中数据库权限设置为 N。

情景 5:假定出现以下情况: user 表中用户 happy 的 host 字段的值为 %, db 表中用户

happy 对应的 host 字段的值为空 ,分析 MySQL 服务器的访问控制 。

【任务实施】

1. MySQL 权限表验证的基本过程

① 先从 user 表中的 Host、 User、 Authentication_string 这 3 个字段中判断连接的主机、

用户名和密码是否存在,如果存在则通过身份验证。

② 通过身份验证后,进行权限分配,按照 user、 db、 tables_priv、 columns_priv 的顺序

进行验证。即先检查全局权限表 user,如果 user 中对应的权限为 Y,则此用户对所有数据库

的权限都为 Y,将不再检查 db、 tables_priv、 columns_priv;

如果为 N,则到 db 表中检查此用户对应的具体数据库,并得到 db 中为 Y 的权限;如

果 db 中为 N,则检查 tables_priv 中此数据库对应的具体表,取得表中的权限 Y,以此类

推。

2. MySQL 服务器的访问控制的基本原理

首先,系统需要查看授权表,这些表的使用过程是从一般到特殊,这些表包括: User

表、 Db 表、 Host 表、 Tables_priv 表、 Columns_priv 表。

此外,一旦连接到了服务器,一个用户可以使用两种类型的请求:管理请求

“数据库类课程资源建设( MySQL 数据库应用与设计)”教学方向资源建设

3



( Shutdown、 Reload 等)、数据库相关的请求 ( Insert、 Delete 等)。

3. 分析以下情景 MySQL 权限表的验证过程

( 1) 情景 1:失败的连接尝试

用户 “ happy” 连接服务器时将被拒绝。因为,用户 名 与保持在 user 表中的用户名不匹

配,所以会拒绝用户的请求。

( 2) 情景 2: user 表中数据库权限设置为 Y, db 表中数据库权限设置为 N

① 用户 admin 尝试连接时将会成功。

② 用户 admin 试图在数据库 book 上执行 Alter 命令。

③ 服务器查看 user 表,对应于 Alter 命令的表项的值为 Y,即表示允许。因为在 user

表内授与的权限是全局性的,所以该请求会 成功执行。

( 3) 情景 3: user 表中数据库权限设置为 N, db 表中数据库权限设置为 Y

① 用户 admin 尝试连接时将会成功。

② 用户 admin 试图在数据库 book 上执行 Insert 命令。

③ 服务器查看 user 表,对应于 Insert 命令的条目的值为 N,即表示拒绝。

④ 服务器然后查看 db 表,对应于 Insert 命令的表项的值为 Y,即表示允许。

⑤ 该请求将成功执行,因为该用户的 db 表中的 Insert 字段的值为 Y。

( 4) 情景 4: user 表中数据库权限设置为 N, db 表中数据库权限设置为 N

① 用户 admin 尝 试连接时将会成功。

② 用户 admin 试图在数据库 book 上执行 Index 命令。

③ 服务器查看 user 表,对应于 Index 命令的表项的值为 N,即表示拒绝。

“数据库类课程资源建设( MySQL 数据库应用与设计)”教学方向资源建设

4



④ 服务器 然 后会查看 db 表,对应于 Index 命令的表项的值为 N,即表示拒绝。

⑤ 服务器 接着 将查找 tables_priv 和 columns_priv 表。如果用户的请求符合表中赋予 了

相应 权限,则准予访问。否则,访问就会被拒绝。

( 5)情景 5 权限表的验证过程

① 用户 admin 尝试通过一个给定主机进行连接。

② 假设密码是正确的,那么就会连接成功,因为 user 表指出只要是通过用户名 admin

和有关密码进行连接的话,任何 (字符 %所代表的含义 )主机都是允许的。

③ MySQL 服务器将查找 db 表, 但 这里没有指定主机。

④ MySQL 服务器将查看 host 表。如果该用户要连接的数据库以及用户建立连接时所

在主机的名称都位于 host 表中,那么该用户就能够按照 host 表中所列出的权限来执行命

令。 否则的话,用户将无法执行命令,实际上就无法连接。



献花(0)
+1
(本文系籽油荃面原创)