- 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 权限系统完成。
您无法明确指定某个用户应被拒绝访问。也就是说,您无法明确匹配用户,然后拒绝连接。
您无法指定用户有权在一个数据库中创建或删除表,但无权创建或删除数据库本身。
密码在全局上应用于帐户。您无法将密码与特定对象(如数据库、表或例程)关联。