- 8.2.1 帐户用户名和密码
- 8.2.2 MySQL 提供的权限
- 8.2.3 授权表
- 8.2.4 指定帐户名称
- 8.2.5 指定角色名称
- 8.2.6 访问控制,第 1 阶段:连接验证
- 8.2.7 访问控制,第 2 阶段:请求验证
- 8.2.8 添加帐户、分配权限和删除帐户
- 8.2.9 保留帐户
- 8.2.10 使用角色
- 8.2.11 帐户类别
- 8.2.12 使用部分撤销进行权限限制
- 8.2.13 权限更改何时生效
- 8.2.14 分配帐户密码
- 8.2.15 密码管理
- 8.2.16 服务器处理过期密码
- 8.2.17 可插拔身份验证
- 8.2.18 多因素身份验证
- 8.2.19 代理用户
- 8.2.20 帐户锁定
- 8.2.21 设置帐户资源限制
- 8.2.22 连接到 MySQL 时出现的故障排除问题
- 8.2.23 基于 SQL 的帐户活动审计
MySQL 支持创建帐户,允许客户端用户连接到服务器并访问服务器管理的数据。MySQL 权限系统的首要功能是验证从特定主机连接的用户,并将该用户与数据库上的权限关联起来,例如 SELECT
、INSERT
、UPDATE
和 DELETE
。其他功能包括授予管理操作权限的能力。
要控制哪些用户可以连接,可以为每个帐户分配身份验证凭据,例如密码。MySQL 帐户的用户界面包含 SQL 语句,例如 CREATE USER
、GRANT
和 REVOKE
。请参见 第 15.7.1 节,“帐户管理语句”。
MySQL 权限系统确保所有用户只能执行他们被允许执行的操作。作为用户,当您连接到 MySQL 服务器时,您的身份由 您连接到的主机 和 您指定的用户名 确定。连接后发出请求时,系统会根据您的身份和 您想要执行的操作 授予权限。
MySQL 在识别您时会考虑您的主机名和用户名,因为没有理由假设给定的用户名在所有主机上都属于同一个人。例如,从 office.example.com
连接的用户 joe
不一定是从 home.example.com
连接的用户 joe
。MySQL 通过允许您区分不同主机上恰好具有相同名称的用户来处理这种情况:您可以授予 joe
从 office.example.com
连接的一组权限,以及 joe
从 home.example.com
连接的另一组权限。要查看给定帐户具有哪些权限,请使用 SHOW GRANTS
语句。例如
SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';
在内部,服务器将权限信息存储在 mysql
系统数据库的授权表中。MySQL 服务器在启动时将这些表的内容读入内存,并将访问控制决策基于授权表的内存副本。
当您运行连接到服务器的客户端程序时,MySQL 访问控制涉及两个阶段
阶段 1: 服务器根据您的身份以及您是否可以通过提供正确的密码来验证您的身份来接受或拒绝连接。
阶段 2: 假设您已成功连接,服务器会检查您发出的每个语句,以确定您是否有足够的权限执行它。例如,如果您尝试从数据库中的表中选择行或从数据库中删除表,服务器将验证您是否对表具有 SELECT
权限或对数据库具有 DROP
权限。
有关每个阶段发生情况的更详细说明,请参阅 第 8.2.6 节,“访问控制,阶段 1:连接验证” 和 第 8.2.7 节,“访问控制,阶段 2:请求验证”。有关诊断与权限相关的问题的帮助,请参阅 第 8.2.22 节,“排查连接到 MySQL 的问题”。
如果您在连接时更改了权限(无论是您自己还是其他人),这些更改并不一定会对您发出的下一条语句立即生效。有关服务器重新加载授权表的条件的详细信息,请参阅 第 8.2.13 节,“权限更改何时生效”。
使用 MySQL 权限系统,您无法执行某些操作。
您无法明确指定拒绝给定用户访问。也就是说,您无法明确匹配用户,然后拒绝连接。
您无法指定用户有权在数据库中创建或删除表,但无权创建或删除数据库本身。
密码全局应用于帐户。您无法将密码与特定对象(例如数据库、表或例程)相关联。