数据管理基础chapter-04
数据管理基础 Chapter 04数据库安全性
问题的提出
数据库的一大特点是数据可以共享
数据共享必然带来数据库的安全性问题
数据库系统中的数据共享不能是无条件的共享
军事秘密、国家机密、新产品实验数据、市场需求分析、市场营销策略、销售计划、客户档案、医疗档案、银行储蓄数据
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
系统安全保护措施是否有效是数据库系统主要的性能指标之一
数据库的不安全因素
非授权用户对数据库的恶意存取和破坏
一些黑客(Hacker)和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。
数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术
数据库中重要或敏感的数据被泄露
黑客和敌对分子千方百计盗窃数据库中的重要数据,一些机密信息被暴露。
数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等。
审计日志分析
安全环境的脆弱性
数据库的安全性与计算机系统的安全性紧密联系
计算机硬件、操作系统、网络系统等的安全性
建立一套可信(Trusted) ...
编译原理08-parser-allstar
Adaptive LL(*) 语法分析算法
ANTLR 4 自动将类似 expr 的左递归规则重写成非左递归形式
ANTLR 4 提供优秀的错误报告功能和复杂的错误恢复机制
ANTLR 4 使用了一种名为 Adaptive LL(∗) 的新技术
ANTLR 4 几乎能处理任何文法 (二义性文法✓ 间接左递归✗)
ANTLR 4如何处理直接左递归与优先级
我们在运行antlr4 LRExpr -Xlog后将会得到
我们将上述代码对应于一段递归函数 expr(int _p)
12345678expr(int _p) : ( INT | ID ) ( {4 >= $_p}? '*' expr[5] | {3 >= $_p}? '*' expr[4] ) ;
Example
1 + 2 * 3
根本问题
究竟是在 expr 的当前调用中匹配下一个运算符,
还是让 expr 的调用者匹配下一个运算符。
再来看一个左结合与右结合的例子
Example:
...
数据管理基础chapter-03
数据管理基础 Chapter 03SQL概述SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言
SQL是一个通用的、功能极强的关系数据库语言
综合统一
高度非过程化
面向集合的操作方式
以同一种语法结构提供两种使用方法
语言简洁,易学易用
SQL特点
综合统一
集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。
可以独立完成数据库生命周期中的全部活动:
定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库;
对数据库中的数据进行查询和更新;
数据库重构和维护
数据库安全性、完整性控制,以及事务控制
嵌入式SQL和动态SQL定义
用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据库的运行。
数据操作符统一
高度非过程化
非关系数据模型的数据操纵语言“面向过程”,必须指定存取路径。
SQL只要提出“做什么”,无须了解存取路径。
存取路径的选择以及SQL的操作过程由系统自动完成
面向集合的操作方式
非关系数据模型采用面向记录的操作方式,操作对象是一条记录
S ...
编译原理07-parser-II
七、递归下降的LL(1)语法分析器构建语法分析树:自顶向下 $vs.$ 自底向上
只考虑无二义性的文法这意味着, 每个句子对应唯一的一棵语法分析树
LL(1)语法分析器的特点自顶向下的自顶向下构建语法分析树
根结点是文法的起始符号$S$
每个中间节点表示对某个非终结符应用某个产生式进行推导
$Q: 选择哪个非终结符,以及选择哪个产生式$
叶节点是词法单元流$w$ $
仅包含终结符与特殊的文件结束符$$(EOF)$
每个中间节点表示对某个非终结符应用某个产生式进行推导
$Q:选择哪个非终结符,以及选择哪个产生式$
在推导的每一步,$LL(1)$总是选择最左边的非终结符进行展开
$LL(1):从左向右读入词法单元$
递归下降的递归下降的典型实现框架
为每一个非终结符写一个递归函数
内部按需调用其它的非终结符对应的递归函数,下降一层
过程演示
每次都选择语法分析树最左边的非终结符进行展开
思考
同样是展开非终结符 S, 为什么前两次选择了 S → (S + F), 而第三次选择了 S → F?
因为它们面对的当前词法单元不同
第一次与第二次展开时,只有第二条会产生小括号
...
编译原理06-parser-cfg
六、上下文无关文法-CFGDefinition-(Context-Free Grammar(CFG), 上下文无关文法)上下文无关文法$G$是一个四元组$G = (T,N,S,P)$
$T$是终结符号(Terminal)集合,对应于词法分析器产生的词法单元
$N$是非终止符号(Non-terminal)集合
$S$是开始(start)符号$(S \in N)$且唯一
$P$是产生式(Production)集合
A \in N \to \alpha \in (T \cup N)^*头部/左部(Head)A:单个非终结符
体部/右部(Body)$\alpha$:终结符与非终结符构成的串,也可以是空串$\epsilon$
[Entended] Backus-Naur form ([E]BNF)
CFG语义语义:上下文无关文法$G$定义了一个语言$L(G)$
语言是串的集合
推导
E \to E + E \mid E * E \mid (E) \mid -E \mid id推导即是将某个产生式的左边替换成它的右边
每一步推导需要选择替换哪个非终结符号,以及使用哪个产生式
E \ ...
编译原理05-parser-antlr
五、ANTLR 4 语法分析器语法分析二异性文法若文法G对同一句子产生不止一棵分析树,则称G是二义的。
If-Then-Else的二异性
1234567891011121314//IfStat.g4stat : 'if' expr 'then' stat | 'if' expr 'then' stat 'else' stat | expr ;->//IfStatOpenMatched.g4stat : matched_stat | open_statmatched_stat : 'if' expr 'then' matched_stat 'else' matched_stat | expr ;open_stat : 'if' expr 'then' stat | 'if' expr 'then' m ...
编译原理04-automata
四、自动机理论与词法分析器生成器自动机-Automation/Automata两大要素:状态集S 和 状态转移函数$\delta$
元胞自动机-Cellular Automation/CA根据表达/计算能力的强弱,自动机可以分为不同的层次
目标正则表达式RE => 词法分析器
非自动性有穷自动机-NFA/Nondeteministic Finite Automaton$A$是一个五元组 $A = (\Sigma , S, s_{0},\delta,F)$:
1.字母表$\Sigma$$(\epsilon \notin \Sigma)$
2.有穷的状态集合$S$
3.唯一的初始状态$s_{0} \in S$
4.状态转移函数$ \delta $
\delta : S \times (\Sigma \cup \lbrace \epsilon \rbrace) \to 2^S5.接受状态集合$F \subseteq S$
约定:所有没有对应出边的字符默认指向一个不存在的空状态$\varnothing$
(非确定性)有穷自动机是一类极其简单的计算装置
它可以识别(接受/拒绝)$\ ...
数据管理基础chapter_02
一、关系、关系模式和关系数据库域域是一组具有相同数据类型的值的集合。
笛卡尔积(Cartesian Product)1.给定一组域D1,D2,…,Dn ,允许其中某些域是相同的。
2.D1,D2,…,Dn的笛卡尔积为
D_{1} \times D_{2} \times ... \times D_{n} = \lbrace (d_{1},d_{2},...,d_{n}) \mid d_{i} \in D_{i},i = 1,2,...,n \rbrace性质:1)所有域的所有取值的一个组合 2)不能重复
元组(Tuple)笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组
分量(Component)笛卡尔积元素(d1,d2,…,dn)中的每一个值di叫作一个分量
基数(Cardinal number)若Di(i=1,2,…,n)为有限集,其基数为mi (i = 1,2,… ,n),则D1×D2×…×Dn的基数M为:
M = \prod_{i = 1}^n m_{i}关系(Relation)D~1~,D~2~,D~3~,…,D~n~的笛卡尔积的子集叫 ...
编译原理01-lexer-antlr
一、词法分析器词法分析器的三种设计方式词法分析器生成器,手写词法分析器,自动化词法分析器
词法分析器生成器talk is cheap,show me code
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647grammar SimpleExpr;@header {package simpleexpr;}prog : stat* EOF ;stat : expr ';' | ID '=' expr ';' | 'if' expr ';' ;expr : expr ('*' | '/') expr | expr ('+' | '-') expr | '(' expr ')' | ID ...