- 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语句组成,例如创建用户
、授予
和撤销
。请参见第 15.7.1 节,“帐户管理语句”。
MySQL权限系统确保所有用户只能执行允许他们执行的操作。作为用户,当你连接到MySQL服务器时,你的身份由你连接的主机和你指定的用户名决定。连接后发出请求时,系统会根据你的身份和你想要做什么来授予权限。
MySQL在识别你时会考虑你的主机名和用户名,因为没有理由假设给定的用户名在所有主机上都属于同一个人。例如,从 office.example.com
连接的用户 joe
不一定是与从 home.example.com
连接的用户 joe
同一个人。MySQL通过允许你区分碰巧具有相同名称的不同主机上的用户来处理这个问题:你可以为来自 office.example.com
的 joe
的连接授予一组权限,为来自 home.example.com
的 joe
的连接授予不同的权限。要查看给定帐户具有的权限,请使用显示授予
语句。例如:
SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';
在内部,服务器将权限信息存储在 mysql
系统数据库的授予表中。MySQL服务器在启动时将这些表的内容读入内存,并根据授予表的内存副本做出访问控制决策。
当你运行连接到服务器的客户端程序时,MySQL访问控制涉及两个阶段:
阶段 1: 服务器根据你的身份以及你是否可以通过提供正确的密码来验证你的身份来接受或拒绝连接。
阶段 2: 假设你可以连接,服务器会检查你发布的每个语句,以确定你是否有足够的权限来执行它。例如,如果你尝试从数据库中的表中选择行或从数据库中删除表,服务器会验证你是否对该表具有选择
权限或对该数据库具有删除
权限。
若要更详细地了解每个阶段发生的情况,请参阅第 8.2.6 节,“访问控制,阶段 1:连接验证”和第 8.2.7 节,“访问控制,阶段 2:请求验证”。若要帮助诊断权限相关问题,请参阅第 8.2.22 节,“MySQL 连接故障排除”。
如果你的权限在你连接时被更改(无论是你自己还是其他人),这些更改不一定会立即对你的下一条语句生效。有关服务器重新加载授权表的条件的详细信息,请参阅第 8.2.13 节,“权限更改何时生效”。
MySQL 权限系统有一些你不能做的事情:
-
你不能明确指定应拒绝给定用户的访问权限。也就是说,你不能明确匹配用户然后拒绝连接。
-
你不能指定用户有权在数据库中创建或删除表,但无权创建或删除数据库本身。
-
密码全局应用于帐户。你不能将密码与特定对象(如数据库、表或例程)相关联。