初识MySQL数据库之用户管理
目录
一、用户管理
二、用户
1. 用户信息
2. 创建用户
3. 用户登录测试
4. 删除用户
5. 设置用户远端登录
6. 修改密码
6.1 修改当前用户的密码
6.2 root用户修改指定用户的密码
三、权限
1. 数据库中的各个权限含义
2. 给用户授权
3. 查看用户拥有权限
4. 授权测试
5. 回收权限
一、用户管理
在以前的文章中,都是在root账户进行一系列CURD操作。但是要知道,在实际的生产过程中,直接使用root账户是存在很大的安全隐患的。此时,就需要进行用户管理。
例如在未来使用数据库时,并不能直接使用root账户进行数据库操作,而是只能使用特定账户操作。这些账户中就别设置了相应的权限,限制该账户可以看到哪些数据库,以及能够对这个数据库中的表执行何种操作等等。
例如现在mysql中存在msg和emp两个数据库,在root账户下, 可以对这两个数据库执行任意操作。但是在其他账户,比如张三的账户下,就只能看到msg数据库,并且只能查看这个数据库中的内容,无法执行其他操作。
二、用户
1. 用户信息
在mysql中,要区分不同的用户,就需要对用户做管理。要管理用户,就需要在mysql中保存用户的信息。因此,mysql中的用户信息,其实也是在mysql中特定的表内保存的。
当安装好mysql后,这个mysql中就会自带一个mysql数据库:
在这个数据库中存在一个user表,这个表中保存的就是用户的信息。
查看user表中的信息:
这个表中还有很多其他内容,这里没有截全,大家可以自行登录自己的mysql查看。在这张截图中,可以看到两个信息,第一个就是host,第二个就是user。其中host表示该用户是从哪里登录的;而user就是用户名称。后面的一堆内容,就是这个用户的权限。
在结尾处还有如下内容:
其中圈出来的部分就是经过加密后的用户密码。
因为这里面的内容太多,为了方便查看,就筛选出需要的内容查看:
2. 创建用户
要创建用户,一般是使用特定的语句创建。但是上文说了,用户数据是保存在表内的。因此,如果你愿意,你甚至可以就用insert语句插入一个用户。当然,这种方法是吃力不讨好的,因为user表中的数据很多,一个一个的填充列数据是很麻烦的。
创建用户的语法如下所示:
其中的用户名,就是要创建的用户的名字。登录主机/ip要注意下, 如果只是想本地登录,就填“localhot”或“127.0.0.1”,如果需要远程登录,后面介绍一下。至于后面的密码,就不必多说了。
注意,在创建用户时,要将用户名和登录主机用@连接,中间不能有空格。因为这两个内容合起来才能算是一个用户。
在这里,就为大家示范一下:
此时其实就创建好一个用户了。
注意,如果大家遇到如下这种情况:
报错说,因为在mysql设置了跳过密码登录,因此此时无法创建用户时,就可以去新开一个窗口,执行“vim /etc/my.cnf”命令,进入mysql的配置文件,然后将“skip-grant-tables”注释掉。注意,在这个过程中,不要退出mysql,因为此时如果还没有为root账户设置密码,就会导致你注释掉免密码登录后,无法登录mysql。
因为,在这之前,大家可以执行“set password for 'root'@'localhost'=password('密码');”命令,提前设置好root账户密码,这样在以后的登录中,就是用密码登录了。
在创建好新用户后,可以执行“flush privileges;”命令刷新一下,保证上面的创建用户操作是有效的。
3. 用户登录测试
当用户创建好后,就可以用这个用户登录看看了:
登录完成后,查看一下当前的数据库:
可以发现,该用户能够看到的数据库的数量,就远远少于在root用户下能看到的数据库数量。这其实是因为该用户的权限问题。在这里先不过多赘述,到后面再介绍用户的权限设置。
如果windows下也装了mysql,就可以在windows中的命令提示符中执行对应的mysql命令尝试登陆。如果你做了这个测试,那么此时登陆是无效的。因为该用户中设置了只允许本地登录,并不允许远端登录。这里就不再测试了。
4. 删除用户
如果大家想删除一个用户,同样的,一种简单粗暴的方法就是直接用delete语句删除。当然,在用户这里,也是有专门的删除用户的语句的:
删除方法如上所示。里面的内容都很好理解,就不再解释了。同样的,这里的用户名和主机名也需要用@连接,中间不能存在空格。
测试一下删除:
此时就将对应用户删除了:
5. 设置用户远端登录
在创建用户时,可以在登录主机的部分填写一个公网ip,用于标识可以让特定的主机从远端登录。但由于大家在此时基本上都只有一台云服务器,所以填一个具体的公网ip没有意义。此时有人可能就想,既然没有多台linux,那在这里填windows的ip地址怎么样?这个方法是没有用的。因为windows下的ip地址是一个私网ip,当经过多层转发后,其实其源地址已经失效,填进去没有什么用处。
因此,在这里可以在登录主机处填"%":
填%的含义就是,允许任意一台主机从远端登录。
注意,虽然在这里使用了%,但是在实际生产中基本是严禁使用它的,因为允许任意ip登录,就意味存在很大的安全问题。因此,如果一定要远端登录,都是要限定好哪些机器可以远端登录到。
同样的,在创建好后,执行“flush privileges;”命令刷新一下,保证生效。如果大家在windows下安装了mysql,就可以到命令提示符中去尝试用新建的用户登录,此时应该就是可以登录成功了的。这里就不再演示了。
6. 修改密码
修改密码一共有两种方式,分别是修改当前用户的密码和root用户修改指定用户的密码。
6.1 修改当前用户的密码
要修改当前用户的密码,可以用如下sql语句:
其中=后面的password是一个函数。数据库中的用户密码一般都不会明文存储,password这个函数就会用一个特定的hash函数帮我们自动加密:
6.2 root用户修改指定用户的密码
在root用户下,我们也可以修改其他用户的密码。语法如下:
例如,在这里可以将上面创建的用户密码修改一下:
在提示这里出现了一个警告,其实是因为这个密码太简单了,所以mysql发出了警告。不用管。
同样的,因为这些数据其实都是存在表里面的,所以也可以用update语句去修改密码。这里就不再演示了。
三、权限
1. 数据库中的各个权限含义
当我们查看mysql库下的user表时可以看到很多列。这些列的含义如下所示:
2. 给用户授权
要给用户授权,可以使用如下sql语句:
在权限列表中,可以授予一个权限,也可以授予多个权限。当授予多个权限时,可以用逗号隔开。如果是想将所有权限都授予指定用户,就可以使用“all”。
如果想将一个数据库下的一个对象的权限交给用户,可以用指定的库名和对象名。
如果想将一个数据库下的所有对象的权限都交给用户,可以用“库名.*”,*的含义就是所有对象。
如果想将这个系统中的所有库的所有对象的权限都交给用户,可以用“*.*”。
identified by是可选项,如果你想在赋权的同时修改用户密码,就可以带上。反之则不用带。
当设置好权限后,可以执行一下如下语句,表示刷新权限,保证权限生效。
3. 查看用户拥有权限
直接到user表中一个个的看用户权限是很麻烦的。因此,可以采用如下语句查看用户拥有的权限:
在这里, 就可以查看下root用户的权限:
4. 授权测试
为了方便测试,首先,在root用户下创建如下一个数据库和表:
创建好后,向里面插入如下数据:
在上文中创建了一个tjj用户,所以这里就用这个新创建的用户做测试。首先登录这个新创建的用户,如果你不知道自己当前使用的是哪个用户,可以用“select user();”语句查看:
在这个用户下,查看数据库:
可以看到,该用户只能看到很少的几个数据库,甚至连刚刚创建的rootDB库都看不见。原因就是当前用户没有能够看到这些库的权限。
首先,可以先将rootDB库下的user表的所有权限交给该用户:
再在tjj用户下查看数据库:
此时就可以看到这个数据库了。然后再查看一下该用户拥有的权限:
第一条语句不用管。直接看第二条。观察后可以发现,这条语句不就是刚刚赋权的时候的语句么,仅仅是在all后面多了一个privileges,这个单词的意思是权限。因此翻译过来,就是“将rootDB库中的user表的所有权限赋予用户tjj@localhost”。
tjj用户用户有了权限后,就可以对这个操作这个表了:
由于是赋予所有权限,所以除了insert,诸如delete、update、alter等等语句都是可以使用的。这里就不再演示了。
5. 回收权限
如果想回收一个用户的权限,就可以使用如下语句:
revoke的意思就是撤回。表示将某个库中的某个对象的指定权限从某个用户处撤回。
因此,可以尝试将在上文中赋予tjj用户的insert权限回收。在root用户下指定如下语句:
再查看该用户的权限:
可以看到,该用户的权限列表就变成了如图所示。经过观察发现,里面少了inset权限。到底是不是这样呢?在tjj用户下试一下insert:
可以看到,此时就报错说没有这个表的insert权限了。当然,其他权限还是在的:
当然,也可以直接回收掉该用户对这个对象的所有权限:
查看该用户的权限:
此时该用户就没有这个表的任何权限了。
在该用户下查看这个表:
可以看到,此时就无法用select查看了。同时我们也可以在该用户下查看一下数据库:
此时就看不到rootDB库了。
如果再将该库中的user表的select权限赋予该用户:
然后再在该用户下查看数据库:
此时又可以看见了。
通过上面的测试,就可以得出一个结论:如果一个普通用户想要看到一个数据库,那么该用户至少需要拥有该数据库下的任意一个对象的至少一个权限。
相关文章:

