## 6.2 访问控制和账户管理

[6.2.1 账户用户名和密码](user-names.html)
[6.2.2 MySQL提供的权限](privileges-provided.html)
[6.2.3 授权表](grant-tables.html)
[6.2.4 指定账户名称](account-names.html)
[6.2.5 指定角色名称](role-names.html)
[6.2.6 访问控制，第一阶段：连接验证](connection-access.html)
[6.2.7 访问控制，第 2 阶段：请求验证](request-access.html)
[6.2.8 添加帐户、分配权限和删除帐户](creating-accounts.html)
[6.2.9 预留账户](reserved-accounts.html)
[6.2.10 使用角色](roles.html)
[6.2.11 账户类别](account-categories.html)
[6.2.12 使用部分撤销的权限限制](partial-revokes.html)
[6.2.13 权限变更何时生效](privilege-changes.html)
[6.2.14 分配帐户密码](assigning-passwords.html)
[6.2.15 密码管理](password-management.html)
[6.2.16 过期密码的服务器处理](expired-password-handling.html)
[6.2.17 可插拔认证](pluggable-authentication.html)
[6.2.18 多因素认证](multifactor-authentication.html)
[6.2.19 代理用户](proxy-users.html)
[6.2.20 账户锁定](account-locking.html)
[6.2.21 设置账户资源限制](user-resources.html)
[6.2.22 MySQL 连接问题排查](problems-connecting.html)
[6.2.23 基于 SQL 的账户活动审计](account-activity-auditing.html)

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

MySQL 允许创建允许客户端用户连接到服务器并访问由服务器管理的数据的帐户。MySQL 权限系统的主要功能是验证从给定主机连接的用户，并将该用户与数据库上的权限相关联，例如[`选择`](select.html),[`插入`](insert.html),[`更新`](update.html)， 和[`删除`](delete.html).其他功能包括授予管理操作权限的能力。

为了控制哪些用户可以连接，可以为每个帐户分配身份验证凭据，例如密码。MySQL 帐户的用户界面由 SQL 语句组成，例如[`创建用户`](create-user.html),[`授予`](grant.html)， 和[`撤销`](revoke.html).看[第 13.7.1 节，“账户管理声明”](account-management-statements.html).

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

MySQL 在识别您时会考虑您的主机名和用户名，因为没有理由假设给定的用户名在所有主机上属于同一个人。例如，用户`乔`从谁连接`office.example.com`不必与用户是同一个人`乔`从谁连接`home.example.com`.MySQL 通过使您能够区分碰巧具有相同名称的不同主机上的用户来处理此问题：您可以通过以下方式为连接授予一组权限`乔`从`office.example.com`，以及一组不同的连接权限`乔`从`home.example.com`.要查看给定帐户的权限，请使用[`显示赠款`](show-grants.html)陈述。例如：

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

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

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

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

**第 2 阶段：**假设您可以连接，服务器会检查您发出的每个语句以确定您是否有足够的权限来执行它。例如，如果您尝试从数据库中的表中选择行或从数据库中删除表，则服务器会验证您是否拥有[`选择`](privileges-provided.html#priv_select)表或表的特权[`降低`](privileges-provided.html#priv_drop)数据库的权限。

有关每个阶段发生的情况的更详细描述，请参阅[第 6.2.6 节，“访问控制，第 1 阶段：连接验证”](connection-access.html)， 和[第 6.2.7 节，“访问控制，第 2 阶段：请求验证”](request-access.html).有关诊断特权相关问题的帮助，请参阅[第 6.2.22 节，“解决连接到 MySQL 的问题”](problems-connecting.html).

如果您在连接时更改了您的权限（您自己或其他人），这些更改不一定会立即对您发出的下一个语句生效。有关服务器重新加载授权表的条件的详细信息，请参见[第 6.2.13 节，“权限更改生效时”](privilege-changes.html).

有些事情你不能用 MySQL 特权系统做：

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

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

-   密码全局应用于帐户。您不能将密码与特定对象（例如数据库、表或例程）相关联。
