Skip to content

Commit

Permalink
daily update
Browse files Browse the repository at this point in the history
  • Loading branch information
iotang committed Aug 4, 2023
1 parent cfe68d0 commit 80728ba
Show file tree
Hide file tree
Showing 9 changed files with 259 additions and 138 deletions.
Binary file added docs/assets/aggregate_operation_example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 39 additions & 9 deletions docs/课程笔记/数据安全与隐私保护/ch09.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@

## MAC 的安全性

定义一个实验“Mac 伪造”$Mac-forge_{A, \Pi}$:
定义一个实验“Mac 伪造”$\text{Mac-forge}_{A, \Pi}$:

- $k \leftarrow Gen(1^n)$
- 对手有访问 $Mac_k(\cdot)$ 的权限。
- 对手:输出 $(m, t)$。在这之前向 $Mac_k(\cdot)$ 询问任意值 $x \in Q$。

$Mac-forge_{A, \Pi} = 1$ 如果有 $Vrfy_k(m, t) = 1$ 并且 $m \notin Q$,否则 $Mac-forge_{A, \Pi} = 0$。
$\text{Mac-forge}_{A, \Pi} = 1$ 如果有 $Vrfy_k(m, t) = 1$ 并且 $m \notin Q$,否则 $\text{Mac-forge}_{A, \Pi} = 0$。

如果对于所有的 PPT 对手,$\Pr[Mac-forge_{A, \Pi} = 1] \leq negl(n)$,那么 MAC 是安全的。
如果对于所有的 PPT 对手,$\Pr[\text{Mac-forge}_{A, \Pi} = 1] \leq negl(n)$,那么 MAC 是安全的。

## 伪造攻击

- 存在性伪造:攻击者在查询 MAC oracle 后选择要伪造的消息。
- 存在性伪造:攻击者在查询 MAC oracle 后选择要伪造的消息,就是上面那个 $\text{Mac-forge}$
- 选择性伪造:对手在进行攻击前选择一条消息,但是在之后无法查询该消息。
- 通用伪造:攻击者可以在查询 MAC oracle 后为任何消息创建 MAC。

Expand All @@ -34,18 +34,48 @@ MAC 可以保证攻击者不能新建可以验证的信息,但是可没说过

防御方式:

- 使用序列号
- 使用时间戳
- 使用随机数
- 使用序列号
- 使用时间戳
- 使用随机数

## 使用 PRF MAC
## 使用 PRF 的定长 MAC

F 是一个 PRF。定义一个定长 MAC:

- $Gen(1^n) = \{0, 1\}^n$,随机生成的
- $Gen(1^n) = \{0, 1\}^n \to k$,随机而平均地生成的
- $Mac_k(m) = F_k(m) = t$。
- $Vrfy_k(m, t) = 1$ 当且仅当 $t = F_k(m)$。

如果 F 是 PRF,这个系统就是一个安全的定长 MAC 系统。

## 变长 MAC

有个明显的思路是分块,给块的末尾补上 0。对于第 i 个块,算出:

- 一个新鲜出炉的随机辨识符 $r$;
- 信息长度 $l$;
- 块的编号 $i$;
- 信息 $m_i$。

这四个部分每个最多 $n / 4$ 比特长。

$t_i \leftarrow Mac'_k(r || l || i || m_i)$。

## 基本 CBC-MAC

现在有一个 PRF $F$。基本 CBC-MAC $Mac_k(m)$:

- 把 m 分割为 $m_1, \cdots, m_l$。
- $t_0 := 0^n$。
- 从 1 到 l:$t_i := F_k(t_{i - 1} \oplus m_i)$。
- 输出为 $t_l$。

$Vrfy_k(m, t)$ 检查是否 $t = Mac_k(m)$。

## 哈希函数

### 哈希的安全要求

- 哈希函数应该是单向的。
- 很难找到另外一个值,它的哈希和一个已知值的哈希相同。
- 很难找到另外一个值,它的哈希和一个已知值相同。
2 changes: 2 additions & 0 deletions docs/课程笔记/数据安全与隐私保护/ch10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# 第 10 章:公钥系统

