- MySQL 基础
- MySQL - 首页
- MySQL - 简介
- MySQL - 特性
- MySQL - 版本
- MySQL - 变量
- MySQL - 安装
- MySQL - 管理
- MySQL - PHP 语法
- MySQL - Node.js 语法
- MySQL - Java 语法
- MySQL - Python 语法
- MySQL - 连接
- MySQL - Workbench
- MySQL 数据库
- MySQL - 创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 显示数据库
- MySQL - 复制数据库
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL - 数据库信息
- MySQL 用户
- MySQL - 创建用户
- MySQL - 删除用户
- MySQL - 显示用户
- MySQL - 修改密码
- MySQL - 授予权限
- MySQL - 显示权限
- MySQL - 收回权限
- MySQL - 锁定用户帐户
- MySQL - 解锁用户帐户
- MySQL 表
- MySQL - 创建表
- MySQL - 显示表
- MySQL - 修改表
- MySQL - 重命名表
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 临时表
- MySQL - 修复表
- MySQL - 描述表
- MySQL - 添加/删除列
- MySQL - 显示列
- MySQL - 重命名列
- MySQL - 表锁定
- MySQL - 删除表
- MySQL - 派生表
- MySQL 查询
- MySQL - 查询
- MySQL - 约束
- MySQL - INSERT 查询
- MySQL - SELECT 查询
- MySQL - UPDATE 查询
- MySQL - DELETE 查询
- MySQL - REPLACE 查询
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 运算符和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 运算符
- MySQL - OR 运算符
- MySQL - LIKE 运算符
- MySQL - IN 运算符
- MySQL - ANY 运算符
- MySQL - EXISTS 运算符
- MySQL - NOT 运算符
- MySQL - 不等于运算符
- MySQL - IS NULL 运算符
- MySQL - IS NOT NULL 运算符
- MySQL - BETWEEN 运算符
- MySQL - UNION 运算符
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 运算符
- MySQL - INTERSECT 运算符
- MySQL - INTERVAL 运算符
- MySQL 连接
- MySQL - 使用连接
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自连接
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 触发器
- MySQL - 触发器
- MySQL - 创建触发器
- MySQL - 显示触发器
- MySQL - 删除触发器
- MySQL - BEFORE INSERT 触发器
- MySQL - AFTER INSERT 触发器
- MySQL - BEFORE UPDATE 触发器
- MySQL - AFTER UPDATE 触发器
- MySQL - BEFORE DELETE 触发器
- MySQL - AFTER DELETE 触发器
- MySQL 数据类型
- MySQL - 数据类型
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正则表达式
- MySQL - 正则表达式
- MySQL - RLIKE 运算符
- MySQL - NOT LIKE 运算符
- MySQL - NOT REGEXP 运算符
- MySQL - regexp_instr() 函数
- MySQL - regexp_like() 函数
- MySQL - regexp_replace() 函数
- MySQL - regexp_substr() 函数
- MySQL 函数 & 运算符
- MySQL - 日期和时间函数
- MySQL - 算术运算符
- MySQL - 数值函数
- MySQL - 字符串函数
- MySQL - 聚合函数
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事务
- MySQL - 使用序列
- MySQL - 处理重复项
- MySQL - SQL 注入
- MySQL - 子查询
- MySQL - 注释
- MySQL - 检查约束
- MySQL - 存储引擎
- MySQL - 将表导出到 CSV 文件
- MySQL - 将 CSV 文件导入数据库
- MySQL - UUID
- MySQL - 通用表表达式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分区
- MySQL - 垂直分区
- MySQL - 游标
- MySQL - 存储函数
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字符集
- MySQL - 排序规则
- MySQL - 通配符
- MySQL - 别名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 存储过程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 标准差
- MySQL - 查找重复记录
- MySQL - 删除重复记录
- MySQL - 选择随机记录
- MySQL - SHOW PROCESSLIST
- MySQL - 修改列类型
- MySQL - 重置自动递增
- MySQL - COALESCE() 函数
- MySQL 有用资源
- MySQL - 有用函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用资源
- MySQL - 讨论
MySQL - 创建用户
在 MySQL 中,您可以创建多个用户帐户来访问数据库,每个帐户都有特定的身份验证详细信息,例如密码。可以使用 SQL 语句(例如,创建新用户时的CREATE USER 身份验证,以及分别分配和删除管理权限的GRANT 和REVOKE)授予这些用户特定权限。
MySQL CREATE USER 语句
我们可以使用 MySQL 中的 CREATE USER 语句创建一个新的用户帐户。要执行此语句,当前帐户必须具有 CREATE USER 权限或 MySQL 系统模式的 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;
表将显示如下:
用户 |
---|
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: ******
输出
这将以 sample 用户身份登录,并具有如下所示的相应权限和许可:
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)
用户评论
在 MySQL 中创建用户时,您可以使用 COMMENT 子句向用户添加注释。这提供了有关用户的其他信息或上下文。
示例
在下面的示例中,我们首先删除现有的“sample”@“localhost”用户。然后,我们创建一个新的“sample”@“localhost”用户,同时添加注释来描述用户:
drop user sample@localhost; CREATE USER 'sample'@'localhost' COMMENT 'Sample information';
输出
获得的结果如下所示:
Query OK, 0 rows affected (0.10 sec)
验证
您可以使用以下 SELECT 查询验证属性和注释信息:
SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES WHERE USER='sample' AND HOST='localhost';
生成的输出如下所示:
用户 | 主机 | 属性 |
---|---|---|
sample | localhost | {"comment": "Sample information"} |
用户属性
在创建用户帐户时,您可以使用 ATTRIBUTE 子句向 MySQL 中的用户添加属性。这些属性可以存储有关用户的其他信息。
示例
在这里,我们首先删除现有的“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';
获得的结果如下所示:
用户 | 主机 | 属性 |
---|---|---|
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 用户的语法:
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 中创建用户的客户端程序:
$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" }); //Connecting to 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://127.0.0.1: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.