MySQL8.0添加账号、分配权限和删除账号
本节分享以下主题:创建帐户和授予权限、检查帐户权限和属性、撤销账户权限、删除帐户。
创建帐户的另一种选择是使用 GUI 工具 MySQL Workbench。此外,一些第三方程序提供 MySQL 帐户管理功能。phpMyAdmin
就是这样一个程序。
创建帐户和授予权限
以下示例显示如何使用 mysql客户端程序设置新帐户。这些示例假定 MySQLroot
帐户具有CREATE USER
权限以及它授予其他帐户的所有权限。
在命令行中,以 MySQLroot
用户身份连接到服务器 ,在密码提示下提供适当的密码:
$> mysql -u root -p
Enter password: (enter root password here)
连接到服务器后,您可以添加新帐户。以下示例使用CREATE USER
和GRANT
语句来设置四个帐户(在您看到的地方 ,替换适当的密码): '
password
'
CREATE USER 'finley'@'localhost'
IDENTIFIED BY 'password';
GRANT ALL
ON *.*
TO 'finley'@'localhost'
WITH GRANT OPTION;
CREATE USER 'finley'@'%.example.com'
IDENTIFIED BY 'password';
GRANT ALL
ON *.*
TO 'finley'@'%.example.com'
WITH GRANT OPTION;
CREATE USER 'admin'@'localhost'
IDENTIFIED BY 'password';
GRANT RELOAD,PROCESS
ON *.*
TO 'admin'@'localhost';
CREATE USER 'dummy'@'localhost';
这些报表创建的帐户具有以下属性:
-
两个帐户的用户名为
finley
。两者都是具有完全全局权限的超级用户帐户,可以执行任何操作。该'finley'@'localhost'
帐户只能在从本地主机连接时使用。该'finley'@'%.example.com'
帐户'%'
在主机部分使用通配符,因此它可用于从example.com
域中的任何主机进行连接 。'finley'@'localhost'
如果 有匿名用户帐户,则 该帐户是必需的localhost
。如果没有该'finley'@'localhost'
帐户,则该匿名用户帐户在finley
从本地主机连接时优先 ,finley
并被视为匿名用户。这样做的原因是匿名用户帐户具有Host
比'finley'@'%'
帐户更具体的列值 ,因此在user
表排序顺序中排在前面。 -
该
'admin'@'localhost'
帐户只能用于admin
从本地主机连接。它被授予全局RELOAD
和PROCESS
管理权限。这些特权使admin
用户能够执行 mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx
命令,以及mysqladmin processlist。没有授予访问任何数据库的权限。您可以使用GRANT
语句添加此类权限 。 -
该
'dummy'@'localhost'
帐户没有密码(这是不安全的,不推荐)。此帐户只能用于从本地主机连接。不授予任何特权。假设您使用GRANT
语句向帐户授予特定权限 。
前面的示例在全局级别授予权限。下一个示例创建三个帐户并授予它们较低级别的访问权限;也就是说,特定的数据库或数据库中的对象。每个帐户的用户名都是 custom
,但主机名部分不同:
CREATE USER 'custom'@'localhost'
IDENTIFIED BY 'password';
GRANT ALL
ON bankaccount.*
TO 'custom'@'localhost';
CREATE USER 'custom'@'host47.example.com'
IDENTIFIED BY 'password';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO 'custom'@'host47.example.com';
CREATE USER 'custom'@'%.example.com'
IDENTIFIED BY 'password';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.addresses
TO 'custom'@'%.example.com';
这三个帐户可以如下使用:
-
该
'custom'@'localhost'
帐户具有访问bankaccount
数据库的所有数据库级权限 。该帐户只能用于从本地主机连接到服务器。 -
该
'custom'@'host47.example.com'
帐户具有访问expenses
数据库的特定数据库级权限 。该帐户只能用于从主机连接到服务器host47.example.com
。 -
该
'custom'@'%.example.com'
帐户具有特定的表级权限,可以从域中的任何主机访问数据库中 的addresses
表 。由于在帐户名称的主机部分使用通配符,该帐户可用于从域中的所有计算机连接到服务器。customer
example.com
%
检查帐户权限和属性
要查看帐户的权限,请使用 SHOW GRANTS
:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+-----------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------+
| GRANT RELOAD, PROCESS ON *.* TO `admin`@`localhost` |
+-----------------------------------------------------+
要查看帐户的非特权属性,请使用 SHOW CREATE USER
:
mysql> SET print_identified_with_as_hex = ON;
mysql> SHOW CREATE USER 'admin'@'localhost'\G
*************************** 1. row ***************************
CREATE USER for admin@localhost: CREATE USER `admin`@`localhost`
IDENTIFIED WITH 'caching_sha2_password'
AS 0x24412430303524301D0E17054E2241362B1419313C3E44326F294133734B30792F436E77764270373039612E32445250786D43594F45354532324B6169794F47457852796E32
REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK
PASSWORD HISTORY DEFAULT
PASSWORD REUSE INTERVAL DEFAULT
PASSWORD REQUIRE CURRENT DEFAULT
启用 print_identified_with_as_hex
系统变量(从 MySQL 8.0.17 开始可用)会导致 SHOW CREATE USER
将包含不可打印字符的哈希值显示为十六进制字符串而不是常规字符串文字。
撤销账户权限
要撤销帐户权限,请使用该 REVOKE
语句。可以在不同级别撤销权限,就像可以在不同级别授予权限一样。
撤销全局权限:
REVOKE ALL
ON *.*
FROM 'finley'@'%.example.com';
REVOKE RELOAD
ON *.*
FROM 'admin'@'localhost';
撤销数据库级权限:
REVOKE CREATE,DROP
ON expenses.*
FROM 'custom'@'host47.example.com';
撤销表级权限:
REVOKE INSERT,UPDATE,DELETE
ON customer.addresses
FROM 'custom'@'%.example.com';
要检查权限撤销的效果,请使用 SHOW GRANTS
:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+---------------------------------------------+
| Grants for admin@localhost |
+---------------------------------------------+
| GRANT PROCESS ON *.* TO `admin`@`localhost` |
+---------------------------------------------+
删除帐户
要删除帐户,请使用该DROP USER
语句。例如,删除之前创建的一些帐户:
DROP USER 'finley'@'localhost';
DROP USER 'finley'@'%.example.com';
DROP USER 'admin'@'localhost';
DROP USER 'dummy'@'localhost';
{{ nComment.author.nickname }}
{{ nComment.time }}