51 changes: 45 additions & 6 deletions docs/课程笔记/数据库系统/ch01.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,22 @@

## 模式和实例 Schemas and Instances

和编程那边的概念相似,模式描述了数据库是怎么样的,而实例是一个根据模式创建出来的具体的东西。
和编程那边的概念相似,模式描述了数据库是怎么样的,而实例是一个根据模式创建出来的具体的东西。物理层、逻辑层和视图层都有相应的模式(你可以理解成子模式)。

物理层、逻辑层和视图层都有相应的模式(你可以理解成子模式);模式的独立性在于其他模式改动的时候自己不用跟着改,比如你换一种文件系统的时候一般不会导致你的数据库要重写。
### 物理独立与逻辑独立

模式的物理独立性在于其他模式改动的时候自己不用跟着改,比如你换一种文件系统的时候一般不会导致你的数据库要重写。

而逻辑独立性在于数据库不会随着数据的逻辑结构变化而变化。它相比物理独立性来说更难实现,如果你自己写一个数据库就能发现你的数据库是严重依赖于数据的逻辑结构的。

## 数据的模型

数据模型一般需要包含这些东西:

- 数据的结构(怎么组织起来的);
- 数据之间的关系;
- 数据的语义;
- 以及针对数据的限制。

## 实体-关系模型 Entity Relationship Model,E-R Model

Expand All @@ -32,12 +45,16 @@
|--:|:--|:--|:--|
|1|妙艾拉||魔幻假面喵|

帕底亚图鉴:
妙艾拉是一个“实体”,她有序号 1,种族“魔幻假面喵”等“属性”。

与此同时,帕底亚图鉴:

|species|hp|atk|...|
|:--|--:|--:|---:|
|魔幻假面喵|76|110|...|

“魔幻假面喵”作为图鉴的一个实体,有 HP、物攻等“属性”。

两张表里面的两条元组通过“魔幻假面喵”这个键关联起来。

作为一个非常符合人类思维的模型,E-R 模型被大量应用于数据库的设计中。
Expand All @@ -48,7 +65,27 @@
- 数据处理语言 Data Manipulation Language,DML
- 数据控制语言 Data Control Language,DCL

SQL = DDL + DML + DCL
而我们常说的 SQL 就是 DDL、DML 和 DCL 的结合体。

### 数据定义语言

这种语言指定了一种关系模式的方案,包括存储结构,访问方法和一致性约束等元素。比如:

```sql
create tabe teammate(
id integer,
name char(10),
primary key id
);
```

#### 数据字典 Data dictionary

数据字典包括对数据的数据项、数据结构、数据流、数据存储、处理逻辑等的定义和描述。

### 数据处理语言

这种语言用来从数据库中获取信息,以及进行增删改查等操作……换句话说就是“查询语句”。其中,如果用户使用“程序性”(Procedural)的 DML,他们需要指定需要的数据和获取方法(比如使用 C、Java 等语言描述);反之,使用“非程序性”的 DML 就不用这么做(比如 SQL 语言)。

## 事务管理 Transaction Management

Expand All @@ -58,7 +95,7 @@ SQL = DDL + DML + DCL

## DBMS 的结构

### 储存管理器
### 储存管理器 Storage manager

和文件系统中底层数据进行交互。

Expand All @@ -67,4 +104,6 @@ SQL = DDL + DML + DCL
- File manager
- Buffer manager

### 查询处理器
### 查询处理器 Query processor

它需要翻译 DDL 和编译 DML,根据情况选择适合的方式来获得指定的资料。
40 changes: 34 additions & 6 deletions docs/课程笔记/数据库系统/ch02.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,17 @@

每个属性都有其(值)域 domain。根据第一范式,属性的值需要是原子化的,也就是说不能是多个值组合起来。

所有的域里面都包含 null,虽然 null 总会让数据处理变得复杂。
|id|name|gender|species|tags|
|--:|:--|:--|:--|:--|
|1|妙艾拉||魔幻假面喵|挚友、美食家、…… **←这样不行!**|