初识MySQL数据库之用户管理
目录 一、用户管理 二、用户 1. 用户信息 2. 创建用户 3. 用户登录测试 4. 删除用户 5. 设置用户远端登录 6. 修改密码 6.1 修改当前用户的密码 6.2 root用户修改指定用户的密码 三、权限 1. 数据库中的各个权限含义 2. 给用户授权 3. 查看用户拥有权限 4. 授权…...

JVM 类文件结构(class文件)
JVM 本文链接:https://blog.csdn.net/feather_wch/article/details/132116849 类文件结构 1、class文件的组成 无符号数:基本数据类型 u1 u2 u3 u4 描述 数字字符串索引引用 表:复合数据类型,无符号数 表组, _inf…...

PAT乙题1011
答案 #include<iostream> #include<cstdio> using namespace std; typedef long long int ll; int main() {int n,cnt1;cin >> n;while (n--){ll a, b, c; cin >> a >> b >> c;printf("Case #%d: ", cnt);a b > c ? puts(…...

【并发专题】单例模式的线程安全(进阶理解篇)
目录 背景前置知识类加载运行全过程 单例模式的实现方式一、饿汉式基本介绍源码分析 二、懒汉式基本介绍源码分析改进 三、懒汉式单例终极解决方案(静态内部类)(推荐使用方案)基本介绍源码分析 感谢 背景 最近学习了JVM之后&…...

