数据库讲解---(数据库保护)【下】

目录

一.并发控制

1.1并发操作引发的问题

1.1.1丢失修改

1.1.2不可重复读

1.1.3读”脏“数据

1.2调度及其可串行化

1.3事务的隔离性级别

1.4封锁技术【重要】

1.4.1排他锁

1.4.2共享锁

1.5封锁协议

1.5.1一级封锁协议

1.5.2二级封锁协议

1.5.3三级封锁协议

1.5.4两段锁协议

1.6死锁与活锁问题

1.6.1死锁

1.6.2活锁

1.7封锁的粒度

二.数据库安全性

2.1用户标识与鉴别

2.2存取控制

2.3视图机制

2.4数据加密

2.5审计

三.数据库完整性

3.1完整性约束条件的类型

3.1.1静态约束

3.1.2动态约束

3.2完整性控制机制的功能

3.2.1定义功能

3.2.2检查功能

3.2.3保护功能

3.3完整性约束的表达方式

3.3.1在创建和修改基表模式时说明约束

SQL中的关键字

参照完整性和外部关键字

属性值的约束

全局约束

3.4用断言说明约束【了解即可】

3.5用过程说明约束

一.并发控制

作为共享资源的数据库,可以同时供很多用户使用。

在这样的系统中,同一时刻需要运行很多个事务,如何高效一致地执行这些事务是并发控制的工作。

当允许多个事务并发存取数据库时,如果不加以控制就有可能导致并发事务相互干扰,存取到不正确的数据,破坏数据库的一致性。

1.1并发操作引发的问题

在并发存取环境下,如果不同事务的两个操作均针对同一数据对象,且至少有一个是写操作,则称这两个操作是“冲突”的。

若对并发事务中的冲突操作不加控制,可能引发三类问题:“丢失修改”、“不可重复读”、“读脏数据

1.1.1丢失修改

两个事务T1和T2先后对同一数据对象A进行修改并写入数据库时,后写入的结果会覆盖掉先写入的结果导致先写入的事务修改结果丢失,即丢失修改问题

丢失修改问题是由“写-写”冲突引起

1.1.2不可重复读

一个事务如果没有执行任何更新数据库数据的操作,则它们同一个查询操作执行两次或多次,结果应该是一致的如果不一致,就说明产生了“不可重复读”。

例如:“事务T1连续两次读入数据A,事务T2在事务T1连续读入数据A的间隙,修改了数据A,造成事务T1两次读取的数据A结果不一致”。

不可重复读是由“读-写”冲突引起的。

1.1.3读”脏“数据

读“脏”数据,简称脏读,是指一个事务读取了另一个未提交的事务中的数据

读“脏”数据是由“写-读”冲突引起的

1.2调度及其可串行化

在并发访问情况下,当有多个事务并发执行时,其操作交叉执行的次序有很多种可能,因此需要有一个衡量并发调度正确与否的判断准则。

1.3事务的隔离性级别

SQL标准定义了4种标准隔离级别从低到高依次为:“读未提交”、“读已提交”、”可重复读“、”可串行化“。

  • 读未提交:最低的隔离级别,在这种事务隔离级别下,一个事务可以读到另外一个事务未提交的数据,不允许丢失修改,接收读脏数据和不可重复读现象。
  • 读已提交:若事务还没提交,其他事物不能读取该事务正在修改的数据。不允许丢失修改和读脏数据,接受不可重复读现象。
  • 可重复读:失误多次读取统一数据对象的结果一致,不允许丢失修改、读脏数据、读不一致、接受幻影读现象。
  • 可串行化:最高级别的隔离性,保证可串行化,不允许丢失修改、读脏数据、读不一致以及幻影读现象的发生。

1.4封锁技术【重要

封锁是实现并发控制的一种机制

所谓封锁就是事务T在对某个数据对象操作之前先对其加锁加锁后事务T就对该数据对象有一定程度的独占控制,在实物T释放锁之前,其它事务在操作数据对象时将会被拒绝

基本的封锁类型有:“排他锁”、“共享锁”两种。

1.4.1排他锁