所有的域里面都包含 null 这个值。虽然 null 总会让数据处理变得复杂……

### 关系模式 Relation Schema

关系模式描述了一个关系的结构,比如:

``Instructor-schema = (ID: string, name: string,dept_name: string, salary: int)``
``Instructor-schema = (ID: string, name: string, dept_name: string, salary: int)``

现在有属性 $A_1, A_2, \cdots, A_n$,那么 $R = (A_1, A_2, \cdots, A_n)$ 称为一个关系模式;$r(R)$ 是在关系模式 R 下的一个关系。

Expand Down Expand Up @@ -58,13 +62,13 @@ Teammates(<u>id</u>, name, gender, species),这样。

## 六个基本操作

### 选择
### 选择 $\sigma_{p}(r)$

设选择谓词 p 是一堆条件组成的约束,那么 $\sigma_{p}(r) = \{t | t \in r \land p(t)\}$ 是 r 中满足 p 的元素。

比如 $\sigma_{\mathrm{affection} \geq 255}(\mathrm{pokemon})$ 会返回所有友好度大于等于 255 的宝可梦。

### 投影
### 投影 $\Pi_{A_1 \cdots A_k}(r)$

设 $A_1 \cdots A_k$ 是属性的名字,那么 $\Pi_{A_1 \cdots A_k}(r)$ 是从 r 中只选出属性 $A_1 \cdots A_k$ 后组成的表。注意因为这是个集合,所以得去重。

Expand All @@ -82,7 +86,7 @@ $r - s = \{t | t \in r \land t \notin s\}$,和上面一样,其中 r 和 s

$r \times s = \{\{t, q\} | t \in r \land q \in s\}$,其中如果 r 和 s 里面有属性的名字相同,那么必须给个新名字以区分。

### 重命名
### 重命名 $\rho_{x}(E); ~\rho_{x(A_1, \cdots, A_n)}(E)$

现在有个有 n 个属性的关系 E,$\rho_{x(A_1, \cdots, A_n)}(E)$ 会返回一个属性名字被改成 $A_1, \cdots, A_n$ 的 E。

