12.1 权限表

12.1.1 user

user表是MySQL中最重要的一个权限表,记录允许连接到服务器的账号信息,里面的权限是全局的

  1. 用户列

    user表的用户列包括HostUserPassword,分别表示主机名。用户名和密码,其中HostUser为联合主键。

  2. 权限列

    权限列字段决定了用户的权限,描述了在全局范围内允许对数据和数据库进行的操作,还包括查询权限,修改权限等普通权限,还包括关闭服务器、超级权限和加载用户等高级权限。普通权限用于操作,高级权限用于管理。

  3. 安全列

    安全列有6个字段,两个是ssl相关,两个是x509相关的,另外两个是授权插件相关的。ssl用于加密;x509标准可用于标识用户;Plugin字段标识可以用于验证身份插件,如果为空,服务器使用内建授权验证机制验证用户身份。可通过SHOW VARIABLES LIKE 'have_openssl'语句来查询服务器是否支持ssl功能。

  4. 资源控制列

    1. max_questions用户每小时允许的查询次数

    2. max_updates用户每小时允许的更新操作次数

    3. max_connections用户每小时允许执行的连接操作次数

    4. max_user_connections用户每小时允许建立的连接次数

12.1.2 db表和host

  1. 用户列

    db表用户列有3个字段,分别是HostUserDb,标识从某个主机连接某个用户对某个数据库的操作权限,这3个字段的组合构成了db表的主键。host 表不存储用户名称,用户列只有2个字段,分别是HostDb,表示从某个主机连接的用户对某个数据库的操作权限,其只有2个字段,分别是HostDb,表示从某个主机连接的用户对某个数据库的操作权限,其主键包括Host和Db两个字段。host很少用到,一般情况下db表就可以满足权限控制需求了。

  2. 权限列

    db表和host表的权限列大致相同,表中create_routine_privalter_routine_priv这两个字段表明用户是否有创建和修改存储过程的权限。user表中的权限是针对所有数据库的,如果希望用户只对某个数据库有操作权限,那么需要将user表中对应的权限设置为N,然后在db表中设置对应数据库的操作权限。

12.1.3 tables_priv表和columns_priv

tables_priv表用来对表设置操作权限,columns_priv表用来对表的某列设置权限 tables_ priv表有8个字段,分别是HostDbUserTable_ nameGrantorTimestampTable_privColumn_priv, 各个字段说明如下:

  1. HostDbUserTable_name4个字段,分表示主机名、数据库名、用户名和表名。

  2. Grantor表示修改该记录的用户。

  3. Timestamp字段表示修改该记录的时间。

  4. Table_priv表示对表的操作权限,包括SelectInsertUpdateDeleteCreateDropGrantReferencesIndexAlter等。

  5. Column_priv字段表示对表中的列的操作权限,包括SelectInsertUpdateReferences

columns_priv表只有7个字段,分别是HostDbUserTable_nameColumn_nameTimestampColumn_priv。其中:Column_name用来指定对哪些数据列具有操作权限。

12.1.4 procs_priv

procs_piv表包含8个字段分别是HostDbUscrRoutine_nameRoutire_ypeGrantorProc_privTimestamp,各个字段的说明如下:

  1. HostDbUser字段分别表示主机名、数据库名和用户名。Routine_name表示存储过程或函数的名称。

  2. Routine_type表示存储过程或函数的类型。Routine_type字段有两个值,分别是FUNCTIONPROCEDUREFUNCTION表示这是一个函数;PROCEDURE表示这是一个存储过程。

  3. Grantor是插入或修改该记录的用户。

  4. Proc_priv表示拥有的权限,包括ExecuteAlter RoutineGrant3种。

  5. Timestamp表示记录更新时间。

最后更新于

这有帮助吗?