从入门到精通【MySQL】视图与用户权限管理
文章目录
- 📕1. 视图
- ✏️1.1 视图的基本概念
- ✏️1.2 试图的基本操作
- 🔖1.2.1 创建视图
- 🔖1.2.2 使用视图
- 🔖1.2.3 修改数据
- 🔖1.2.4 删除视图
- ✏️1.3 视图的优点
- 📕2. 用户与权限管理
- ✏️2.1 用户
- 🔖2.1.1 查看用户
- 🔖2.1.2 创建用户
- 🔖2.1.3 修改密码
- 🔖2.1.4 删除用户
- ✏️2.2 权限与授权
- 🔖2.2.1 给用户授权
- 🔖2.2.2 回收用户授权
📕1. 视图
✏️1.1 视图的基本概念
视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表⼀样使用视图进行查询、更新和管理。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。
✏️1.2 试图的基本操作
🔖1.2.1 创建视图
create view 列名1,列名2,列名3 as select 查询语句...
view 是视图的关键字
🔖1.2.2 使用视图
🌰例如:只查询用户的姓名和总分(隐藏学号和各科成绩)
# 使⽤真实表进⾏查询
select s.name, sum(sc.score) total from student s, score sc
where s.id = sc.student_id
group by sc.student_id order by s.id;-- 缺点:可以随时在select关键字后加上学号和各科成绩字段,会暴露学生信息,不安全
# 创建视图
create view v_student_total_points as
select s.id, s.name, sum(sc.score) total from student s, score sc
where s.id = sc.student_id
group by s.id order by s.id;-- 使用视图进行查询
select * from v_student_total_points;
+-----------+-------+
| name | total |
+-----------+-------+
| 唐三藏 | 469 |
| 孙悟空 | 179.5 |
| 猪悟能 | 200 |
| 沙悟净 | 218 |
| 宋江 | 118 |
| 武松 | 178 |
| 李逹 | 172 |
+-----------+-------+
-- 只能查询出姓名和总分,进一步保护了学生的个人信息
🌰例如:视图和真实表进行表连接查询
select * from v_student_total_points v, student s where v.id = s.id;-- 视图本质上是一张虚拟的表,所以可以用视图与真实表进行表连接查询
🔖1.2.3 修改数据
- 通过真实表修改数据,会影响视图
# 修改唐三藏的JAVA成绩为99分update score set score = 99 where student_id = 1 and course_id = 1;# 查询视图,发现唐三藏这条记录已被修改
select * from v_student_socre;
- 通过视图修改数据会影响基表
# 更新视图
update v_student_socre_v1 set score = 99 where score_id = 3;# 是看真实表数据已被修改
select * from score where student_id = 1 and course_id = 5;
注意事项:
1. 修改真实表会影响视图,修改视图同样也会影响真实表
2. 以下视图不可更新:
-------创建视图时使用聚合函数的视图
-------创建视图时使用 DISTINCT
-------创建视图时使用 GROUP BY 以及 HAVING子句
-------创建视图时使用 UNION 或 UNION ALL
-------查询列表中使用子查询
-------在FROM子句中引用不可更新视图
🔖1.2.4 删除视图
# 语法
drop view 视图名;
✏️1.3 视图的优点
- 简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需查询视图而无需了解底层的复杂逻辑。
- 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的用户表中,可以创建一个不包含密码列的视图,普通用户只能访问这个视图,而不能访问原始表,进一步保证了安全问题。
- 逻辑数据独立性:视图提供了一种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的应用程序。确保了应用程序与数据库的解耦
- 重命名列:视图允许用户重命名列名,以增强数据可读性。
📕2. 用户与权限管理
数据库服务安装成功后默认有一个root用户,可以新建和操纵数据库服务中管理的所有数据库。在真
实的使用过程中,通常每个应用对应着一个数据库,我们只希望某个用户只能操纵和管理当前应用对
应的那个数据库,而不能操纵和管理其他应用的数据库,这时就可以添加⼀个用户并指定用户的权限

如上图所示:
root 可以访问和操纵所有的数据库:DB1, DB2, DB3, DB4
普通用户1 只能访问和操纵数据库DB1
普通用户2 只能访问和操纵数据库DB3
只读用户1 只能访问数据库DB3
只读用户2 只能访问数据库DB4
✏️2.1 用户
🔖2.1.1 查看用户
-- 选择数据库
use mysql;-- 查看表结构
desc user;-- 查看用户表
select * from user;


host: 允许登录的主机,相当于白名单,如果是localhost,表示只能从本机登陆
user: 用户名
*_priv: 用户拥有的权限,Y表示有权限,N表示没有权限
authentication_string: 加密后的用户密码
🔖2.1.2 创建用户
create user if not exists 'user_name'@'host_name' identified by 'auth_string';
user_name: 用户名,用单引号包裹,区分大小写
host_name: 主机或IP(段),⽤单引号包裹
auth_string: 真实密码,有些密码策略不允许使用简单密码
例如:创建名为zhuxulong 密码为123456 的账户
create user if not exists 'zhuxulong'@'172.20.109.85' identified by '123456';

