❮ MySQL 数据库信息
MySQL DROP USER 删除用户语句 ❯
MySQL - 创建用户
更新于 2025/6/19 15:22:17
MySQL CREATE USERS 语句
在 MySQL 中授予权限
以其他用户身份登录
Expire 子句
用户注释
用户属性
IF NOT EXISTS 子句
使用客户端创建用户程序
在 MySQL 中,您可以创建多个用户帐户来访问数据库,每个帐户都具有特定的身份验证详细信息,例如密码。可以使用 SQL 语句授予这些用户特定的权限,例如,在创建新用户时使用 CREATE USER 进行身份验证,以及分别使用 GRANT 和 REVOKE 分配和移除管理权限。
MySQL CREATE USERS 语句
我们可以使用 MySQL 中的 CREATE USER 语句创建新的用户帐户。要执行此语句,当前账户必须具有 MySQL 系统架构的 CREATE USER 权限或 INSERT 权限。
语法
以下是 MySQL CREATE USER 语句的语法 -
CREATE USER 'user_name'@'host_name' IDENTIFIED BY 'password';
其中:
user_name 是您需要创建的用户的名称。
hostname 指定用户可以连接的主机。
password 是用户的密码。
示例
在以下查询中,我们将创建一个名为"sample"的用户,该用户只能从"localhost"主机连接,并将其密码设置为"123456"。请确保您已使用具有管理员权限 (root) 的用户登录 -
CREATE USER 'sample'@'localhost' IDENTIFIED BY '123456';
输出
输出将显示为 −
Query OK, 0 rows affected (0.12 sec)
验证
您可以使用以下查询验证用户列表 −
SELECT USER FROM MySQL.USER;
表格将显示如下 −
USER
mysql.infoschema
mysql.session
mysql.sys
myuser
openkm
root
sample
在 MySQL 中授予权限
您可以使用 GRANT ALL 语句向已创建的用户授予所有权限。这允许您向用户授予特定权限,例如访问数据库、表以及对其执行 SELECT、INSERT 或 DELETE 等操作。
语法
以下是在 MySQL 中授予所有权限的语法 -
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
示例
以下查询授予用户"sample"从"localhost"主机连接时对任何数据库或表执行任何操作的完整权限,从而完全控制本地 MySQL 服务器 -
GRANT ALL PRIVILEGES ON * . * TO 'sample'@'localhost';
输出
输出将显示为 -
Query OK, 0 rows affected (0.02 sec)
以其他用户身份登录
要在 MySQL 中以其他用户身份登录,如果您已登录,请先退出当前 MySQL 会话,然后在系统的命令提示符或终端(而不是 MySQL Shell 本身)中执行命令 -u user_name -p。
示例
此处,我们执行 -u sample -p 命令。运行该命令后,系统将提示您输入指定用户的密码。请输入正确的密码进行登录,如下所示 -
mysql -u sample -p
Enter password: ******
输出
这将以示例用户身份登录,并具有如下所示的相应权限和权限 -
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.
Expire 子句
如果使用 expire 子句,旧密码(当前密码)将立即过期,用户需要在首次连接时设置新密码。
示例
这里,我们首先删除现有用户"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 注释
在 MySQL 中创建用户时,您可以使用 COMMENT 子句为用户添加注释。这可以提供关于用户的附加信息或上下文。
示例
在以下示例中,我们首先删除现有的 'sample'@'localhost' 用户。然后,创建一个新的 'sample'@'localhost' 用户,并添加一条注释来描述该用户 -
drop user sample@localhost;
CREATE USER 'sample'@'localhost' COMMENT '示例信息';
输出
获得的结果如下所示 -
Query OK, 0 rows affected (0.10 sec)
验证
您可以使用以下 SELECT 查询验证属性和注释信息 -
SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
WHERE USER='sample' AND HOST='localhost';
生成的结果如下所示 -
USER
HOST
ATTRIBUTE
sample
localhost
{"comment": "Sample information"}
用户属性
在 MySQL 中,创建用户帐户时,可以使用 ATTRIBUTE 子句为用户添加属性。这些属性可以存储有关用户的其他信息。
示例
在这里,我们首先删除现有的"sample@localhost"用户。然后,创建一个新的"sample@localhost"用户,并将属性"attr1"和"attr2"分别设置为与该用户帐户关联的"val1"和"val2" -
DROP USER sample@localhost;
CREATE USER 'sample'@'localhost'
ATTRIBUTE '{"attr1": "val1", "attr2": "val2"}';
得到的结果如下所示 -
输出
Query OK, 0 rows affected (0.09 sec)
验证
您可以使用以下 SELECT 查询验证属性和注释信息 -
SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
WHERE USER='sample' AND HOST='localhost';
结果如下所示 -
USER
HOST
ATTRIBUTE
sample
localhost
{"attr1": "val1", "attr2": "val2"}
IF NOT EXISTS 子句
如果您尝试创建一个名称已存在的用户,则会生成错误。为了避免此错误并确保仅在用户不存在时才创建用户,您可以使用"IF NOT EXISTS"子句。
示例
在下面的示例中,我们将创建一个用户"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)
使用客户端程序创建用户
除了使用 MySQL 查询在 MySQL 数据库中创建用户外,我们还可以使用客户端程序创建用户。
语法
以下是使用各种编程语言创建 MySQL 用户的语法 -
PHP
NodeJS
Java
Python
MySQL PHP 连接器 mysqli 提供了一个名为 query() 的函数,用于在 MySQL 数据库中执行 SQL 查询。要在 MySQL 中创建用户,我们需要使用此函数执行 CREATE USER 语句,如下所示:-
$sql = "CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'";
$mysqli->query($sql);
要使用 NodeJS 程序创建用户,我们需要使用名为 query() 的函数执行 CREATE USER 语句,如下所示:
sql= " CREATE USER [IF NOT EXISTS] account_name IDENTIFIED BY 'password';
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
要使用 Java 程序在 MySQL 数据库中创建用户,我们需要使用名为 execute() 的 JDBC 函数执行 CREATE USER 语句,如下所示:-
sql = "CREATE USER 'USER_NAME'@LOCALHOST INDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'PASSWORD'";
statement.execute(sql);
MySQL Connector/Python 提供了一个名为 execute() 的函数,用于在 MySQL 数据库中执行 SQL 查询。要在 MySQL 数据库中创建用户,我们需要使用此函数执行 CREATE USER 语句,如下所示:-
sql = "CREATE USER 'UserNew'@'localhost' IDENTIFIED BY 'newPassword'";
cursorObj.execute(sql)
示例
以下是在 MySQL 中创建用户的客户端程序:-
PHP
NodeJS
Java
Python
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass);
if($mysqli->connect_errno ) {
printf("Connect failed: %s", $mysqli->connect_error);
exit();
}
//printf('Connected successfully.');
$sql = "CREATE USER 'Revathi'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'";
if($mysqli->query($sql)){
printf("User created successfully...!");
}
if($mysqli->error){
printf("Failed..!" , $mysqli->error);
}
$mysqli->close();
输出
获得的输出如下 -
User created successfully...!
var mysql = require('mysql2');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "Nr5a0204@123"
});
//连接到 MySQL
con.connect(function (err) {
if (err) throw err;
console.log("Connected!");
console.log("--------------------------");
//Creating User
sql = "CREATE USER 'sample'@'localhost' IDENTIFIED BY '123456';"
con.query(sql);
//List of users
sql = "select user from MySQl.user;"
con.query(sql, function(err, result){
if (err) throw err
console.log(result)
});
});
输出
生成的输出如下 -
Connected!
--------------------------
[
{ user: 'mysql.infoschema' },
{ user: 'mysql.session' },
{ user: 'mysql.sys' },
{ user: 'root' },
{ user: 'sample' }
]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class CreateUsers {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/TUTORIALS";
String user = "root";
String password = "password";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, password);
Statement st = con.createStatement();
//System.out.println("Database connected successfully...!");
String sql = "CREATE USER 'Vivek'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'";
st.execute(sql);
System.out.println("User 'Vivek' created successfully...!");
}catch(Exception e) {
e.printStackTrace();
}
}
}
输出
获得的输出如下所示 -
User 'Vivek' created successfully...!
import mysql.connector
# creating the connection object
connection = mysql.connector.connect(
host='localhost',
user='root',
password='password',
database='textx'
)
# Create a cursor object for the connection
cursorObj = connection.cursor()
cursorObj.execute("CREATE USER 'UserNew'@'localhost' IDENTIFIED BY 'newPassword'")
print("User 'newUser' is created successfully.")
cursorObj.close()
connection.close()
输出
以下是上述代码的输出 -
User 'newUser' is created successfully.
❮ MySQL 数据库信息
MySQL DROP USER 删除用户语句 ❯