数据库中的用户管理和权限管理

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理结果(其实就是一种网络服务)。所以可以存在多个客户端连接数据库的服务器,实现多用户进行数据库操作。

​ 那么数据库中就一定存在数据库用户的管理:创建用户、删除用户、用户授权、回收权限、修改用户密码等等。(本篇使用MySQL数据库进行案例演示)

​ 本篇一共分为两个部分:用户管理和权限管理。

文章目录

      • 用户管理
        • 用户信息
        • 创建用户
        • 删除用户
        • 修改用户密码
      • 数据库权限
        • 给用户授予权限
        • 回收权限
        • 查看权限

用户管理

​ 若我们平时只能使用root用户,这样会存在很大的安全隐患,所以我们需要创建出普通用户来进行数据库操作。

在这里插入图片描述

​ 如上所示,普通用户只能操作某些数据库,而root用户则可以队所有的数据库进行操作。

用户信息

​ 在MySQL中的用户,他们的信息豆存储在mysql的user表中,如下:

在这里插入图片描述

​ 如上所示,在user表中包含太多的字段,其中:

  • host:表示这个用户可以从哪个主机登陆,若是localhost,表示只能本机登陆
  • user:用户名
  • authentication_string:用户密码通过password函数加密之后的
  • *_prev:用户拥有的权限
  • 其余的字段就不解释了

​ 我们查看当前主机有哪些用户,如下:

mysql> select host, user, authentication_string from user; 
+-----------+---------------+-------------------------------------------+
| host      | user          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | root          |                                           |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
3 rows in set (0.00 sec)
创建用户

​ 语法:

create user '用户名'@'登陆主机/ip' identified by '密码';

​ 案例如下:

mysql> create user 'jzhong'@'localhost' identified by '200408';
Query OK, 0 rows affected (0.05 sec)

mysql> select host, user, authentication_string from user; 
+-----------+---------------+-------------------------------------------+
| host      | user          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | root          |                                           |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | jzhong        | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
+-----------+---------------+-------------------------------------------+
4 rows in set (0.01 sec)

-- 用户创建好之后,我们就可以使用新用户登陆啦:
jzhong@hcss-ecs-dc20:~$ mysql -ujzhong -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.7.29 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.

mysql> 

​ 关于新增用户这里,注意不要轻易添加一个可以在任意地方登陆的user!!!不要将ip地址暴露在公网上!!!这是一种很危险的行为。

删除用户

​ 删除用户语法:

drop user '用户名'@'主机名'

​ 删除用户也可以在user数据库下使用delete操作直接删除对应的用户,不过这样的操作通常不建议。

​ 案例如下:

-- 查询当前系统中有哪些用户
mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| jzhong        | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

-- 删除jzhong用户
-- 删除用户的时候还需要加上对应的host
mysql> drop user jzhong;
ERROR 1396 (HY000): Operation DROP USER failed for 'jzhong'@'%'
mysql> drop user jzhong@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
修改用户密码

​ 修改密码可以是修改自己的密码,也可以是修改指定用户的密码:

-- 修改自己的密码
set password = password('新的密码');

-- root修改指定用户的密码
set password for '用户名'@'主机名' = password('新的密码');

​ 案例如下:

mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| jzhong        | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

mysql> set password for 'jzhong'@'localhost' = password('200408');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| jzhong        | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

​ 修改密码之后,对应位置的md5值都不一样了。

数据库权限

​ 对于刚创建的用户没有任何权限,需要给用户授权用户才能对数据库进行操作,如下:

-- 查看当前登陆mysql的用户
mysql> select user();
+------------------+
| user()           |
+------------------+
| jzhong@localhost |
+------------------+
1 row in set (0.00 sec)

-- 当前能查看的数据库只有一个
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.02 sec)

-- 使用数据库时无对应的权限
mysql> use infromation_schema;
ERROR 1044 (42000): Access denied for user 'jzhong'@'localhost' to database 'infromation_schema'

​ 授权之后才能使用,当我们不想让该用户使用数据库的时候,我们也可以收回用户的权限。

​ MySQL数据库提供的权限列表如下:

暂无图片