Expand All @@ -100,7 +104,7 @@ $r \bowtie s = \Pi_{r 和 s 下的所有属性种类}(\sigma_{r 和 s 下相同

###

$r \div s = \{t | t \in \Pi_{R - S}(r) \land \forall_{u \in s} (tu \in r)\}$;或者说,得出来的商“满足 r 中出现了 s 的所有”
$r \div s = \{t | t \in \Pi_{R - S}(r) \land \forall_{u \in s} (tu \in r)\}$;或者说,得出来的商来自于 $\Pi_{R - S}(r)$,里面的元组 t 和 s 里面任何元组的拼接结果都在 r 里面出现过

### 赋值

Expand All @@ -124,6 +128,8 @@ $\Pi_{\mathrm{name, maxhp - hp}}(\mathrm{pokemon})$ 会返回所有宝可梦的

包括最大值、最小值、平均值等操作。

![aggregate_operation_example.png](../../assets/aggregate_operation_example.png)

### 外连接

在自然连接的基础上,增加左外连接和右外连接,以及完全外连接。
Expand All @@ -134,4 +140,26 @@ $\Pi_{\mathrm{name, maxhp - hp}}(\mathrm{pokemon})$ 会返回所有宝可梦的

### 空值 null

对于 or:

- (unknown or true) = true
- (unknown or false) = unknown
- (unknown or unknown) = unknown

对于 and:

- (unknown and true) = unknown
- (unknown and false) = false
- (unknown and unknown) = unknown

对于 not:

- not unknown = unknown

### 数据库的修改操作

删除可以表达为 $r \leftarrow r - E$。

插入可以表达为 $r \leftarrow r \cup E$。

更新可以表达为 $r \leftarrow \Pi_{F_1, F_2, \cdots, F_l} (r)$,其中 $F_i$ 对于哪些要更新的元组是相应的表达式。
23 changes: 17 additions & 6 deletions docs/课程笔记/数据库系统/ch03.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ create table teammate(
lv int,
affection float(53),
primary key (id),
check(hp > 0));
check(hp > 0)
);
```

注意名字里面不能写减号“-”。
注意名字里面不能写减号“-”,并且是大小写不敏感的

### 域的类型

Expand Down Expand Up @@ -135,7 +136,7 @@ where species = '魔幻假面喵'
order by lv desc, name asc;
```

把所有的魔幻假面喵先按等级降序排序,再按名字升序排序
把所有的魔幻假面喵先按等级降序排序,其次按名字升序排序

排序默认是升序排序。

Expand Down Expand Up @@ -203,9 +204,19 @@ drop view <view_name>;
### with

```sql
with max_hp(value) as
select max(hp)
from teammate
with
max_hp as
select top 1 *
from teammate
order by hp
select hp
from teammate, max_hp
where teammate.hp = max_hp.hp;

with
max_hp(value) as
select max(hp)
from teammate
select hp
from teammate, max_hp
where teammate.hp = max_hp.value;
Expand Down
26 changes: 26 additions & 0 deletions docs/课程笔记/数据库系统/ch04.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,38 @@ create table account (

## 完整性约束

对单个关系可以有下面这些约束:

- not null
- primary key (属性名)
- foreign key (属性名) references 表名
- unique
- check(P)

```sql
create table teammates (
id char(5) primary key,
name varchar(20) unique not null,
species integer not null,
hp integer not null,
foreign key (species) references pokedex,
check(hp >= 0)
);
```

另外可以在自定义域里面声明。

```sql
create domain hourly_wage numeric(5, 2)
constraint value_test check (value >= 4.00);
```

### 参照完整性约束

现在 $r_1(R_1)$ 和 $r_2(R_2)$ 分别有主键 $K_1$ 和 $K_2$,$r_2$ 里面有一行 $a$,对于所有 $t_2 \in r_2$,肯定存在一个 $t_1 \in r_1$ 满足 $t_1[K_1] = t_2[a]$;更简单地来说,可以写成 $\Pi_a(r_2) \subseteq \Pi_{K_1}(r_1)$。

参照关系中外码的值必须在被参照关系中实际存在,或为 null。

## SQL 的级联

```sql
Expand Down
21 changes: 21 additions & 0 deletions docs/课程笔记/数据库系统/ch18.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,24 @@
这样在保证冲突可串行化的同时,可以防止死锁;并且因为解锁没有限制,它相比 2PL 可以更快解锁,提高并行化速度。但它不能防止级联回滚;并且也会导致锁到不访问的数据上。

### 基于时间戳的协议

根据事务的时间戳来对它们的序列化顺序进行排序。对于每个数据 Q 维护 W-TS(Q) 和 R-TS(Q),分别是读过它的事务的最大的时间戳的值和写过它的事务的最大的时间戳的值。

现在有一个事务 $T_i$,它有时间戳 TS(T_i),想读数据 Q。

- 如果 TS(T_i) $\leq$ W-TS(Q),也就是说它要读的这个东西已经被一个更晚的事务给写了。它得回滚。
- 如果 TS(T_i) $\geq$ W-TS(Q),就会把 R-TS(Q) 和 TS(T_i) 取最大。

现在有一个事务 $T_i$,它有时间戳 TS(T_i),想写数据 Q。

- 如果 TS(T_i) < R-TS(Q),也就是说它要写的这个东西本来要被一个更晚的事务读,但是那个事务没读到。它得回滚。
- 如果 TS(T_i) < W-TS(Q),那么写的顺序就出问题了。它得回滚。
- 否则就会把 W-TS(Q) 和 TS(T_i) 取最大。

因为时间自带的偏序关系,事务之间不会存在环。但是给出来的调度方案可能存在级联现象,有时候甚至还不支持回退。

## 意向锁

- 共享型意向锁 IS
- 排它型意向锁 IX
- 共享排它型意向锁 SIX
Loading

0 comments on commit 80728ba

Please sign in to comment.