从入门到精通【MySQL】视图与用户权限管理

news2025/7/14 21:08:10

文章目录

    • 📕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 视图的优点
  1. 简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需查询视图而无需了解底层的复杂逻辑。
  2. 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的用户表中,可以创建一个不包含密码列的视图,普通用户只能访问这个视图,而不能访问原始表,进一步保证了安全问题。
  3. 逻辑数据独立性:视图提供了一种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的应用程序。确保了应用程序与数据库的解耦
  4. 重命名列:视图允许用户重命名列名,以增强数据可读性

📕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';

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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-…

YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】

1.CPA介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强,显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中,并在物体检测及其他视觉任务中设立了新的性能标准,展现了广泛的应用潜力。 关于CPA-E…

Python 项目环境配置与 Vanna 安装避坑指南 (PyCharm + venv)

在进行 Python 项目开发时,一个干净、隔离且配置正确的开发环境至关重要。尤其是在使用像 PyCharm 这样的集成开发环境 (IDE) 时,正确理解和配置虚拟环境 (Virtual Environment) 是避免许多常见问题的关键。本文结合之前安装 Vanna 库时遇到的问题&#…

线上助农产品商城小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码,旨在为农产品销售搭建一个高效、便捷的线上平台,助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架,FastAdmin作为快速开发框架,UniApp作为跨…

基于Matlab的车牌识别系统

1.程序简介 本模型基于MATLAB,通过编程创建GUI界面,基于Matlab的数字图像处理,对静止的车牌图像进行分割并识别,通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等,并定位车牌的文字,实现字符的…

探索 CameraCtrl模型:视频生成中的精确摄像机控制技术

在当今的视频生成领域,精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性,导致生成的视频在摄像机运动方面不够理想。为了解决这一问题,一种名为 CameraCtrl 的创新文本到视频模型…

【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库

深度解析FaceAI:一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南:项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…

Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力

前引:当算力不再是“奢侈品” ,在人工智能、3D渲染、科学计算等领域,算力一直是横亘在个人与企业面前的“高墙”。高性能服务器价格动辄数十万元,专业设备维护成本高,普通人大多是望而却步。然而,Cephalon算…

Redis的过期删除策略和内存淘汰策略

🤔 过期删除和内存淘汰乍一看很像,都是做删除操作的,这么分有什么意思? 首先,设置过期时间我们很熟悉,过期时间到了,我么的键就会被删除掉,这就是我们常认识的过期删除,…

MySQL:数据库设计

目录 一、范式 二、第一范式 二、第二范式 三、第三范式 四、设计 (1)一对一关系 (2)一对多关系 (3)多对多关系 一、范式 数据库的范式是一种规则(规范),如果我们…

synchronized关键字的实现

Java对象结构 synchronized锁升级过程 为了优化synchronized锁的效率,在JDK6中,HotSpot虚拟机开发团队提出了锁升级的概念,包括偏向锁、轻量级锁、重量级锁等,锁升级指的就是“无锁 --> 偏向锁 --> 轻量级锁 --> 重量级…

opencv 图像的旋转

图像的旋转 1 单点旋转2. 图片旋转(cv2.getRotationMatrix2D)3. 插值方法3.1 最近邻插值(cv2.INTER_NEAREST)3.2 双线性插值(cv2.INTER_LINEAR)3.3 像素区域插值(cv2.INTER_AREA)3.4 双三次插值(cv2.INTER_CUBIC&#…

【多线程】线程互斥 互斥量操作 守卫锁 重入与线程安全

文章目录 Ⅰ. 线程互斥概念Ⅱ. 互斥锁的概念Ⅲ. 互斥锁的接口一、互斥锁的定义二、初始化互斥锁三、销毁互斥锁四、互斥量的加锁和解锁① 加锁接口② 解锁接口五、改进买票系统💥注意事项Ⅳ. 互斥锁的实现原理一、问题引入二、复习知识三、实现原理Ⅴ. 封装锁对象 &&…

空闲列表:回收和再利用

空闲列表:回收和再利用 手动与自动内存管理 手动管理:程序员需要明确地分配和释放内存。自动管理:例如使用垃圾收集器(GC),它能够自动检测并回收未使用的对象,不需要程序员干预。 对于某些数据结构如B树,…

计算机组成与体系结构:直接内存映射(Direct Memory Mapping)

目录 CPU地址怎么找到真实的数据? 内存映射的基本单位和结构 1. Pages(页)——虚拟地址空间的基本单位 2. Frames(页框)——物理内存空间的基本单位 3. Blocks(块)——主存和缓存之间的数据…

STM32提高篇: 蓝牙通讯

STM32提高篇: 蓝牙通讯 一.蓝牙通讯介绍1.蓝牙技术类型 二.蓝牙协议栈1.蓝牙芯片架构2.BLE低功耗蓝牙协议栈框架 三.ESP32-C3中的蓝牙功能1.广播2.扫描3.通讯 四.发送和接收 一.蓝牙通讯介绍 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技…

SpringMVC处理请求映射路径和接收参数

目录 springmvc处理请求映射路径 案例:访问 OrderController类的pirntUser方法报错:java.lang.IllegalStateException:映射不明确 核心错误信息 springmvc接收参数 一 ,常见的字符串和数字类型的参数接收方式 1.1 请求路径的…

【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)

🌟 嗨,你好,我是 青松 ! 🌈 希望用我的经验,让“程序猿”的AI学习之路走的更容易些,若我的经验能为你前行的道路增添一丝轻松,我将倍感荣幸!共勉~ 【程序员 NLP 入门】词…

从物理到预测:数据驱动的深度学习的结构化探索及AI推理

在当今科学探索的时代,理解的前沿不再仅仅存在于我们书写的方程式中,也存在于我们收集的数据和构建的模型中。在物理学和机器学习的交汇处,一个快速发展的领域正在兴起,它不仅观察宇宙,更是在学习宇宙。 AI推理 我们…