给用户授予权限

​ 授权语法:

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

-- 说明:
-- 1. 在权限列表处,若有多种权限,使用逗号隔开
grant select on ...
grant select, delete, create on ...
grant all [privileges] on ... -- 表示赋予用户所有权限
-- 2. *.*代表本系统中的所有数据库的所有对象
-- 3. 库.*代表某个数据库中的所有数据对象
-- 4. identified by可选,若用户存在,赋予权限的同时修改密码,若用户不存在,则直接创建用户

​ 案例如下:

在这里插入图片描述

​ 如上所示,当给jzhong用户授予testDB数据库select权限之后,就可以看见该数据库了。

-- jzhong用户下
mysql> use testDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_testDB |
+------------------+
| account          |
+------------------+
1 row in set (0.00 sec)

-- 查询表内容
mysql> select * from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   |  999.00 |
|  2 | 李四   | 5665.00 |
|  3 | 王五   |  222.00 |
+----+--------+---------+
3 rows in set (0.00 sec)

-- 插入元素失败,没有对应的权限
mysql> insert into account values (4, '赵六', 333);
ERROR 1142 (42000): INSERT command denied to user 'jzhong'@'localhost' for table 'account'

​ 注:若发现赋权之后没有生效,执行如下命令:

flush privileges
回收权限

​ 语法如下:

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

-- 说明:
-- 1. 在权限列表处,若有多种权限,使用逗号隔开
revoke select on ...
revoke select, delete, create on ...
revoke all [privileges] on ... -- 表示赋予用户所有权限
-- 2. *.*代表本系统中的所有数据库的所有对象
-- 3. 库.*代表某个数据库中的所有数据对象

​ 案例如下:

在这里插入图片描述

​ 如上所示,使用root用户收回jzhong用户对testDB的所有权限,jzhong用户就看不见testDB数据库了。

查看权限

​ 查看对某个用户赋予的权限,语法如下:

show grants for '用户名'@'登陆位置';

​ 如下:

mysql> show grants for 'jzhong'@'localhost';
+-------------------------------------------------------------------+
| Grants for jzhong@localhost                                       |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jzhong'@'localhost'                        |
| GRANT SELECT ON `testdb`.* TO 'jzhong'@'localhost'                |
| GRANT ALL PRIVILEGES ON `mysql`.`testdb` TO 'jzhong'@'localhost'  |
| GRANT ALL PRIVILEGES ON `mysql`.`indexdb` TO 'jzhong'@'localhost' |
+-------------------------------------------------------------------+
4 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/910985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML 块级元素和内联(行内)元素详解

在 HTML 中,元素根据它们在页面中的表现方式分为两类:块级元素 和 内联元素(行内元素)。了解块级元素和内联元素的特性与使用方法,是掌握HTML开发的重要基础。本文将深入探讨这两类元素的特点及其在实际开发中的应用。 文章目录 一、块级元素1.1 块级元素是什么?1.2 块级…

科研绘图系列:R语言差异分析双侧柱状图(grouped barplot)

文章目录 介绍加载R包数据画图系统信息介绍 双侧柱状图(grouped barplot),也称为分组柱状图,是一种用于展示不同组别之间比较的数据可视化图表。它通过将不同组别的柱状图并排放置,可以直观地比较不同组在各个类别上的表现或特征。以下是双侧柱状图的一些关键特点和用途:…

【数据结构】哈希/散列表

目录 一、哈希表的概念二、哈希冲突2.1 冲突概念2.2 冲突避免2.2.1 方式一哈希函数设计2.2.2 方式二负载因子调节 2.3 冲突解决2.3.1 闭散列2.3.2 开散列(哈希桶) 2.4 性能分析 三、实现简单hash桶3.1 内部类与成员变量3.2 插入3.3 获取value值3.4 总代码…

Go语言基础语法

一、创建工程 说明: (1)go.mod文件是go项目依赖管理文件,相当于前端的package.json,也就是Java项目中的Maven的pom.xml。 二、打印数据到控制台 (1)引入fmt (2)使用fmt…

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys ry-cloud报错原因解决 ry-cloud 报错 系统监控→在线用户打开后报错 报错信息如下 class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys原因 type导致&#xff…

