当前位置: 首页 > news >正文

MySQL——数据库的高级操作(二)用户管理(2)创建普通用户

        在创建新用户之前,可以通过 SELECT 语句查看 mysql.user 表中有哪些用户,查询结果如下:

mysql> USE mysql;
Database changed
mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

        从上述结果可以看出,user 表中只有一个 root 用户信息。

        由于 MySQL中存储的数据较多,通常一个 root 用户是无法管理这些数据的,因此需要创建多个普通用户来管理不同的数据,创建普通用户有三种方式,接下来将针对这三种方式进行详细的讲解。

1、使用 GRANT 语句创建用户

        GRANT语句不仅可以创建新用户,还可以对用户进行授权,该语句会自动加载权限表,不需要手动刷新,而且安全、准确、错误少,因此,使用 GRANT 语句是创建用户最常用的方法。

        GRANT语句创建用户的语法格式如下:

GRANT privileges oN database.tableTo 'username'@'hostname'[IDENTIFIED BY [PASSWORD]'password'][, 'username'@'hostname [IDENTIFIED BY [PASSwORD]'password']]...

        上述语法格式中,privileges 参数表示该用户具有的权限信息,database.table 表示新用户的权限范围表,可以在指定的数据库、表上使用自己的权限,username参数是新用户的名称,hostname 参数是主机名,password 参数是新用户的密码。

        使用 GRANT 语句创建一个新用户,用户名为 user1、密码为 123,并授予该用户对chapter08.student 表有查询权限,GRANT 语句如下:

mysql> CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

        上述语句执行成功后,可以通过 SELECT 语句验证用户是否创建成功,具体如下:

mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
| localhost | user1            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
+-----------+------------------+------------------------------------------------------------------------+
7 rows in set (0.00 sec)

        从执行结果可以看出,使用 GRANT语句成功地创建一个新用户 userl,但密码显示的并不是 123,而是一串字符,这是因为在创建用户时,MySQL会对用户的密码自动加密,以提高数据库的安全性。

        需要注意的是,用户使用 GRANT 语句创建新用户时,必须有 GRANT 权限。

2、使用 CREATE USER 语句创建用户

        使用 CREATE USER 语句创建新用户时,服务器会自动修改相应的授权表,但需要注意的是,该语句创建的新用户是没有任何权限的。CREATE USER语句创建用户的语法格式如下:

CREATE USER 'username'@'hostname'[IDENTIFIED BY [PASSWORD]'password'][,'username'@'hostname'[IDENTIFIED BY [PASSwORD]'password']]...

        上述语法格式中,username表示新创建的用户名,hostname 表示主机名,IDENTIFIED BY 关键字用于设置用户的密码,password 表示用户的密码,PASSWORD关键字表示使用哈希值设置密码,该参数是可选的,如果密码是一个普通的字符串,就不需要使用 PASSWORD 关键字。

        使用 CREATE USER 语句创建一个新用户,用户名为 user2、密码为 123,CREATEUSER 语句如下:

mysql> CREATE USER 'user2'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

        上述语句执行成功后,可以通过 SELECT语句验证用户是否创建成功,具体如下:

mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
| localhost | user1            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
| localhost | user2            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
+-----------+------------------+------------------------------------------------------------------------+
6 rows in set (0.00 sec)

        从执行结果可以看出,CREATE USER语句成功地创建了一个 user2 用户。需要注意的是,如果添加的用户已经存在,那么在执行 CREATE USER 语句时会报错。

3、使用 INSERT 语句创建用户

        通过前面的讲解可知,不管是CREATE USER语句还是 GRANT 语句,在创建用户时,实际上都是在 user 表中添加一条新的记录,因此,也可以使用 INSERT 语句直接在该表中添加一个用户。

        INSERT 语句创建用户的语法格式如下:

INSERT INTO mysql.user (Host,User, Password,ssl_cipher、x509_issuer、x509_subject)
VALUES('hostname','username',PASSWORD ('password'),'','','');

        上述语法格式中,mysql.user 参数表示操作的表,Host、User、Password、ssl_cipher、x509_issuer、x509_subject 为相应字段,PASSWORD()是一个加密函数,用于给密码加密。

        需要注意的是,使用 INSERT 语句创建用户时,通常只需添加 Host、User 和Password 这三个字段即可,其他的字段取其默认值,但由于 ssl_cipher、x509 issuer、x509_subject 字段是没有默认值的,因此 INSERT 语句创建用户时,还需要为这几个字段设置初始值。

        使用 INSERT 语句直接在 mysql. user 表中创建一个新用户,用户名为 user3、密码为 123,INSERT 语句如下:

mysql> CREATE USER 'user3'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.01 sec)mysql> GRANT SELECT ON chapter08.student TO 'user3'@'localhost';
Query OK, 0 rows affected (0.00 sec)

        上述语句执行成功后,就可以通过 SELECT 语句验证用户是否创建成功,具体如下:

