数据库系统与原理(第八章)

本文详细介绍了SQLServer中的数据库保护技术,包括两种身份验证模式——仅Windows模式和混合模式,以及Windows身份验证和SQLServer身份验证。文章还讨论了常用的安全性控制方法,如用户标识、存取控制和数据加密。在数据库完整性方面,提到了主键约束、外键约束、唯一性约束和检查约束等。此外,文章还涵盖了索引的概念、类型和创建方法,以及视图、存储过程和事务处理的基本概念和操作。
摘要由CSDN通过智能技术生成

数据库保护技术(第8章)

安全管理

一、两种身份验证模式

  • 仅windows模式:用户只能使用windows登录名登录SQL Server。
  • 混合模式:用户可以使用windows登录名或SQL Server登录名登录 SQL Server

二、两种身份验证

用户登录到SQL Server时,必须使用特定的登录名和密码标识自己。
Windows身份验证:用户登录到SQL Server时,使用操作系统当前的登录名和密码。
SQL Server身份验证:用户登录到SQL Server时,必须显式提供登录名和密码。

常用安全性控制方法:用户标识和控制、存取控制、视图、审计、数据加密。

数据库完整性

一、在创建时指定约束

  • 主键约束
    [constraint 约束名]
    Primary key [Clustered/Nonclustered][(属性名,·…,属性名)】
    说明:
    ① 每个约束都有一个约束名,约束名通常由系统自动给出。
    ② 列级约束:只牵涉到一个属性的约束,它放在相关属性的后面,且省略属性名表。表级约束:牵涉到多个属性的约束。
    ③ 创建主键约束、唯一性约束时可以指定聚集(clustered)或非聚集(nonclustered)。
    ④ 主键约束默认为聚集的,唯一性约束默认为非聚集的。
    ⑤一个表最多只能创建一个约束是聚集的,聚集约束会影响数据表的记录号顺序。
    2.外键约束
    [constraint约束名]
    Foreign key[(属性名,···,属性名)]
    References 主键表名(属性名,···,属性名)
    注意:两表关联的方式:
    ① 临时关联:where 表名1.属性名=表名2.属性名
    ② 永久关联:创建外键约束
    3.唯一性约束
    [constraint 约束名]
    Unique [Clustered Nonclustered][(属性名,··,属性名)]
    主键约束与唯一约束的区别:
    ① 在一个表中只能定义一个主键约束,但可定义多个唯一性约束:
    ② 指定为主键约束的字段不能取null值,但指定为唯一性约束的字段允许取null值。
    4.检查约束
    [constraint 约束名]
    Check (条件表达式)
    5.缺省约束
    [constraint约束名]
    Default 常量

二、删除表中的约束

alter table 表名
drop constraint 约束名…约束名
注意:alter语句后面只能跟着一个子句。

三、添加约束

alter table 表名
add constraint 约束名 约束定义…
constraint 约束名 约束定义
约束定义指:
Primary key Clustered/Nonclustered
Foreign key(属性组) references 主键表名(属性组)
Unique [Clustered/Nonclustered] (属性组)
Check(条件表达式)
Default 常量 for 属性名

默认对象
① 默认对象与默认约束的功能类似。
② 默认对象以单独的对象创建,可以绑定到数据库的所有表中。
③ 默认约束只能绑定到一个表中。
规则
规则与check约束的功能类似。
① 则以单独的对象创建,可以绑定到数据库的所有表中。
② check 约束只能绑定到一个表中。

索引

一、索引的概念:

①索引使用户能快速访问数据表的特定信息。
②索引必须依附于某个基本表,不能单独存在。

二、索引的类型

聚集索引:影响数据表的记录顺序
非聚集索引:不会影响数据表的记录顺序
注:一个表只能建立一个聚集索引,但可以建立若干个非聚集索引。

三、创建索引

1.自动创建索引:
如果在数据表的某个属性设置主键约束或唯一约束,则系统将在这些属性上自动创建唯一索引。
自动创建的索引随约束的存在而存在,随约束的消失而消失。

  • 使用SQL语句创建索引
    Create [unique] [clustered/nonclustered] index 索引名
    On 表名(属性名[asc/desc],属性名[asc/desc])
    注:① m若未指定clustered,则创建非聚集索引:
    ② 若未指定排序方式,则为ASC:
    ③ text,ntext类型的字段不能指定为索引字段。

四、删除索引

Drop index 索引名,···,索引名
思考题:创建主键时,如果使主键字段值不影响数据表的记录顺序?

视图

一、视图的特点

① 视图只有结构,没有记录,是虚表;
② 一个视图总对应着一个 select语句:
③ 对视图的查询、更新,实际上是对基本表的查询、更新。

二、定义视图

1.创建视图:
Create view视图名[(属性名,···,属性名)]
As 子查询
[with check option]
说明:视图的属性个数必须与子查询中 select子句的表达式个数相同。
2.删除视图: Drop view 视图名,···,视图名.

三、查询视图

select */表达式表
from 视图名…视图名
[where 条件]
[group by属性名]
[order by属性名][Asc/Desc]

四、操纵视图

1.向视图插入一条记录 insert into 视图名[(属性名表)] values(表达式表)
2.修改视图中的数据 update 视图名set 属性名=值,…,属性名=值[where 条件]
3.删除视图中的记录 delete from 视图名[where 条件]

存储过程

1.什么叫存储过程?
将一组SQL语句,以一个名称存储在数据库中,就形成存储过程。

  • 创建存储过程
    Create proc存储过程名[@形参名 类型][=常量][output]
    As SQL 语句序列
    说明:
    ① [=常量]:用于指定形参的默认值;[output]用来指定该形参值是可以返回的。

触发器

一、维护数据完整性的措施:
创建约束
创建触发器
创建规则:以单独的对象创建,可以绑定到数据库的所有表中。

事务处理与并发控制

1.什么叫事务?
① 事务是用户定义的一组操作序列。
② 事务是并发控制的基本单位。
③ 一个事务包含的诸操作要么都执行,要么都不执行。
2.事务的属性
原子性:指事务中包含的诸操作要么都执行,要么都不执行。
一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其他事务干扰。
持久性

数据的锁定

一、并发操作与数据不一致性

1.数据不一致性包括三类
丢失修改 :指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏事务1提交的结果,导致事务1的修改被丢失。
不可重复读: 指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果。
读脏数据 :指事务1修改某一数据后,事务2读取该数据,事务1由于某种原因被撤销,这时数据又恢复到原值,事务2读到的数据与数据库中的数据不一致,称为“脏”数据。
2.产生数据不一致性的原因
并发操作破坏了事务的隔离性。

二、并发控制的目标、方法

1.目标:确保DB中的数据一致性。
2.并发事务正确性的原则
几个事务的并发执行是正确的
,当且仅当其结果与任何一个串行执行的结果相同。
3.并发控制的方法
DBMS一般采用“封锁”技术,保证并发操作的可串行化。

三、封锁(Locking)

1.什么叫封锁?
SQL Server自动强制封锁,并且会将封锁粒度控制在合适的级别,用户不必考虑封锁问题。
2.封锁类型

  • 排它锁(X锁) 事务T对数据A加X锁,其它事务不能再对A加锁,即其它事务不能读取和修改A。
  • 共享锁(S锁):事务T对数据A加S锁,其它事务只能再对A加S锁,即其它事务只能读A,不能修改A。
    3.封锁粒度
    封锁对象可以是属性列、元组、关系、整个数据库。封锁对象的大小称为封锁粒度。封锁粒度越小,并发度越高,但并发控制的开销越大。
    4.封锁协议
    ① 事务T在修改数据A之前,必须对其加X锁,直到事务结束才释放。
    ② 事务T在读取数据A之前,必须对其加S锁,直到事务结束才释放。
    遵循封锁协议,可以解决三种数据不一致性问题:
  • 丢失修改
  • 不可重复读
  • 读“脏”数据

四、死锁和活锁

封锁技术可以解决并发操作的不一致性问题,但也带来新的问题,即死锁和活锁。
1.死锁:
① 定义:两个事务已经各自锁定一个数据,但是又要访问被对方锁定的数据,造成了循环等待,称为死锁。
② 避免死锁的方法:
顺序封锁法:若规定封锁顺序为A,B,则T1,T2只能先封锁A,再封锁B。
2.活锁:
① 定义:若多个事务请求封锁同一个数据时,其中的某个事务总处于等待状态,则称为活锁。
② 避免活锁的方法:先来先服务

事务可串行化调度:两段锁协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取址执行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值