排他锁,也称为X锁或者写锁

事务T对数据对象A加上X锁,则在加锁期间只允许T对数据对象A进行读取和修改

1.4.2共享锁

共享锁,也称为S锁读锁

事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事物只能再对A加S锁,而不能加X锁,直到A上的S锁全部被释放

排他锁共享锁封锁控制方式可以用下表表示:

其中:

  • NL表示无锁
  • X表示写锁
  • S表示读锁
  • T1/T2表示事务

1.5封锁协议

在运用X锁S锁对数据对象加锁时,还需要约定一些规则,例如,何时申请X锁或S锁、持锁时间、何时释放等,这些规则称为“封锁协议”。

针对“读未提交”、“读已提交”、“可重复读”、“可串行化四种事务隔离级别,可以通过下面的三级封锁协议两段锁协议来实现。

1.5.1一级封锁协议

一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。

事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)

一级封锁协议只能解决“丢失修改”问题

1.5.2二级封锁协议

一级封锁协议的基础上,再加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁

二级封锁协议解决:“丢失修改”、“读脏数据

1.5.3三级封锁协议

一级封锁协议的基础上,再加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放

三级封锁协议解决:“丢失修改”、“读脏数据”、“不可重复读

上面的三级封锁协议,不能解决“插入和删除的幻影读现象

1.5.4两段锁协议

两段锁协议(2PL协议),是一种能够实现并发调度可串行化的封锁协议

  • 在任何数据对象进行读、写操作之前,事务要获得对数据对象的加锁。
  • 在释放任意一个锁之后,事务不再允许获得任何其他加锁。

 

在遵守两段锁协议事务中,明显地可分为两个阶段第一阶段是锁逐步增加阶段,称为扩展阶段。第二阶段是锁逐步释放阶段,称为收缩阶段

如果遵守2PL的调度,将锁释放都放在事务结束,则可避免发生连锁回滚不可重复读问题

把所有锁都放在事务结束时释放的两段锁协议称为严格的2PL协议”,大多数DBMS都采用严格的2PL

1.6死锁与活锁问题

1.6.1死锁

如果系统中有两个两个以上的事务都处于等待状态,并且每个事务都在等待其中另一个事务解除封锁,它才能够继续执行下去,结果造成任何一个事务都无法继续执行,这种现象称为系统进入了“死锁”。

在数据库系统中死锁很少发生,即使发生也涉及很少几个事务。

死锁检测的方法一般有下列两种:

  • 超时法:如果一个事务的等待时间超过某个时限,则认为发生死锁
  • 等待图法:动态维护一个等待图,如果等待图中出现回路,则存在死锁

1.6.2活锁

系统可能使某个事务永远处于等待状态,得不到封锁的机会,这种现象称为系统进入了“活锁”。

解决活锁的方法

  • 先来先服务策略,封锁子系统对请求封锁的先后次序进行排队,以此获得锁

1.7封锁的粒度

在数据库中,封锁的数据对象可以是:“逻辑单元”(属性、属性集、元组、关系、索引项、整个索引、整个数据库),也可以是物理单元,例如:“页、块、存储区域”等。

封锁数据对象大小称为“封锁的粒度”。

封锁粒度越大,封锁处理越简单,系统开销也越小,但这样往往把无需加锁的数据也封锁了,反之

二.数据库安全性

数据库系统通常采取的安全措施包括:“用户标识与鉴别”、“存取控制”、“视图机制”、“数据加密”、“审计”。

2.1用户标识与鉴别

用户标识与鉴别是系统提供的最外层安全保护措施。

即使用“用户名+密码”的方式来登录数据库才可以进行操作

2.2存取控制

存取控制是确保具有授权资格的用户访问数据库,同时使所有未被授权的人员无法访问数据库的机制

数据库用户按照访问权利的大小,可以分为三类

  1. 一般数据库用户:通过授权可以对数据库进行操作的用户
  2. 数据库的拥有者:数据库的拥有者即数据库的创建者,除了一般数据库用户的权利外,还可以授予或收回其他用户对其所创建数据库的存取权。
  3. 有DBA特权的用户:拥有支配整个数据库资源的特权,对数据库拥有最大的特权。