mysql> SELECT Host, User, authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| Host      | User             | authentication_string                                                  |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | *A3687CD1574820D919D6DF2AC07CA3AA9E5438BE                              |
| localhost | user1            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
| localhost | user2            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
| localhost | user3            | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              |
+-----------+------------------+------------------------------------------------------------------------+
7 rows in set (0.00 sec)

        从执行结果可以看出,使用 INSERT 语句成功地创建一个新用户 user3,但是由于INSERT 语句没有刷新权限表的功能,因此,user3 用户暂时是不能使用的,为了让当前用户生效,还需要手动刷新当前的权限表或重新启动 MySQL服务,刷新权限表的语句如下:

FLUSH PRIVILEGES;

        上述语句执行成功后,就可以使用 user3 用户登录 MySQL 数据库了。

相关文章:

MySQL——数据库的高级操作(二)用户管理(2)创建普通用户

在创建新用户之前,可以通过 SELECT 语句查看 mysql.user 表中有哪些用户,查询结果如下: mysql> USE mysql; Database changed mysql> SELECT Host, User, authentication_string FROM mysql.user; ----------------------------------…...

VIT论文阅读

把图片看成一个个16x16的patch堆起来的 摘要 卷积神经网络不是必备的,一个纯transformer表现也是非常好的 transformer?2500天tpu v3 介绍 大规模上预训练,小规模任务数据集上微调。扩大模型时候还没观察到瓶颈(还没出现过拟合…...

Python编程入门必备:def关键字与函数参数

在Python编程中,函数是组织代码、实现代码复用和模块化的基础单元。通过函数,可以将复杂的操作封装成独立的代码块,提高代码的可读性和维护性。本文将详细介绍Python中函数的定义和使用,包括def关键字、函数参数的各种类型以及函数…...

LiveKit的agent介绍

概念 LiveKit核心概念: Room(房间)Participant(参会人)Track(信息流追踪) Agent 架构图 ​ 订阅信息流 ​ agent交互流程 客户端操作 加入房间 房间创建方式 手动 赋予用户创建房间的…...

青龙面板 升级 及其 依赖更新修复 检测and日志删除等

青龙版本升级 先关闭服务 cd qinglong目录 docker-compose down 关闭 docker pull whyour/qinglong:版本号 //版本号自行选择,如果是为了修复错误,建议版本微升,不然就直接latest 启动 docker-compose up -d 进入容器&#xff0…...

坐牢第三十七天(Qt)

作业&#xff1a; 使用qt做一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPixmap> #include <QBitmap> #include <QLabel> //标签类 #include <QLineEdit> //行编辑器类 #include <QPushBu…...

Vidu 全球首发「主体参照」新功能,一键同步角色特征;GPT-4o 实时音频项目负责人离职创业丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…...

电子地图的主要功能与应用

电子地图&#xff0c;即数字地图&#xff0c;是利用计算机技术&#xff0c;以数字方式存储和查阅的地图。它不仅继承了传统纸质地图的基本功能&#xff0c;还通过现代科技手段实现了诸多创新应用。以下是电子地图的主要功能与应用&#xff1a; 一、主要功能 快速存取与显示&…...

基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的西安旅游管理系统网站【附源码文档】、…...

简单介绍 NVIDIA推出的图形处理单元(GPU)架构“安培架构“

概念 "安培架构"&#xff08;Ampere Architecture&#xff09;是 NVIDIA 推出的一款图形处理单元&#xff08;GPU&#xff09;架构&#xff0c;它是继图灵架构之后的下一代产品。安培架构最初在2020年发布&#xff0c;以其高性能和高效率而闻名&#xff0c;广泛应用…...

Qiskit:量子计算的Python工具包

Qiskit是由IBM开发的开源量子计算软件开发工具包&#xff0c;它提供了一套完整的工具&#xff0c;用于量子电路的设计、模拟、优化和执行。Qiskit支持量子算法的开发&#xff0c;并且可以与IBM的量子计算机硬件进行交互。 Qiskit的主要特点 量子电路设计&#xff1a;Qiskit允…...

Python——贪吃蛇

以下是一个简单的贪吃蛇游戏的Python代码示例&#xff1a; import pygame import time import random# 初始化 Pygame pygame.init()# 定义颜色 BLACK (0, 0, 0) WHITE (255, 255, 255) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0, 255)# 设置屏幕尺寸 screen_width …...

WPF 依赖属性与附加属性(面试长问)

在WPF中&#xff0c;**依赖属性&#xff08;Dependency Property&#xff09;和附加属性&#xff08;Attached Property&#xff09;**是WPF依赖属性系统的重要组成部分。它们虽然都基于依赖属性系统&#xff0c;但用途、定义方式和使用场景有显著差异。以下是两者的详细解释及…...

Python 中的各括号用法

括号的使用 在Python中&#xff0c;括号和中括号有不同的用途&#xff1a; 圆括号 ()&#xff1a; 函数调用&#xff1a;当你调用一个函数时&#xff0c;需要使用圆括号&#xff0c;即使没有参数。print("Hello, World!") # 调用print函数表达式分组&#xff1a;在…...

业务流程建模(BPM)的重要性及其应用

什么是业务流程建模&#xff08;BPM&#xff09;&#xff1f; 业务流程建模&#xff08;BPM&#xff09;是对企业内各项业务流程进行图形化描述的一种方法。它旨在通过可视化的方式帮助企业理解和分析现有的业务流程&#xff0c;从而发现潜在的问题并进行改进。BPM通常采用流程…...

isxdigit函数讲解 <ctype.h>头文件函数

目录 1.头文件 2.isxdigit函数使用 方源一把抓住VS2022&#xff0c;顷刻 炼化&#xff01; 1.头文件 以上函数都需要包括头文件<ctype.h> &#xff0c;其中包括 isxdigit 函数 #include<ctype.h> 2.isxdigit函数使用 isxdigit 函数是判断字符是否为十六进制数…...

Linux中安装NextCloud

切换为 root 账号 Ubutu 系统默认登录的用户为非 root 权限用户&#xff0c;为了能正常安装 nextCloud&#xff0c;需要切换为 root 账号。执行如下命令即可&#xff1a; sudo su 更新及安装基础包 请依次运行如下命令&#xff0c;有遇到询问的Is this ok [y/d/N]的时候直接键…...

【编程基础知识】什么是数据库事务

事务&#xff08;Transaction&#xff09;是数据库管理系统中的一个基本概念&#xff0c;用于确保数据库操作的原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability…...

移植案例与原理 - XTS子系统之应用兼容性测试用例开发

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 startup子系统之syspara_lite系统属性部件 &#xff08;1&#xff09; startup子系统之syspara_lite系统属性部件 &#xff08;2&#xff09; startup子系…...

关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf

一、关于linux里的df命令以及inode、数据块-stat链接数 Linux中df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计&#xff0c;平常这个命令也用得很多&#xff0c;但一般就是使用df -h查看各个分区的空间使用情况&#xff0c;除此外也可以使用df查看当前linux系统…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...