MySQL 8.0 参考手册  / 第 6 章 安全  /  6.2 访问控制和账户管理

6.2 访问控制和账户管理

MySQL 允许创建允许客户端用户连接到服务器并访问服务器管理的数据的帐户。MySQL 权限系统的主要功能是对从给定主机连接的用户进行身份验证,并将该用户与数据库的权限相关联,例如 SELECTINSERTUPDATEDELETE。附加功能包括授予管理操作权限的能力。

为了控制哪些用户可以连接,可以为每个帐户分配身份验证凭据,例如密码。MySQL 帐户的用户界面由 SQL 语句组成,例如 CREATE USERGRANTREVOKE。参见 第 13.7.1 节,“账户管理声明”

MySQL 权限系统确保所有用户只能执行允许他们执行的操作。作为用户,当您连接到 MySQL 服务器时,您的身份由您连接的主机您指定的用户名决定。当你连接后发出请求时,系统会根据你的身份和 你想做什么来授予权限。

MySQL 在识别您时同时考虑您的主机名和用户名,因为没有理由假设给定的用户名在所有主机上属于同一个人。例如, joe从 连接 的用户office.example.com不必与从 连接的用户是同一joe个人 home.example.com。MySQL 通过使您能够区分恰好具有相同名称的不同主机上的用户来处理此问题:您可以通过 from 授予一组连接权限,并通过 fromjoe授予一组office.example.com不同的连接权限 。要查看给定帐户具有哪些权限,请使用该 语句。例如: joehome.example.comSHOW GRANTS

SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';

在内部,服务器将权限信息存储在mysql系统数据库的授权表中。MySQL 服务器在启动时将这些表的内容读入内存,并根据授权表的内存副本做出访问控制决策。

当您运行连接到服务器的客户端程序时,MySQL 访问控制涉及两个阶段:

阶段 1:服务器根据您的身份以及您是否可以通过提供正确的密码来验证您的身份来接受或拒绝连接。

第 2 阶段:假设您可以连接,服务器会检查您发出的每个语句以确定您是否有足够的权限来执行它。例如,如果您尝试从数据库中的表中选择行或从数据库中删除表,服务器会验证您是否具有 SELECT表的权限或 DROP数据库的权限。

有关每个阶段发生的事情的更详细描述,请参阅第 6.2.5 节“访问控制,第 1 阶段:连接验证”第 6.2.6 节“访问控制,第 2 阶段:请求验证”。有关诊断与特权相关的问题的帮助,请参阅 第 6.2.14 节,“连接到 MySQL 的故障排除”

如果您在连接时更改了权限(由您自己或其他人),则这些更改不一定会在您发布的下一个声明中立即生效。有关服务器重新加载授权表的条件的详细信息,请参阅第 6.2.8 节,“权限更改何时生效”

有一些事情是你不能用 MySQL 特权系统做的:

  • 您不能明确指定应拒绝给定用户的访问。也就是说,您不能显式匹配某个用户然后拒绝连接。

  • 您不能指定用户有权在数据库中创建或删除表但无权创建或删除数据库本身。

  • 密码全局适用于帐户。您不能将密码与特定对象(如数据库、表或例程)相关联。