2.3视图机制

通过为不同的用户定义不同的视图,可以将要保密的数据对无权存取的用户隐藏起来,从而自动地给数据提供一定程度的安全保护。

2.4数据加密

加密技术是防止数据库在存储或传输中失密的有效手段。

基本思想是:“根据一定的算法将原始数据变成不可直接识别的格式,再在数据库端解码

2.5审计

审计功能可以把用户对数据库的操作自动记录下来放入审计日志,有时也被称作“审计跟踪”,系统能利用审计跟踪的信息,重现导致数据库现状的一系列事件,以找出非法存取数据的人。

三.数据库完整性

数据库的完整性是指数据库中的数据“正确性”和“相容性”,即为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出。

为了实现数据库完整性DBMS必须提供表达完整性约束的方法。

3.1完整性约束条件的类型

完整性约束条件作用的对象可以是列、元组、关系三种。

完整性约束条件的类型可以分为两大类型:“静态约束”和“动态约束”。

3.1.1静态约束

静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反应数据库状态合理性的约束,这是最重要的一类完整性约束

静态约束作用的对象不同,又可分为三种

  • 静态列约束:静态列约束是对一个列的取值域等的说明或限制。
  • 静态元组约束:规定组成一个元组的各个列之间的约束。
  • 静态关系约束:反映了一个关系中各个元组之间或者若干关系之间的约束。

3.1.2动态约束

动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所满足的约束条件

  • 动态列约束:规定修改列定义或列值时应满足的约束条件。
  • 动态元组约束:修改某个元组的值时元组中的各个字段之间要满足某种约束条件。
  • 动态关系约束:在关系变化时的限制条件,例如:“事务一致性”、“原子性”等约束条件。

3.2完整性控制机制的功能

DBMS的完整性控制机制应该具有如下三个方面的功能。

3.2.1定义功能

提供定义完整性约束条件的机制。

3.2.2检查功能

检查用户发出的操作请求是否违反了完整性约束条件。

检查是否违背完整性约束条件通常是在一条语句执行后立即检查,这类约束称为“立即执行的约束”。

如果某个检查需要延迟到整个事务结束后再进行,这类约束称为“延迟执行的约束”。

3.2.3保护功能

如果发现用户的操作请求违背了完整性约束条件,则采取一定的保护动作来保证数据的完整性。

3.3完整性约束的表达方式

3.3.1在创建和修改基表模式时说明约束

SQL中的关键字

CREATE TABLE中声明某个属性或属性集作为某个关系的关键字,主要有两种方法:“使用PRIMARY KEY(主关键字)”、“使用保留字UNIQUE”。

在一个表中只有一个“PRIMARY KEY”,但可以有多个“UNIQUE”。

参照完整性和外部关键字

参照完整性是关系模式的另一种重要约束。

参照完整性有两个要求:

  • 被参照的第二个关系的属性必须是该关系的主关键字。
  • 对于第一个关系中外关键字的任何值,也必须出现在第二个关系的相应属性上。

 

维护参照完整性约束的策略有下面三种:

  • 默认策略:拒绝违规的更新。
  • 级联策略:被参照关系中元组修改的同时,参照关系中元组也会自动的修改,保持一一对应的原则。
  • 置空策略:对于被参照关系的删除和修改操作时独立进行的,这时可以采用置NULL策略,方法是在模式后面加上“ON DELETE SET NULL”或“ON UPDATE CASCADE”。

 

属性值的约束

属性值的约束表达方式是:“在关系模式的定义中对属性进行约束”、“首先约束某个域,然后再说明它是某个属性的域”。

  • 非空约束:限制属性值不为空,在后面加一个“NOT NULL”
  • 基于属性值检查的约束:该属性上的每一个值都要满足“CHECK后面的条件”,在后面加一个“CHECK (<条件>)”

  • 域约束:声明一个域来约束某个属性的取值。

全局约束

一个复杂的约束条件可能涉及几个属性甚至几个不同关系之间的联系,称为全局约束。

3.4用断言说明约束【了解即可

