MySQL 9从入门到性能优化-权限表

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客

《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

MySQL9数据库技术_夏天又到了的博客-CSDN博客

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库中,由mysql_install_db脚本初始化。存储账户权限信息的表主要有user、db、host、tables_priv、columns_priv和procs_priv。本节将介绍这些表的内容和作用。

13.1.1 user表

user表是MySQL中最重要的一张权限表,记录了允许连接到服务器的账号信息,里面的权限是全局级的。例如,一个用户在user表中被授予了DELETE权限,则该用户可以删除MySQL服务器上所有数据库中的任何记录。MySQL中user表的常用字段如表13.1所示。

这些字段可以分为4类,分别是用户列、权限列、安全列和资源控制列。

  1. 用户列

user表的用户列包括Host、User、authentication_string,分别表示主机名、用户名和密码。其中User和Host为User表的联合主键。当用户与服务器之间建立连接时,输入的账户信息中的用户名称、主机名和密码必须匹配User表中对应的字段,只有3个值都匹配的时候,才允许连接的建立。这3个字段的值就是创建账户时保存的账户信息。修改用户密码时,实际就是修改user表的authentication_string字段的值。

  1. 权限列

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

user表中对应的权限是针对所有用户数据库的。这些字段值的类型为ENUM,可以取的值只能为Y和N,Y表示该用户有对应的权限;N表示用户没有对应的权限。查看user表的结构可以看到,这些字段的值默认都是N。可以使用GRANT语句或UPDATE语句更改user表的这些字段来修改用户对应的权限。

  1. 安全列

安全列只有6个字段,其中两个是ssl相关的,即ssl_type和ssl_cipher,用于加密;两个是x509相关的,即x509_issuer和x509_subject,x509标准可用于标识用户;plugin字段标识可以用于验证用户身份的插件,如果该字段为空,服务器使用内建授权验证机制验证用户身份;password_expired用于设置用户的过期时间。读者可以通过SHOW VARIABLES LIKE 'have_openssl'语句来查询服务器是否支持ssl功能。

  1. 资源控制列

资源控制列的字段用来限制用户使用的资源,包含4个字段,分别为:

  • max_questions:用户每小时允许执行的查询操作次数。
  • max_updates:用户每小时允许执行的更新操作次数。
  • max_connections:用户每小时允许执行的连接操作次数。
  • max_user_connections:用户允许同时建立的连接次数。

若一个小时内用户查询或者连接数量超过资源控制限制,则该用户将被锁定,直到下一个小时,才可以再次执行对应的操作。可以使用GRANT语句更新user表中的字段值。

13.1.2 db表

db表是MySQL数据中非常重要的权限表,表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。db表比较常用,其结构如表13.2所示。

  1. 用户列

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

  1. 权限列

db表中Create_routine_priv和Alter_routine_priv这两个字段表明用户是否有创建和修改存储过程的权限。

user表中的权限是针对所有数据库的,如果希望用户只对某个数据库有操作权限,那么需要将user表中对应的权限设置为N,然后在db表中设置对应数据库的操作权限。例如,有一个名称为Zhangting的用户分别从名称为large.domain.com和small.domain.com的两个主机连接到数据库,并需要操作books数据库。这时,可以将用户名称Zhangting添加到db表中,而db表中的host字段值为空,然后将两个主机地址分别作为两条记录的host字段值添加到host表中,并将两张表的数据库字段设置为相同的值books。当有用户连接到MySQL服务器时,db表中没有用户登录的主机名称,则MySQL会从host表中查找相匹配的值,并根据查询的结果决定用户的操作是否被允许。

13.1.3 tables_priv表和columns_priv表

tables_priv表用来对表设置操作权限,columns_priv表用来对表的某一列设置权限。tables_priv表和columns_priv表的结构分别如表13.3和表13.4所示。

tables_priv表中有8个字段,分别是Host、Db、User、Table_name、Grantor、Timestamp、Table_priv和Column_priv,各个字段说明如下:

(1)Host、Db、User和Table_name字段分表示主机名、数据库名、用户名和表名。

(2)Grantor字段表示修改该记录的用户。

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

(4)Table_priv字段表示对表的操作权限,包括SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、REFERENCES、INDEX和ALTER。

(5)Column_priv字段表示对表中的列的操作权限,包括Select、Insert、Update和References。

columns_priv表中只有7个字段,分别是Host、Db、User、Table_name、Column_name、Timestamp、Column_priv。其中,Column_name用来指定对哪些数据列具有操作权限。

13.1.4 procs_priv表

procs_priv表可以对存储过程和存储函数设置操作权限。procs_priv表的结构如表13.5所示。

procs_priv表中包含8个字段,分别是Host、Db、User、Routine_name、Routine_type、Grantor、Proc_priv和Timestamp,各个字段的说明如下:

(1)Host、Db和User字段分别表示主机名、数据库名和用户名。

(2)Routine_name字段表示存储过程或函数的名称。

(3)Routine_type字段表示存储过程或函数的类型。Routine_type字段有两个值,分别是FUNCTION和PROCEDURE:FUNCTION表示这是一个函数,PROCEDURE表示这是一个存储过程。

(4)Grantor字段表示是插入或修改该记录的用户。

(5)Proc_priv字段表示拥有的权限,包括Execute、Alter Routine、Grant 3种。

(6)Timestamp字段表示记录更新时间。

相关推荐
AI 嗯啦1 小时前
SQL详细语法教程(七)核心优化
数据库·人工智能·sql
@蓝眼睛1 小时前
mac的m3芯片安装mysql
mysql·macos
ClouGence2 小时前
三步搞定!GaussDB 实时数据入仓
数据库·后端
冰块的旅行2 小时前
MySQL 的时区问题
mysql
舒一笑3 小时前
如何优雅统计知识库文件个数与子集下不同文件夹文件个数
后端·mysql·程序员
鼠鼠我捏,要死了捏3 小时前
生产环境MongoDB分片策略优化与故障排查实战经验分享
数据库·mongodb·分片
KaiwuDB4 小时前
KWDB 分布式架构探究——数据分布与特性
数据库·分布式
笨蛋不要掉眼泪4 小时前
Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
java·数据库·spring boot
Leiwenti5 小时前
MySQL高阶篇-数据库优化
数据结构·数据库·mysql
你的电影很有趣5 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存