无涯教程-Perl - if...elsif...else语句函数
if 语句后可以跟可选的 elsif ... else 语句,这对于使用单个if ... elsif语句测试各种条件非常有用。 if...elsif...else - 语法 Perl编程语言中的 if ... elsif...else语句的语法是- if(boolean_expression 1) {# Executes when the boolean expression 1 is tr…...

uniapp 实现滑动元素并下方有滚动条显示
用uniapp实现下图的样式 代码如下: <template><view class"content"><view class"data-box" ref"dataBox" touchend"handleEnd"><view class"data-list"><view class"data-ite…...

QT充当客户端模拟浏览器等第三方客户端对https进行双向验证
在 ssl单向证书和双向证书校验测试及搭建流程 文章中,已经做了基于https的单向认证和双向认证,,, 在进行双向认证时,采用的是curl工具或浏览器充当客户端去验证。 此次采用QT提供的接口去开发客户端向服务器发送请求&a…...

【JVM】 垃圾回收篇——自问自答(1)
Q什么是垃圾: 运行程序中,没用任何指针指向的对象。 Q为什么需要垃圾回收? 内存只分配,不整理回收,迟早会被消耗完。 内存碎片的整理,为新对象腾出空间 没有GC程序无法正常进行。 Q 哪些区域有GC&#…...

Image Line FL Studio v21.0.3.3517 Producer版全插件版WIN免费下载完整版
FL Studio 21,也称为 Fruity Loops 21,是一款功能强大的数字音频工作站,被世界各地的音乐制作人和 DJ 使用。无论您是新手还是经验丰富的制作人,FL Studio 21都能为您提供创作专业品质音乐所需的工具。在这篇博文中,我…...

PHP8条件控制语句-PHP8知识详解
我们昨天说了流程控制的结构有顺序结构、选择结构和循环结构。选择结构就是条件结构。 条件控制语句就是对语句中不同条件的值进行判断,进而根据不同的条件执行不同的语句。 在本文中,学习的是if语句、if…else语句、if…elseif语句和switch语句。 1、…...

【PHP代码审计】ctfshow web入门 php特性 93-104
ctfshow web入门 php特性 93-104 web 93web 94web 95web 96web 97web 98web 99web 100web 101web 102web 103web 104 web 93 这段PHP代码是一个简单的源码审计例子,让我们逐步分析它: include("flag.php");: 这行代码将flag.php文件包含进来。…...

CSS元素的显示模式
1、现在我想做成小米左侧边栏这样的效果,该怎么做呢? 2、小米商城触碰之后会显示出新的商品案例 3、一碰到之后会出现这个列表 4、这里涉及到了元素显示模式: 5、用人进行划分可以分为男人和女人,根据男人和女人的特性进行相应的…...

Go strings.Title方法被废弃(Deprecated)
strings.Title的使用 在传统中,我们可以通过如下形式将每个单词的首字母变成大写字母,示例如下: func TestTitle(t *testing.T) { fmt.Println(strings.Title("hello world")) fmt.Println(strings.Title("hell golang&qu…...

vuejs源码分析之全局API(vm.$off)
vue在初始化的时候会给vue对象本身挂载一些全局的api。今天我们一个一个来看这些api。 vm.$off方法 这个方法是用来移除自定义事件监听器。 他的用法 vm.$off(event, calback)第一个参数event取值可以是string字符串,也可以是Array<string>也就是说既可以删…...

elasticSearch常见的面试题
常见的面试问题 描述使用场景 es集群架构3个节点,根据不同的服务创建不同的索引,根据日期和环境,平均每天递增60*2,大约60Gb的数据。 调优技巧 原文参考:干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…...

第一课-前提-Stable Diffusion 教程
学习 SD 的前提是电脑配置! SD 参考配置: 建议选择台式机 i5 CPU, 内存16GB,N卡 RTX3060, 8G显存以上的配置(最低配) 在此基础上的配置越高越好。 比如,cpu i7 更好,显卡能有 RTX4090 更好,32显存要能有最好,嘿嘿嘿。 如何查看自己的显卡配置? Win+R 输入 “dxdiag…...

Python 开发工具 Pycharm —— 使用技巧Lv.2
pydoc是python自带的一个文档生成工具,使用pydoc可以很方便的查看类和方法结构 本文主要介绍:1.查看文档的方法、2.html文档说明、3.注释方法、 一、查看文档的方法 **方法1:**启动本地服务,在web上查看文档 命令【python3 -m…...

代码随想录第39天 | 62. 不同路径、63.不同路径II
62. 不同路径 动态规划五部曲: dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。dp[i]…...

QMT入门—初识QMT
对于普通投资者来说,每天实时盯盘实在是无聊又无趣,特别是临时有事还会错过行情。如果能把自己的投资策略用代码实现,通过程序来自动买卖股票那该有多好,这样就不会错过行情也不会不按交易纪律来操作了。 解决办法有两种…...

C 语言的 return 语句
有返回值的函数要带 return 语句, return 后面是一个表达式, return 语句将表达式的值返回给主调函数. 一个函数也可以有多个 return 语句, 比如存在于不同的分支中, 但只能有一条 return 语句被执行, 然后程序的控制权就从被调函数传到主调函数. 对于有返回值但没有带 retur…...

企业级Vue路由角色权限应该怎么做?
角色权限 角色权限,简单来说就是登录的用户能看到系统的哪些页面,不能看到系统的哪些页面。一般是后台管理系统才会涉及到如此复杂的角色权限。 对于 vue 技术栈,实现角色权限一般有两种方式。 第一种是利用 beforeEach 全局前置守卫。 第…...

3.2.0 版本预告!Apache DolphinScheduler API 增强相关功能
Apache DolphinScheduler 3.2.0 版本即将发布,在此之前,为了让用户提前了解到大家所期待的新功能,我们制作了视频来”剧透“一些核心新发布。此前,我们比较全面地”剧透“的 3.2.0 版本的新功能,这次,我们来…...

测试工程师的工作
目录 1.何为软件测试工程师? 2.软件测试工程师的职责? 3.为什么要做软件测试? 4.软件测试的前途如何? 5.工具和思维谁更重要? 6.测试和开发相差大吗? 7.成为测试工程师的必备条件 8.测试的分类有哪…...

压力测试与测试工具jmeter的介绍
目录 一、性能指标 二、jmeter (一)JMeter 安装 (二)JMeter 压测示例 1、添加线程组 2、添加 HTTP 请求 3、添加监听器 4、启动压测&查看分析结果 (三)JMeter Address Already in use 错误解决 压力测…...

解析整型最大值(Integer.MIN_VALUE)溢出变为最小值(Integer.MAX_VALUE)
解析整型最大值(Integer.MIN_VALUE)溢出变为最小值(Integer.MAX_VALUE)结论分析 解析整型最大值(Integer.MIN_VALUE)溢出变为最小值(Integer.MAX_VALUE) 解析整型最大值(Integer.MIN_VALUE)溢出变为最小值(Integer.MAX_VALUE) ,java 二进制 最小值 减法 减1 结论 …...

【openpcdet】dbinfo内的信息
这就是kitti_dbinfos_train_sfd_seguv.pkl中【car】类别存储的信息。...

clickhouse查询缓存
为了实现最佳性能,数据库需要优化其内部数据存储和处理管道的每一步。但是数据库执行的最好的工作是根本没有完成的工作!缓存是一种特别流行的技术,它通过存储早期计算的结果或远程数据来避免不必要的工作,而访问这些数据的成本往…...

vue中使用Base64加密、解密以及des加密、解密
Base64加密、解密 第一步: npm install js-base64 --save 下载依赖 第二步: 直接引入即可 import { Base64 } from js-base64; 第三步: Base64.encode(xxxx) 其中 .encode() 加密 .decode() 解密 中间不需要使用加密的key等…...

关于丢失安卓秘钥的撞sha-1值的办法
实验得知,安卓sha-1和keytool生成秘钥签名文件的时间有关。 前提条件是,开发者必须知道生成秘钥的所有细节参数 以下是撞文件代码(重复生成) import time import osidx 0while True:cmdkeytool -keyalg RSA -genkeypair -alia…...

maven如何打包你会吗?
1.新建一个maven项目,在main/java中建立Main类 public class Main {public static void main(String[] args) {System.out.println("hello java ...");} } 2.添加依赖,使其成为可执行包 <build><plugins><!--打包成为可执行包-…...