一个断言就是一个谓词,用以说明数据库状态必须满足的一个条件。

SQL中可以使用“ASSERTION”语句来说明断言,形式为:

不管什么样的数据库操作,只要它破坏了断言中的条件(使条件为假),系统就拒绝执行。

3.5用过程说明约束

在应用程序中插入一些过程,以检验数据库更新是否违背给定的约束。

如果违背约束,则回滚事务

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

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

相关文章

全新的会声会影2024最新官方免费永久破解版本下载

大家好&#xff01;&#x1f31f; 今天要跟大家分享一个超级棒的视频编辑软件&#xff0c;它就是全新的会声会影2024最新永久破解版本。作为视频创作爱好者的我&#xff0c;真的被这款软件的强大功能和便利性彻底征服了&#xff01;&#x1f389;&#x1f389;&#x1f3ac; 【…

什么是OAuth2分布式授权协议?

今天我将和大家一起探讨在系统安全领域非常常见的一种授权协议&#xff0c;这就是OAuth2协议&#xff0c;这个协议通常用于对请求访问进行安全控制。在引入这个协议之前&#xff0c;让我们先来回顾两个基本概念&#xff0c;一个是认证&#xff0c;一个是授权。这两个概念比较容…

【Splitpanes】Vue.js 靠谱、简单并支持触摸的窗格分割器/调整器。

【Splitpanes】Vue.js 靠谱、简单并支持触摸的窗格分割器/调整器。 介绍安装使用示例与文档 介绍 Vue.js 靠谱、简单并支持触摸的窗格分割器/调整器。用于实现可调节窗口&#xff0c;支持Vue2、Vue3。 安装 Vue3 npm install splitpanesVue2 npm install splitpaneslegac…

CentOS 7.9检测硬盘坏区、实物定位(三)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9上创建的JBOD阵列恢复&#xff08;二&#xff09; 文章目录 系列文章目录前言一、在系统中找到硬盘对应的盘符二、使用命令定位实物1.badblocks检测坏块2.对2T以上的硬盘检测&#xff08;对本篇非必要…

百度文心智能体,创建属于自己的智能体应用

百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&#xff0c;可以用来创建属于自己的智能体应用&#xff0c;访问官网链接&#xff1…

数据仓库 基础教程

数据仓库 基础教程 1. 数据仓库概述 数据仓库(Data Warehouse,简称DW或者DWH)是通过集成来自多个异构数据源的数据来构建的。它支持分析报告、结构化和/或特别查询和决策制定。本教程采用循序渐进的方法来解释数据仓库的所有必要概念。 “数据仓库”一词最早是由Bill Inmon在1…

fataadmin导出Exel文件图片太大

// 导出图片过大处理 exportOptions: {ignoreColumn: [0, operate],onBeforeSaveToFile: function (data, fileName, type, charset, encoding, bom) {return $.fn.bootstrapTable.defaults.extend.savestatus;},onCellHtmlHyperlink: function ($cell, rowIndex, colIndex, hr…

C#开发-集合使用和技巧(一)常用集合和方法介绍

C#开发-集合使用和技巧 &#xff08;一&#xff09;常用集合和方法介绍常用集合和方法介绍 C#开发-集合使用和技巧1. 集合基础集合介绍集合跟数组对比 2.我们常用的集合类型列表List<T>键值对集合Dictionary<TKey,TValue>队列Queue<T>其他一些集合类型堆栈St…

修改vscode的主题颜色

1、首选项--主题--颜色主题 2、选择一个喜欢的颜色主题 这样就可以了。

工作实践:11种API性能优化方法

一、索引优化 接口性能优化时&#xff0c;大家第一个想到的通常是&#xff1a;优化索引。 确实&#xff0c;优化索引的成本是最小的。 你可以通过查看线上日志或监控报告&#xff0c;发现某个接口使用的某条SQL语句耗时较长。 此时&#xff0c;你可能会有以下疑问&#xff…

Mistral AI最新力作——Mistral Large媲美GPT-4

