Mysql 简明教程
MySQL - Create Users
在 MySQL 中,你可以创建多个用户帐户以访问数据库,每个帐户都有特定的身份验证详细信息,如密码。可以使用 SQL 语句为这些用户授予特定权限,如 CREATE USER 用于在创建新用户时的身份验证,以及 GRANT 和 REVOKE 分别用于分配和移除管理权限。
The MySQL CREATE USERS Statement
我们可以使用 MySQL 中的 CREATE USER 语句创建新用户帐户。要执行此语句,当前帐户必须具有 CREATE USER 权限或 MySQL 系统架构的 INSERT 权限。
Syntax
以下是 MySQL CREATE USER 语句的语法 -
CREATE USER 'user_name'@'host_name' IDENTIFIED BY 'password';
其中,
-
user_name 是你要创建的用户的名称。
-
hostname 指定了用户可以从中连接的主机。
-
password 是用户的密码。
Granting Privileges in MySQL
你可以使用 GRANT ALL 语句授予已创建用户所有权限。这让你可以为用户授予访问数据库、表格的特定权限,以及在其中执行诸如 SELECT、INSERT 或 DELETE 等操作的权限。
Logging as a Different User
要在 MySQL 中以不同的用户身份登录,如果你已经登录,你应该首先退出当前 MySQL 会话,然后在系统的命令提示符或终端中执行命令 -u user_name -p ,而不是在 MySQL 外壳中执行。
Example
在此,我们执行 -u sample -p 命令。运行该命令后,系统将提示你输入指定用户的密码。输入正确的密码以按如下所示登录 -
mysql -u sample -p
Enter password: ******
Output
这将使你以样本用户登录,并具有适当的权限和许可,如下所示 -
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.22 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
The Expire Clause
如果你使用 expire 子句,旧密码(当前密码)将立即过期,用户需要在首次连接时选择新密码。
Example
在此,我们首先移除现有用户“sample'@'localhost' -
DROP user sample@localhost;
我们现在创建一个新用户“sample'@'localhost',密码为“MyPassword”,同时立即使密码过期,强制用户在首次登录时设置新密码 -
CREATE USER 'sample'@'localhost'
IDENTIFIED BY 'MyPassword' PASSWORD EXPIRE;
现在,如果你以新创建的用户身份登录,将生成一个错误。因此,要以新创建的用户身份登录,请在 MySQL 目录的 bin 文件夹中浏览命令提示符并执行以下命令 -
C:\Program Files\MySQL\MySQL Server 8.0\bin> mysql -u sample@localhost -p
Enter password: **********
此时执行任何 MySQL 命令都会触发以下错误消息 -
select now();
获得的输出如下所示 −
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
密码已过期,因此会生成上述错误消息。要解决此问题,我们需要使用以下命令更改(重置)密码:
SET PASSWORD='passwordtest';
下面是生成的输出−
Query OK, 0 rows affected (0.34 sec)
您还可以设置 EXPIRE 子句的间隔以实施定期密码更改,如下所示:
DROP user sample@localhost;
CREATE USER 'sample'@'localhost'
IDENTIFIED BY 'MyPassword'
PASSWORD EXPIRE INTERVAL 25 DAY
FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1;
执行上面的代码后,我们得到以下输出: -
Query OK, 0 rows affected (0.20 sec)
User Comment
在 MySQL 中创建用户时,可以使用 COMMENT 子句为用户添加注释。这提供了有关用户的附加信息或上下文。
User Attribute
在 MySQL 中为用户创建用户帐户时,可以使用 ATTRIBUTE 子句为用户添加属性。这些属性可以存储有关用户的附加信息。
The IF NOT EXISTS Clause
如果您尝试创建具有现有名称的用户,则会生成错误。为防止此错误并确保仅在用户不存在的情况下创建用户,您可以使用“IF NOT EXISTS”子句。
Example
在下面的示例中,我们正在创建一个名为 'sample@localhost' 的用户,而不使用“IF NOT EXISTS”子句:
CREATE USER 'sample@localhost';
我们可以在下面的输出中看到生成了一个错误:
ERROR 1396 (HY000): Operation CREATE USER failed for 'sample@localhost'@'%'
但是,如果我们在 CREATE 语句中使用“IF NOT EXISTS”子句,则将会创建一个新用户,如果具有给定名称的用户已经存在,则将忽略查询:
CREATE USER IF NOT EXISTS 'sample@localhost';
以下是所获得的输出 −
Query OK, 0 rows affected, 1 warning (0.01 sec)