Sysql中的安全性/访问控制和帐户管理/访问控制,第2阶段:请求验证

4.7访问​​控制,第2阶段:请求验证

在服务器接受连接之后,它进入访问控制的阶段2。对于您通过连接发出的每个请求,服务器确定要执行的操作,然后检查您的权限是否足够。这是Grant表中的特权列的播放。这些特权可以来自任何一个用户global_grants.D btables_priv.columns_priv., 或者procs_priv.表。(你可能会发现它有助于参考第4.3节“授予表”,其中列出了每个授权表中存在的列。)

用户global_grants.表格授予全局权限。对于给定帐户的这些表中的行表示无论默认数据库是什么,都会在全球范围内应用的帐户权限。例如,如果用户表授予你删除权限,您可以从服务器主机上任何数据库中的任何表中删除行。授予特权是明智的用户表仅适用于需要它们的人,如数据库管理员。对于其他用户,请留下所有特权用户表设置为'n'并仅在更具体的级别(特定数据库,表,列或例程)授予权限。也可以在全球范围内授予数据库权限,但使用部分revikes来限制它们在特定数据库上行使(见第4.12节“使用部分撤销的特权限制”)。

D b表格授予特定于数据库特权。此表的范围列中的值可以采用以下形式:

  • 一个空白用户值与匿名用户匹配。非黑白价值匹配字面意思;用户名中没有通配符。

  • 通配符_可以用在主持人D b列。这些具有与模式匹配的模式匹配操作相同的含义与喜欢操作员。如果要在授予权限时实际上使用任何一个字符,则必须使用反斜杠转义。例如,要包含下划线字符(_)作为数据库名称的一部分,将其指定为\ _在里面授予陈述。

  • 一种'%'或空白主持人价值手段任何主持人。

  • 一种'%'或空白D b价值手段任何数据库。

服务器读取D b表中的内存并同时对其进行读取用户桌子。服务器排序D b表基于主持人D b, 和用户范围列。和我们一样用户表,排序将最特定于特定的值持续到最小的值,并且当服务器查找匹配行时,它使用它找到的第一个匹配项。

tables_priv.columns_priv., 和procs_priv.表格授予特定于表特定的列和特定于例行的特权。这些表的范围列中的值可以采用以下形式:

  • 通配符_可以用在主持人柱子。这些具有与模式匹配的模式匹配操作相同的含义与喜欢操作员。

  • 一种'%'或空白主持人价值手段任何主持人。

  • D btable_name.column_name., 和rutine_name.列不能包含通配符或空白。

服务器排序tables_priv.columns_priv., 和procs_priv.基于的表主持人D b, 和用户列。这类似于D b表排序,但更简单,因为只有主持人列可以包含通配符。

服务器使用排序表来验证其接收的每个请求。对于需要行政权限的请求,例如关掉或者重新加载,服务器只检查用户global_privilege.表,因为这些是唯一可以指定管理权限的表。如果在这些表中的帐户中的一行允许请求的操作并拒绝否则,则服务器授予访问权限。例如,如果要执行mysqladmin关闭但是你的用户表行不授予关掉服务权限,服务器拒绝访问而无需检查D b桌子。(后一张表包含否shutdown_priv.列,所以没有必要检查它。)

用于与数据库相关的请求(更新等等),服务器首先检查用户的全局权限用户表行(少于部分revikes施加的任何特权限制)。如果该行允许请求的操作,则授予访问权限。如果是全球特权用户表不足,服务器确定用户的数据库特定权限D b桌子:

  • 服务器看起来D b匹配的表主持人D b, 和用户列。

  • 主持人用户列与连接用户的主机名和MySQL用户名匹配。

  • D b列与用户想要访问的数据库匹配。

  • 如果没有行主持人用户,访问被拒绝。

在确定授予的数据库特权后D b表行,服务器将它们添加到授予的全局权限用户桌子。如果结果允许请求的操作,则授予访问权限。否则,服务器连续检查用户的表和列权限tables_priv.columns_priv.表,将那些添加到用户的权限,并允许基于结果的访问权限。对于存储 - 例行操作,服务器使用procs_priv.表而不是tables_priv.columns_priv.

在布尔术语中表达,所先的描述如何计算用户权限的描述可以概括如下:

全局权限或数据库权限或表权限或列权限或例行权限

它可能是显而易见的原因,如果最初发现全局权限对所请求的操作不足,则服务器将这些权限添加到数据库,表和列权限。原因是请求可能需要多种类型的特权。例如,如果你执行一个插入...选择声明,你需要两者选择特权。你的特权可能是这样的用户表行授予一个特权全球和D b表行专门针对相关数据库授予另一个。在这种情况下,您有必要的权限来执行请求,但服务器无法从您的全局或数据库权限中判断。它必须基于组合权限进行访问控制决策。