引言
MySQL 是一款开源的数据库管理软件,可帮助用户存储、组织和检索数据。它提供了范围广泛的选项,用于为特定用户授予适合的表权限和数据库权限。本教程将简要介绍其中若干可用的选项。

如何创建新用户
您想必已经以 root user 身份在 MySQL 中做过修改,并拥有对所有数据库的完全访问权限。不过,在需要设置额外限制的情况下,也有办法创建具有自定义权限的用户。
我们先在 MySQL shell 中创建一个新用户:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
说明:在本教程中,当我们在 MySQL shell 中添加用户时,会把用户的主机指定为 localhost,而不是服务器的 IP 地址。localhost 是一个主机名,含义是「这台计算机」。MySQL 对这个特定的主机名有专门的处理:当使用该主机的用户连接 MySQL 时,它会尝试通过 Unix 套接字文件连接到本地服务器。因此,一般来说,如果您打算通过 SSH 连接到服务器,或者运行本地 mysql 客户端连接到本地 MySQL 服务器,就可以使用 localhost。
在此阶段,username 还没有任何权限,无法对数据库执行任何操作。事实上,即使 username 尝试连接(使用密码 password),也无法进入 MySQL shell。
因此,首先要做的是让该用户能够访问它所需要的信息。
GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';
该命令中的星号分别指代可以访问的数据库和表。这条具体的命令允许该用户对全部数据库和表进行读取、修改、执行以及各类操作。
请注意,在本例中,我们授予了 username 对数据库中所有内容的完全 root 访问权限。虽然这有助于说明某些 MySQL 概念,但在大多数使用场景中这种做法可能并不可行,而且会使您的数据库面临严重的安全风险。
为新用户配置好所需的权限之后,务必始终重新加载全部权限。
FLUSH PRIVILEGES;
现在,您的修改已经生效。
如何为用户授予不同的权限
以下是可以授予用户的其他常用权限的简要列表。
- ALL PRIVILEGES:如前所述,这会授予 MySQL 用户对指定数据库的完全访问权限(如果没有选择数据库,则是对整个系统的全局访问权限)
- CREATE:允许创建新的表或数据库
- DROP:允许删除表或数据库
- DELETE:允许从表中删除行
- INSERT:允许向表中插入行
- SELECT:允许使用 SELECT 命令读取数据库
- UPDATE:允许更新表中的行
- GRANT OPTION:允许授予或撤销其他用户的权限
要为某个特定用户授予权限,可以使用以下命令:
GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';
如果您希望让该用户访问任意数据库或任意表,请注意把数据库名或表名替换为星号(*)。
每次更新或修改权限之后,务必使用 Flush Privileges 命令。
要撤销某项权限,其结构与授予权限的结构几乎完全相同:
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'localhost';
请注意,撤销权限时应使用 FROM 语法,而不是我们授予权限时所使用的 TO。
您可以运行以下命令,查看当前已授予某个用户的权限:
SHOW GRANTS FOR 'username'@'localhost';
正如您可以使用 DROP 删除数据库一样,也可以使用 DROP 彻底删除某个用户:
DROP USER 'username'@'localhost';
要测试您的新用户,请输入以下内容断开连接:
quit
然后在终端中使用以下命令重新连接:
mysql -u username -p
结论
完成本教程后,您应当对如何在 MySQL 数据库中添加新用户并为其授予不同权限有了更清晰的认识。在此基础上,您可以继续探索和试验数据库中存在的各种权限设置,或者进一步学习一些更高级的 MySQL 配置。
