6.2 访问控制和帐户 Management

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

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

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

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

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

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

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

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

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

有关每个阶段发生的情况的详细说明,请参见第 6.2.5 节“访问控制,第 1 阶段:连接验证”第 6.2.6 节“访问控制,第 2 阶段:请求验证”。有关诊断特权相关问题的帮助,请参见第 6.2.17 节“对连接 MySQL 的问题进行故障排除”

如果在连接时更改了特权(由您本人或其他人更改),则这些更改不一定会在您发出的下一条语句中立即生效。有关服务器重新加载授权 table 的条件的详细信息,请参见第 6.2.9 节“特权更改何时生效”

MySQL 特权系统不能做某些事情:

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

  • 您不能指定用户有权创建或删除数据库中的 table,但不能创建或删除数据库本身。

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