用 Python 从零开始创建神经网络(一)

用 Python 从零开始创建神经网络(一) 引言1. A Single Neuron:Example 1代码部分: Example 2代码部分: 2. A Layer of Neurons:Example 1代码部分: 引言 本教程专为那些对神经网络已有基础了解…

双指针算法习题解答

1.移动零 题目链接:283. 移动零 - 力扣(LeetCode) 题目解析:该题要求将数组中为0的元素全部转移到数组的末尾,同时不能改变非零元素的相对位置。 解题思路:我们可以用变量dest和cur将该数组分为三个区域。…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术,把国产笔…

SAP ABAP开发学习——WDA 五 使用表格控件实例

目录 实现 先建一个Web Dynpro Component 将两个view关联 input_view中添加按钮 output_view创建按钮 创建一个服务 input_view中使用向导创建两个输入框 output部分创建输出表单 output inbound 创建APPLICATION 效果 实现 先建一个Web Dynpro Component 将两个vi…

qt QCompleter详解

1、概述 QCompleter是Qt框架中的一个类,用于为文本输入提供自动完成功能。它可以与Qt的输入控件(如QLineEdit、QTextEdit等)结合使用,根据用户的输入实时过滤数据源,并在输入控件下方或内部显示补全建议列表。用户可以…

数据采集-Kepware连接倍福(Beckhoff)PLC(OPCUA协议)

KepserverEX 连接倍福(beckhoff)-ADS协议 系列文章目录 数据采集-Kepware 安装证书异常处理 数据采集-Kepware OPCUA 服务器实现 数据采集-Kepware连接倍福(Beckhoff)PLC(ADS协议) 目录 KepserverEX 连接倍福(beckhoff)-ADS协议系列文章目录前言一、OPC UA(OPC统一…

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装

一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载,传false不…

接口测试面试题及答案(后续)

一、你们什么时候测试接口 一般有需求就会做,后台的接口开发好,就可以开始测。例外,如果增加了新需求,也要做接口测试,还有就是开发对后台的接口做了修改,交互逻辑发生变化,我们也要重新对接口…

萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?

随着智慧城市和数字化转型的推进,视频监控系统已成为保障公共安全、提升管理效率的重要工具。特别是在大中型项目中,跨区域的网络化视频监控需求日益增长,这要求视频监控管理平台不仅要具备强大的视频资源管理能力,还要能够适应多…

使用Qt制作一个流程变更申请流程进度以及未读消息提醒

1.1加载界面: 界面要素: 成员信息 变更位置申请 接受消息列表 根据角色加载对应界面。 1.2发起变更申请: 用户点击“发起变更申请”按钮。变更申请对话框可编辑,用户填写申请信息: 申请方(自动填充&…

域名邮箱推荐:安全与稳定的邮件域名邮箱!

域名邮箱推荐及绑定攻略?最好用的域名邮箱服务推荐? 域名邮箱,作为一种个性化且专业的电子邮件服务,越来越受到企业和个人的青睐。烽火将详细介绍域名邮箱登录的全过程,从注册到登录,帮助您轻松掌握这一重…

IDEA:设置类标签栏多行显示

使用场景: 当我们打开的类超出一行,多出来的类会隐藏或者关掉,不利于我们开发。 解决方案: 1.设置多行显示 2.效果

高级图像处理工具

图像处理-高级 1、功能概览 随着社交媒体的普及和个人创作需求的增长,图像处理成为了日常生活中不可或缺的一部分。无论是专业的设计师还是爱好者,都需要一款强大的工具来帮助他们完成各种任务。今天,我们将介绍一款基于Python开发的高级图…

江协科技STM32学习- P38 软件SPI读写W25Q64

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

P5665 [CSP-S2019] 划分

P5665 [CSP-S2019] 划分 难度:省选/NOI-。 考点:单调队列、贪心、前缀和。 题意: 没有题目大意,本题题目描述较长,认真阅读每一个信息。 ​ 这个题的样例有 n n n 组数据,数据从 1 ∼ n 1 \sim n 1∼n…