注意事项:
- 如果不指定host_name相当于’user_name’@‘%’, %表示所有主机都可以连接到数据库,强烈建
议不要这样设置,因为会导致严重的安全问题 - user_name和host_name分别用单引号包裹,如果写成’user_name@host_name’, 相当于’user_name@host_name’@‘%’
- host_name可以通过子网掩码设置主机范围
A: 198.0.0.0 : A段网络中的任意一台主机
B: 198.51.0.0 B段网络中的任意一台主机’
C: 198.51.100.0 C段网络中的任意一台主机
D: 198.51.100.1 :只包含特定IP地址的主机
🔖2.1.3 修改密码
# 为指定⽤⼾设置密码 【推荐】
ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string';# 为指定⽤⼾设置密码
SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string';# 为当前登录⽤⼾设置密码
SET PASSWORD = 'auth_string';
🔖2.1.4 删除用户
DROP USER [IF EXISTS] 'user_name'@'host_name'[, ...];
✏️2.2 权限与授权
MySQL内置支持的权限列表

🔖2.2.1 给用户授权
刚刚创建的用户没有任何权限,我们需要手动为新用户授权.
grant 权限名 on priv_level to 'user_name'@'host_name' [WITH GRANT OPTION]
权限名:根据类型,参考根据列表4.1中的Privilege列
priv_level: * | . | db_name.* | db_name.tbl_name | tbl_name,比如*.*表示所有数据库下的所有表
‘user_name’@‘host_name’:指定用户
[WITH GRANT OPTION]:可选,允许用户将自己的权限授权给其它用户
示例: 为刚刚创建的zhuxulong用户授予test数据库student表的select权限
grant select on test.student to 'zhuxulong'@'172.20.109.85';
🔖2.2.2 回收用户授权
revoke 权限名 on 数据库名.表名 from 'user_name'@'host_name';
相关文章:
从入门到精通【MySQL】视图与用户权限管理
文章目录 📕1. 视图✏️1.1 视图的基本概念✏️1.2 试图的基本操作🔖1.2.1 创建视图🔖1.2.2 使用视图🔖1.2.3 修改数据🔖1.2.4 删除视图 ✏️1.3 视图的优点 📕2. 用户与权限管理✏️2.1 用户🔖…...
C++中的next_permutation全排列函数
目录 什么是全排列用法实现原理自定义比较函数 注意事项相关题目1.AB Problem2.P1088 火星人 什么是全排列 全排列是指从一组元素中按照一定顺序(按字典序排列)取出所有元素进行排列的所有可能情况。 例如,对于集合{1,2,3},它的全排列包括&a…...
修改el-select背景颜色
修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式(推荐) */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…...
dockercompose文件仓库
mysql version: 3 # 使用docker-compose的版本,根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限(确保MySQL容器可以读写这些目录) # chmod 777 /ho…...
【C++入门:类和对象】[3]
C入门:类和对象 拷贝构造(拷贝初始化) 拷贝构造是构造函数的重载 class Date { public:Date(int year1,int month1,int day1) { _yearyear; _monthmonth; _dayday; } Date(const Date& d)//(拷贝构造,把d1传参给d)引用传参不改变使用const //注意使用&,不然会无穷递…...
【mdlib】0 全面介绍 mdlib - Rust 实现的 Markdown 工具集
mdlib 是由开发者 bahdotsh 创建的一个多功能 Markdown 工具集合,包含两个主要组件:一个轻量级 Markdown 解析库和一个功能完善的个人 Wiki 系统。该项目完全采用 Rust 实现,兼具高性能与跨平台特性。 核心组件 Markdown 解析库 特性&#…...
今日CSS学习浮动->定位
------------------------------------------------------------------------------------------------------- CSS的浮动 float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。 float 属性定义元素在哪个方向浮…...
如何实现Spring Boot应用程序的安全性:全面指南
在现代 Web 开发中,安全性是 Spring Boot 应用程序的核心需求,尤其是在微服务、云原生和公开 API 场景中。Spring Boot 结合 Spring Security 提供了一套强大的工具,用于保护应用程序免受常见威胁,如未经授权的访问、数据泄露、跨…...
YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】
1.CPA介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强,显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中,并在物体检测及其他视觉任务中设立了新的性能标准,展现了广泛的应用潜力。 关于CPA-E…...
Python 项目环境配置与 Vanna 安装避坑指南 (PyCharm + venv)
在进行 Python 项目开发时,一个干净、隔离且配置正确的开发环境至关重要。尤其是在使用像 PyCharm 这样的集成开发环境 (IDE) 时,正确理解和配置虚拟环境 (Virtual Environment) 是避免许多常见问题的关键。本文结合之前安装 Vanna 库时遇到的问题&#…...
第52讲:农业AI + 区块链——迈向可信、智能、透明的未来农业
目录 一、为什么农业需要“AI+区块链”? 二、核心应用场景解读 1. 农产品溯源系统 2. 农业信贷与保险精准评估 3. 农业碳足迹追踪与碳汇交易 三、案例实战分享:智能溯源 + 区块链合约 四、面临挑战与展望 五、总结 在数字农业时代,“AI” 和 “区块链” 是两股不容忽…...
模板偏特化 (Partial Specialization)
C 模板偏特化 (Partial Specialization) 模板偏特化允许为模板的部分参数或特定类型模式提供定制实现,是 静态多态(Static Polymorphism) 的核心机制之一。以下通过代码示例和底层原理,全面解析模板偏特化的实现规则、匹配优先级…...
【防火墙 pfsense】1简介
(1) pfSense 有以下可能的用途: 边界防火墙 路由器 交换机 无线路由器 / 无线接入点 (2)边界防火墙 ->要充当边界防火墙,pfSense 系统至少需要两个接口:一个广域网(WAN࿰…...
Qt UDP组播实现与调试指南
在Qt中使用UDP组播(Multicast)可以实现高效的一对多网络通信。以下是关键步骤和示例代码: 一、UDP组播核心机制 组播地址:使用D类地址(224.0.0.0 - 239.255.255.255)TTL设置:控制数据包传播范围(默认1,同一网段)网络接口:指定发送/接收的物理接口二、发送端实现 /…...
线上助农产品商城小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码,旨在为农产品销售搭建一个高效、便捷的线上平台,助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架,FastAdmin作为快速开发框架,UniApp作为跨…...
【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性
在Maven项目中,POM (Project Object Model) 文件是核心配置文件,而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置,并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…...
基于Matlab的车牌识别系统
1.程序简介 本模型基于MATLAB,通过编程创建GUI界面,基于Matlab的数字图像处理,对静止的车牌图像进行分割并识别,通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等,并定位车牌的文字,实现字符的…...
three.js精灵及精灵材质、Shader源码分析
在Three.js中,Sprite(精灵)用于创建始终面向相机的2D元素,适用于标签、图标或粒子效果。本文将分析其源码及Shader实现。 1. sprite的基本使用方法 创建精灵材质: 精灵材质有个特殊的参数rotation,可以让其旋转一定的角度。 const material = new THREE.SpriteMateria…...
Kubernetes Docker 部署达梦8数据库
Kubernetes & Docker 部署达梦8数据库 一、达梦镜像获取 目前达梦官方暂未在公共镜像仓库提供Docker镜像,需通过达梦官网联系获取官方镜像包。 二、Kubernetes部署方案 部署配置文件示例 apiVersion: apps/v1 kind: Deployment metadata:labels:app: dm8na…...
探索 CameraCtrl模型:视频生成中的精确摄像机控制技术
在当今的视频生成领域,精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性,导致生成的视频在摄像机运动方面不够理想。为了解决这一问题,一种名为 CameraCtrl 的创新文本到视频模型…...
Streamlit从入门到精通:构建数据应用的利器
在数据科学与机器学习日益普及的今天,如何快速将模型部署为可交互的应用成为了许多数据科学家的重要任务。Streamlit,作为一个开源的Python库,专为数据科学家设计,能够帮助我们轻松构建美观且直观的Web应用。本文将从入门到精通&a…...
【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库
深度解析FaceAI:一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南:项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…...
快速上手GO的net/http包,个人学习笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …...
达梦DMDSC初研
1.文件系统 1.1文件系统DMASM DMASM是一个分布式文件系统,用来管理块设备的磁盘和文件,DMASMCMD将物理磁盘格式化后,变成可识别、可管理的 ASM磁盘,再通过 ASM磁盘组将一个或者多个 ASM磁盘整合成一个整体提供文件服务。ASM磁盘…...
Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
前引:当算力不再是“奢侈品” ,在人工智能、3D渲染、科学计算等领域,算力一直是横亘在个人与企业面前的“高墙”。高性能服务器价格动辄数十万元,专业设备维护成本高,普通人大多是望而却步。然而,Cephalon算…...
深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
目录 深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret一、目录结构二、ConfigMap 和 Secret 的创建1. 创建 ConfigMapconfig/app-config.yaml:config/db-config.yaml: 2. 创建 Secretsecrets/db-credentials.yaml:…...
Redis的过期删除策略和内存淘汰策略
🤔 过期删除和内存淘汰乍一看很像,都是做删除操作的,这么分有什么意思? 首先,设置过期时间我们很熟悉,过期时间到了,我么的键就会被删除掉,这就是我们常认识的过期删除,…...
MySQL:数据库设计
目录 一、范式 二、第一范式 二、第二范式 三、第三范式 四、设计 (1)一对一关系 (2)一对多关系 (3)多对多关系 一、范式 数据库的范式是一种规则(规范),如果我们…...
Android Kotlin AIDL 完整实现与优化指南
本文将详细介绍如何在Android中使用Kotlin实现AIDL(Android Interface Definition Language),并提供多种优化方案。 一、基础实现 1. 创建AIDL文件 在src/main/aidl/com/example/myapplication/目录下创建: IMyAidlInterface.…...
synchronized关键字的实现
Java对象结构 synchronized锁升级过程 为了优化synchronized锁的效率,在JDK6中,HotSpot虚拟机开发团队提出了锁升级的概念,包括偏向锁、轻量级锁、重量级锁等,锁升级指的就是“无锁 --> 偏向锁 --> 轻量级锁 --> 重量级…...
