8.2 访问控制和账户管理
- 8.2.1 账户用户名和密码
- 8.2.2 MySQL 提供的权限
- 8.2.3 授权表
- 8.2.4 指定账户名称
- 8.2.5 指定角色名称
- 8.2.6 访问控制,第一阶段:连接验证
- 8.2.7 访问控制,第二阶段:请求验证
- 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 的帐户活动审计
SELECT
、INSERT
、UPDATE
和 DELETE
。此外,还有能力授予管理员操作的权限。
控制哪些用户可以连接,每个帐户都可以分配身份验证凭证,如密码。MySQL 帐户界面由 SQL 语句组成,如CREATE USER
、GRANT
和REVOKE
。见Section 15.7.1,“Account Management Statements”.
MySQL 权限系统确保所有用户只能执行允许他们的操作。作为用户,当您连接到 MySQL 服务器时,您的身份由您从哪个主机连接和您指定的用户名确定。当您发出请求后连接,系统根据您的身份和您想做什么授予权限。
MySQL 考虑您主机名和用户名,因为没有理由假设给定的用户名属于同一个人在所有主机上。例如,用户joe
从office.example.com
连接不一定是来自home.example.com
的用户joe
。MySQL 处理这个问题,使您可以在不同主机上区分同名的用户:您可以授予一个集权限为从office.example.com
连接的joe
,并授予另一个集权限为从home.example.com
连接的joe
。要查看某个帐户拥有的权限,请使用SHOW GRANTS
语句。例如:
SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';
内部,服务器将权限信息存储在 MySQL 系统数据库中的授予表中。服务器启动时,从这些表中读取内容,并基于内存中的授予表副本做出访问控制决策。
MySQL 访问控制涉及两个阶段,当您运行客户端程序连接到服务器时:
Stage 1: 服务器根据您的身份和是否可以验证您的身份(通过正确的密码)接受或拒绝连接。
Stage 2: 假设您可以连接,服务器检查每个语句,您是否有足够的权限执行它。例如,如果您尝试从表中选择行或从数据库中删除表,服务器验证您是否拥有SELECT
权限或DROP
权限。
为了更详细地了解每个阶段发生的事情,请见第8.2.6节,“Access Control, Stage 1: Connection Verification”,和第8.2.7节,“Access Control, Stage 2: Request Verification”。对于帮助诊断权限相关问题,请见第8.2.22节,“Troubleshooting Problems Connecting to MySQL”。
如果您的权限被更改(无论是您自己或其他人),这些变化不一定立即生效于下一个语句中。对于详细信息,请见第8.2.13节,“When Privilege Changes Take Effect”。
有一些您不能使用MySQL权限系统的事情:
-
您不能明确指定某个用户应该被拒绝访问。这意味着,您不能明确匹配一个用户然后拒绝连接。
-
您不能指定某个用户可以创建或删除数据库表,但不能创建或删除整个数据库。
-
密码应用于账户的全局范围中。您不能将密码关联到特定的对象,如数据库、表或存储程序。