本文全面概述了如何在 MySQL 中创建新用户帐户并在 MySQL 数据库上授予不同类型的权限。了解用户帐户管理的基础知识并查找提示。
介绍
首先,让我们弄清楚为什么我们需要用户和权限。当在系统上安装 MySQL Server 并创建 MySQL 数据库时,以 root 或管理用户身份在 MySQL shell 中运行所需的命令,这意味着拥有控制数据库各个方面的全部权力。
但是,一旦决定让更多人访问和修改您的 MySQL 数据库,就需要创建用户并授予他们权限。通过这样做,可以在数据库或某些数据库对象中授予权限或引入限制。简而言之,这将决定谁可以做什么以及使用什么对象类型。
本文深入介绍了如何在 MySQL 数据库上创建新用户并授予适当的权限,同时,你还将了解有关创建自定义权限的更多信息,并了解 MySQL 中存在哪些类型的权限。
内容
最重要的是,您将有机会在 MySQL shell(MySQL 命令行客户端)以及用于 MySQL 的 dbForge Studio(用于 MySQL 和 MariaDB 数据库开发、管理和管理的 GUI 工具)中查看示例。
如何通过 MySQL Shell 创建新的 MySQL 用户帐户
首先,您需要连接到您的 MySQL 服务器实例并通过 MySQL 命令行界面以 root 用户身份登录:
mysql -u root -p
执行此操作时,您还需要输入 root 帐户的密码并按Enter 键:
Enter password: ********
要通过 MySQL shell 创建新的 MySQL 用户帐户,您需要执行 CREATE USER 语句。让我们来看看它的基本语法:
CREATE USER [IF NOT EXISTS] 'new_user_name'@'host_name'
IDENTIFIED BY 'user_password'
在上面的语法中,将new_user_name替换为新用户的名称,将host_name替换为用户连接到 MySQL 服务器的主机名。
或者,如果您希望用户只能从 localhost 连接到 MySQL Server ,则将host_name设置为 ‘localhost’,这意味着“这台计算机”。如果不是这种情况,您可以使用远程机器 IP 地址作为主机名,例如:
CREATE USER 'new_user_name'@'10.8.0.5'
IDENTIFIED BY 'user_password';
如果您希望用户能够从任何主机连接,请使用 ‘%’ 通配符作为host_name。
最后,在 IDENTIFIED BY 关键字后为新用户设置密码。
请注意,IF NOT EXISTS选项允许确保之前未创建相同的用户。
完成新用户的创建后,请记住向用户授予权限以让他们访问 MySQL 数据库。否则,用户将没有任何权限以任何方式访问或操作数据库。
如何向用户授予权限和添加权限
要为用户提供对数据库的访问权限并授予权限,您通常需要使用以下 GRANT 语句:
GRANT permission_type
ON privilege_level
TO 'new_user_name'@'host_name';
尽管上述语法相当基本并且没有显示所有细微之处,但它指出了可以向新用户提供多种类型的特权(或权限)的结论。因此,让我们说明可用于 GRANT 和 REVOKE 语句的最常见的许可权限类型:
- ALL PRIVILEGES – 用户获得特定访问级别的所有特权。
- CREATE – 用户获得创建数据库和表的权限。
- DROP – 用户获得删除数据库和表的权限。
- DELETE – 用户获得从特定表中删除行的权限。
- INSERT – 用户获得将行插入特定表的权限。
- SELECT – 用户获得读取数据库的权限。
- UPDATE – 用户获得更新表行的权限。
因此,我们已经阐明了存在哪些类型的权限,并定义了在 GRANT 命令的第一部分中放置的内容。现在,我们来谈谈 ON 关键字之后的第二部分,即权限级别。通过权限级别,您可以确定用户帐户可以操作哪些 MySQL 对象:所有数据库、指定数据库、指定表、某些列或数据库中的某些存储例程。在下一段中,我们将更详细地讨论这一点并提供示例。
授予用户数据库权限
要通过MySQL 命令提示符向用户帐户授予所有数据库上的所有权限 ,您需要分配全局权限并在 ON 关键字后使用 . 语法:
GRANT ALL PRIVILEGES
ON *.*
TO new_user_name@host_name;
在此示例中,新用户被授予了可能的最大权限级别:他们获得了读取、修改、执行命令以及跨所有数据库和表执行任何任务的权限。请小心,因为这会危及您的数据库安全并导致负面后果。
相反,您可能希望授予有限的权限。例如,您希望新用户仅访问数据库中的某个表:
GRANT ALL PRIVILEGES
ON database_name.table_name
TO user_name@host_name;
在这种情况下,用户被授予表级权限,该权限适用于表中的所有列。因此,他们获得了根据需要读取、编辑和修改表的权限。
但是,也可能需要限制此类访问并提供在指定数据库对象中执行某些操作的可能性。
例如,在下面,您可以看到用户被授予了多个权限:他们有权在数据库中的两列之间使用 SELECT 语句,在第三列上执行 UPDATE,并在同一数据库中的第四列上运行 INSERT:
GRANT
SELECT (column1,column2),
UPDATE(column3),
INSERT (column4)
ON database_name
TO user_name@host_name;
正如完成向新用户提供数据库访问权限一样,请确保通过运行以下命令重新加载所有权限:
FLUSH PRIVILEGES;
之后,您的更改将生效。
显示所有 MySQL 用户帐户权限
要显示授予 MySQL 用户帐户的权限,您需要应用 SHOW GRANTS 命令:
SHOW GRANTS FOR user_name@host_name;
该命令的输出类似于以下内容:
+---------------------------------------------------------------------------+
| Grants for user_name@host_name |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_name'@'host_name' |
| GRANT ALL PRIVILEGES ON `database_name`.* TO 'user_name'@'host_name' |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)
如何撤销用户的所有权限
如果您需要撤销用户帐户对数据库的权限,请应用与授予权限时使用的语法类似的语法:
REVOKE permission_type
ON privilege_level
FROM 'user_name'@'host_name';
因此,例如,如果您打算撤销用户对特定数据库的所有权限,请使用以下命令:
REVOKE ALL PRIVILEGES
ON database_name.*
FROM 'user_name'@'host_name';
从 MySQL 中删除用户
如果您决定删除 MySQL 用户帐户,请通过命令行执行 DROP USER 命令:
DROP USER [IF EXISTS] 'user_name'@'host_name'
上面的命令将删除用户帐户及其所有权限。
总而言之,我们提供了有关如何最好地管理 MySQL 中的用户和权限的详细概述。此信息对于初学者和有经验的 DBA 都应该有用,因为它包含有关有效管理 MySQL 数据库中用户帐户的基本信息和有用技巧。




