MySQL内存授权表详解(mysql中内存授权表)

MySQL内存授权表详解

MySQL的内存授权表是存储关于数据库和表授权信息的系统表。它存储授予用户和角色的权限,以及哪些用户和角色拥有哪些权限。在MySQL中,授权表分为两种类型:内存授权表和磁盘授权表。其中内存授权表的数据存储在内存中,而磁盘授权表的数据则存储在磁盘上。

内存授权表的主要作用是提高MySQL的性能,因为将授权信息存储在内存中可以加快访问速度。此外,内存授权表还可以减少磁盘I/O的负担,因为磁盘授权表需要从磁盘读取授权信息,而内存授权表不需要。

MySQL内存授权表有很多种,其中最常见的是user和db表。user表存储用户和角色的授权信息,而db表存储数据库和表的授权信息。下面我们将详细介绍这两种表。

user表

user表存储用户和角色的授权信息,它包含以下列:

CREATE TABLE `user` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`authentication_string` text COLLATE utf8_bin DEFAULT NULL,
`plugin` char(64) COLLATE utf8_bin DEFAULT 'mysql_native_password',
`authentication_string_original` text DEFAULT NULL,
`session_grants` text COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`Host`,`User`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges';

其中,Host和User列对应的是用户登录时使用的主机名和用户名。authentication_string列存储用户的密码,它是加密的。plugin列指定用于认证的插件。authentication_string_original列存储未加密的密码,用于备份和恢复。session_grants列存储当前会话中的授权信息。

db表

db表存储数据库和表的授权信息,它包含以下列:

CREATE TABLE `db` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Delete_history_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
PRIMARY KEY (`Host`,`Db`,`User`),
KEY `user` (`User`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Database privileges';

其中,Host、Db和User列对应的是授权信息的三个关键字。其余列指定了授权信息,例如Select_priv列表示是否允许用户在指定的库或表中执行SELECT操作。

总结

内存授权表是MySQL中存储授权信息的一种方式,与磁盘授权表相比,它可以提高MySQL的性能。MySQL内存授权表包括user表和db表,它们存储用户和角色、数据库和表的授权信息。在MySQL中使用内存授权表可以更方便地管理授权信息,同时也可以更快速地获取授权信息。


数据运维技术 » MySQL内存授权表详解(mysql中内存授权表)