Mistral AI自豪地宣布&#xff0c;他们的最新力作——Mistral Large&#xff0c;已经正式面世。这款尖端的文本生成模型不仅在多语言理解上表现出色&#xff0c;更在推理能力上达到了顶级水平。Mistral Large能够处理包括文本理解、转换和代码生成在内的复杂多语言推理任务。 M…

go-admin-ui开源后台管理系统华为云部署

1.华为云开通8000与9527端口 2.编译 编译成功 3.发布到远程服务器 4.登陆华为云终端 5.安装Nginx 6.查看服务启动状态 7.添加网站 添加与修改配置www-data 改为 www 自定义日志输出格式 添加网站配置文件go_admin_ui.conf 添加如下内容: location 下的root指向网站文件夹 修…

former系列在时间序列预测任务上的研究综述

总&#xff1a;基于Transformer的LSTF解决方案 现有基于Transformer的LSTM解决方案设计要素总结如下&#xff1a; 从图中可以看出&#xff0c;Transformer在时序中应用具体包含以下几个步骤&#xff1a; 1&#xff09;时序分解&#xff1a;对于数据处理&#xff0c;TSF中0均…

zookeeper + kafka消息队列

zookeeper kafka 消息队列 一、消息队列简介 1、什么是消息队列 消息队列&#xff08;Message Queue&#xff09;是一种用于跨进程或分布式系统中传递消息的通信机制。消息队列在异步通信、系统解耦、负载均衡和容错方面具有重要作用。 &#xff08;1&#xff09;特性 异步…

“打造智能售货机系统,基于ruoyi微服务版本生成基础代码“

目录 # 开篇 1. 菜单 2. 字典配置 3. 表配置 3.1 导入表 3.2 区域管理 3.3 合作商管理 3.4 点位管理 4. 代码导入 4.1 后端代码生成 4.2 前端代码生成 5. 数据库代码执行 6. 点位管理菜单顺序修改 7. 页面展示 8. 附加设备表 8.1 新增设备管理菜单 8.2 创建字…

GBDT算法详解

GBDT算法详解 梯度提升决策树&#xff08;Gradient Boosting Decision Trees&#xff0c;GBDT&#xff09;是机器学习中一种强大的集成算法。它通过构建一系列的决策树&#xff0c;并逐步优化模型的预测能力&#xff0c;在各种回归和分类任务中取得了显著的效果。本文将详细介…

【mysql 安装启动失败】 没有网下 libssl.so.10 not found 如何解决?

问题描述&#xff1a; libssl.so.10 > not found libcrypto.so.10 > not found [rootmysql tools]# ls -l /usr/sbin/mysqld -rwxr-xr-x. 1 root root 64290024 Sep 14 2022 /usr/sbin/mysqld [rootmysql tools]# ldd /usr/sbin/mysqldlinux-vdso.so.1 (0x00007fff97105…

Blazor 组件:创建、生命周期、嵌套和 UI 集成

在本文中&#xff0c;您将获得以下问题的答案。 什么是 Blazor 组件&#xff1f;如何使用组件&#xff1f;Blazor 组件的生命周期是什么&#xff1f;我们可以从一个组件调用另一个组件吗&#xff1f;如何创建 Blazor 组件&#xff1f;在组件中哪里写 C# 代码&#xff1f; 什么…

碳化硅陶瓷膜的生产工艺和应用

一、生产工艺 碳化硅陶瓷膜的生产工艺多样&#xff0c;其中浸渍提拉法和喷涂法为两大主流技术。 浸渍提拉法 浸渍提拉法是一种广泛应用的制备方法。其过程主要包括&#xff1a;先将陶瓷颗粒或者聚合物前体分散在水或有机溶剂中&#xff0c;形成均质稳定的制膜液。随后&#xff…

深入探索C++中的AVL树

引言 在数据结构和算法的世界里&#xff0c;平衡二叉搜索树&#xff08;Balanced Binary Search Tree, BST&#xff09;是一种非常重要的数据结构。AVL树&#xff08;Adelson-Velsky和Landis发明的树&#xff09;就是平衡二叉搜索树的一种&#xff0c;它通过自平衡来维护其性质…