Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  Security  /  Access Control and Account Management

8.2 访问控制和账户管理

MySQL 允许创建账户,允许客户端用户连接到服务器并访问由服务器管理的数据。 MySQL 权限系统的主要功能是验证来自给定主机的用户,并将该用户关联到对数据库执行操作的权限,例如 SELECTINSERTUPDATEDELETE。此外,还有能力授予管理员操作的权限。

控制哪些用户可以连接,每个帐户都可以分配身份验证凭证,如密码。MySQL 帐户界面由 SQL 语句组成,如CREATE USERGRANTREVOKE。见Section 15.7.1,“Account Management Statements”.

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

MySQL 考虑您主机名和用户名,因为没有理由假设给定的用户名属于同一个人在所有主机上。例如,用户joeoffice.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权限系统的事情:

  • 您不能明确指定某个用户应该被拒绝访问。这意味着,您不能明确匹配一个用户然后拒绝连接。

  • 您不能指定某个用户可以创建或删除数据库表,但不能创建或删除整个数据库。

  • 密码应用于账户的全局范围中。您不能将密码关联到特定的对象,如数据库、表或存储程序。