MySQL 的用户权限表记录了每个用户对于每个数据库和表所拥有的权限。在 MySQL 中,用户权限表由多个系统表组成,其中最重要的是 mysql.user 表和 mysql.db 表。
一、mysql.user 表
mysql.user 表包含了 MySQL 所有用户的信息,包括用户名、密码、权限等。该表的字段如下:
- Host:用户所在主机名或 IP 地址。
- User:用户名。
- Password:用户密码的加密值。
- Select_priv:是否具有 SELECT 权限。
- Insert_priv:是否具有 INSERT 权限。
- Update_priv:是否具有 UPDATE 权限。
- Delete_priv:是否具有 DELETE 权限。
- Create_priv:是否具有 CREATE 权限。
- Drop_priv:是否具有 DROP 权限。
- Grant_priv:是否具有 GRANT 权限。
- References_priv:是否具有 REFERENCES 权限。
- Index_priv:是否具有 INDEX 权限。
- Alter_priv:是否具有 ALTER 权限。
- Create_tmp_table_priv:是否可以创建临时表。
- Lock_tables_priv:是否可以锁定表。
- Create_view_priv:是否可以创建视图。
- Show_view_priv:是否可以查看视图。
- Create_routine_priv:是否可以创建存储过程或函数。
- Alter_routine_priv:是否可以修改存储过程或函数。
- Execute_priv:是否可以执行存储过程或函数。
- Event_priv:是否可以创建事件。
- Trigger_priv:是否可以创建触发器。
- ssl_type:使用的 SSL 类型。
- ssl_cipher:SSL 密码。
- x509_issuer:X.509 证书颁发者。
- x509_subject:X.509 证书主题。
- max_questions:最大允许的查询次数。
- max_updates:最大允许的更新次数。
- max_connections:最大允许的连接数。
- max_user_connections:最大允许的用户连接数。
二、mysql.db 表
mysql.db 表记录了每个用户对于每个数据库的权限。该表的字段如下:
- Host:用户所在主机名或 IP 地址。
- Db:数据库名。
- User:用户名。
- Select_priv:是否具有 SELECT 权限。
- Insert_priv:是否具有 INSERT 权限。
- Update_priv:是否具有 UPDATE 权限。
- Delete_priv:是否具有 DELETE 权限。
- Create_priv:是否具有 CREATE 权限。
- Drop_priv:是否具有 DROP 权限。
- Grant_priv:是否具有 GRANT 权限。
- References_priv:是否具有 REFERENCES 权限。
- Index_priv:是否具有 INDEX 权限。
- Alter_priv:是否具有 ALTER 权限。
- Create_tmp_table_priv:是否可以创建临时表。
- Lock_tables_priv:是否可以锁定表。
- Create_view_priv:是否可以创建视图。
- Show_view_priv:是否可以查看视图。
- Create_routine_priv:是否可以创建存储过程或函数。
- Alter_routine_priv:是否可以修改存储过程或函数。
- Execute_priv:是否可以执行存储过程或函数。
- Trigger_priv:是否可以创建触发器。
- max_user_connections:最大连接数。
mysql.db 表还有一个重要的字段是 Table_priv,它记录了用户对于每个表的权限。该字段是一个长文本类型,其中每个权限用逗号分隔。例如,如果一个用户对于一个表具有 SELECT 和 INSERT 权限,那么该字段的值为“Select,Insert”。
此外,还有一个 mysql.tables_priv 表,它记录了每个用户对于每个表的详细权限信息。该表的字段和 mysql.db 表类似,但是更加详细和复杂,可以精确控制用户对于每个表的各种操作权限。
MySQL 的用户权限表是非常重要的,它记录了每个用户对于每个数据库和表的权限。管理员可以使用 GRANT 和 REVOKE 命令授予和撤销用户的权限,以保证数据库的安全性和可靠性。