數(shù)據(jù)庫(kù)(三)

數(shù)據(jù)庫(kù)安全性

1.數(shù)據(jù)庫(kù)的不安全因素

  • 非授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞
  • 數(shù)據(jù)庫(kù)中重要的數(shù)據(jù)被泄露
  • 安全環(huán)境的脆弱性

2.授權(quán):授予與收回

2.1.GRANT

grant <權(quán)限>,···
on <對(duì)象類型><對(duì)象名>碍沐,···
to <用戶>···
[with check option]   //表示 被授權(quán)的用戶可以在授予其他用戶這些權(quán)限(繼續(xù)傳遞)

/* 把查詢student表的權(quán)限授予U1 */
grant select             //還可以是  ALL PRIVILEGES 全部權(quán)限谎碍,UPDATE(Sno) 更新某列
on Table student
to U1

  • 將對(duì)指定操作對(duì)象的指定操作權(quán)限授予指定的用戶

2.2.REVOKE

revoke <權(quán)限>莉兰,···
on <對(duì)象類型><對(duì)象名>扣猫,···
from <用戶>···[cascade|restrict]   //默認(rèn):cascade 收回衍生權(quán)限

數(shù)據(jù)庫(kù)完整性

  • 數(shù)據(jù)的正確性和相容性

1.實(shí)體完整性

  • 列級(jí)約束條件
  • 表級(jí)約束條件
  • 單屬性構(gòu)成時(shí)谷市,都可
  • 多屬性構(gòu)成時(shí)柄驻,只能表級(jí)約束
create table stu
(
    sno CHAR(9) PRIMARY KEY          //列級(jí)約束定義
    sname CHAR(20)
)

create table stu
(
    sno CHAR(9)
    sname CHAR(20)
    PRIMARY KEY(sno)                //表級(jí)約束條件
)

create table stu
(
    sno CHAR(9)
    sname CHAR(20)
    PRIMARY KEY(sno,sname)          //多值時(shí)表級(jí)約束胎挎,,P托汀段审!表明 主碼是(sno,sname)闹蒜,不是兩個(gè)分開
)

1.1.實(shí)體完整性檢查和違約處理

  • 檢查主碼值是否唯一寺枉,不唯一則拒絕
  • 檢查主碼的各個(gè)屬性是否為空,有空就拒絕

2.參照完整性

2.1.定義參照完整性

  • 針對(duì)于外鍵所描述
//主碼(sno,cno),sno為stu主碼绷落,cno為course主碼
create table sc
(
    sno int not null,
    cno int not null,
    grade int,
    PRIMARY KEY(sno,cno),
    FOREIGN KEY(sno) references stu(sno),
    FOREIGN KEY(cno) references coruse(cno),
)

3.用戶定義的完整性

3.1.屬性列上的約束條件

  • 列值非空 not null
  • 列值唯一 unique
  • 列值是否滿足一個(gè)條件表達(dá)式 check
create table stu
(   sno int not null姥闪,unique                   //not null.unique
    ssex char(2) check(ssex in ('男','女'))    //check
    grade int check(grade > 0)                //check
)

4.觸發(fā)器

  • 事件-條件-動(dòng)作 規(guī)則
create trigger <觸發(fā)器名>                   //觸發(fā)事件發(fā)生時(shí),觸發(fā)器激活
{before|after} <觸發(fā)事件> on <表名>         //指明觸發(fā)器激活的時(shí)間嘱函,是在觸發(fā)事件前 或 后
REFERENCING NEW | OLD ROW AS<變量>         //REFERENCING指出引用的變量
FOR EACH{ROW|STATEMENT}                   //定義觸發(fā)器類型甘畅,知名動(dòng)作體制性的頻率
[when<觸發(fā)條件>]<觸發(fā)動(dòng)作>                  //僅當(dāng)觸發(fā)條件為真時(shí)埂蕊,觸發(fā)動(dòng)作體

關(guān)系數(shù)據(jù)理論

1.問題的提出

  • 1NF:每一個(gè)分量是不可分的數(shù)據(jù)項(xiàng)
  • 數(shù)據(jù)依賴:關(guān)系內(nèi)部屬性與屬性之間的一種約束關(guān)系往弓。最重要的是 函數(shù)依賴FD 多值依賴MVD
  • 關(guān)系模型常常會(huì)有四種問題
    • 數(shù)據(jù)冗余
    • 更新異常
    • 插入異常
    • 刪除異常
  • 一個(gè)好的模式應(yīng)當(dāng)不會(huì)發(fā)生插入異常、刪除異常蓄氧、更新異常函似。數(shù)據(jù)冗余盡可能小

2.規(guī)范化

2.1.函數(shù)依賴

  • 平凡函數(shù)依賴:X->Y,Y屬于X(不討論)
  • 非平凡函數(shù)依賴:X->Y,Y不屬于X(以下均均為非平凡函數(shù)依賴)
  • 決定因素:自變量,X
  • 完全函數(shù)依賴:在某一關(guān)系模式下喉童,X->Y撇寞,對(duì)于X的任一真子集,都無(wú)法推導(dǎo)出Y
  • 部分函數(shù)依賴:在某一關(guān)系模式下堂氯,X->Y蔑担,存在至少一個(gè)X的真子集,可以推導(dǎo)出Y
  • 傳遞函數(shù)依賴:在某一關(guān)系模式下咽白,X->Y啤握,Y推不出X,Y->Z晶框,則X->Z

2.2.碼

  • 候選碼:某一關(guān)系模式下排抬,某個(gè)屬性或?qū)傩越M合懂从,被完全函數(shù)依賴。即可稱為該關(guān)系的候選碼
  • 超碼:某一關(guān)系模式下蹲蒲,某個(gè)屬性或?qū)傩越M合番甩,被部分函數(shù)依賴。即可稱為該關(guān)系的超碼
  • 候選碼是一類特殊的超碼
  • 主屬性:包含在任何一個(gè)候選碼中的屬性
  • 非主屬性:不包含在任何一個(gè)候選碼中的屬性
  • 全碼:整個(gè)屬性組是碼
  • 外碼:某個(gè)屬性不是本關(guān)系的碼届搁,是其他關(guān)系模型的碼缘薛。

2.3.范式

  • 規(guī)范化:一個(gè)低一級(jí)的范式關(guān)系模式通過模式分解轉(zhuǎn)換成高級(jí)范式關(guān)系模型的集合的過程

2.4.2NF

  • R屬于1NF,且每個(gè)非主屬性完全依賴于任何一個(gè)候選碼咖祭,則R屬于2NF
  • 2NF消除的是非主屬性對(duì)碼的部分函數(shù)依賴

2.4.3NF

  • R屬于2NF掩宜,若R中不存在這樣的 碼X,屬性組Y么翰,非主屬性Z(Z不屬于Y)牺汤。使得X->Y,Y->Z成立浩嫌。則符合3NF
  • 3NF消除非主屬性對(duì)碼的傳遞依賴

2.4.BCNF

  • BCNF消除主屬性對(duì)碼的部份依賴和傳遞依賴

2.5.多值依賴

  • 多值依賴:BCNF解決的問題都是函數(shù)范疇內(nèi)檐迟,但仍然存在數(shù)據(jù)冗余以及增刪改的不方便問題。
  • 特性:
    • 對(duì)稱性
    • 傳遞性
    • 函數(shù)依賴可以看作多值依賴的特殊情況
  • 多值依賴的解決要靠4NF

3.數(shù)據(jù)依賴的公理系統(tǒng)(Armstrong)

  • Armstrong公理系統(tǒng)的推理規(guī)則:
    • 自反律
    • 增廣律
    • 傳遞律
  • 根據(jù)以上規(guī)則码耐,可以繼續(xù)推出:
    • 合并規(guī)則:由X->Y追迟,X->Y,有X->YZ
    • 偽傳遞規(guī)則:由X->Y骚腥,WY->Z敦间,有XW->Z
    • 分解規(guī)則:由X->Y,Z屬于Y束铭,有X->Z
  • Armstrong公理系統(tǒng)是有效的廓块,完備的
    • 有效:由F觸發(fā)根據(jù)公里推導(dǎo)出來的每一個(gè)函數(shù)依賴一定在F+中
    • 完備:F+中的每一個(gè)函數(shù)依賴,必定可以由F出發(fā)根據(jù)Armstrong公理推導(dǎo)出來
  • 閉包問題

零碎:

1.存儲(chǔ)過程

  • 優(yōu)點(diǎn):
    • 存儲(chǔ)過程不像sql語(yǔ)句那樣再提出請(qǐng)求時(shí)才語(yǔ)法分析和優(yōu)化契沫,所以高效率
    • 存儲(chǔ)過程降低了客戶機(jī)和服務(wù)器的通信量
    • 方便實(shí)施企業(yè)規(guī)則
create or replace procedure <過程名>(參數(shù))
AS
<過程化sql塊>

2.事務(wù)

  • 事務(wù):用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列带猴,這些操作要么全做,要么全部做
  • commit:提交事務(wù)
  • rollback:回滾懈万,撤銷到事務(wù)開始階段
  • 事務(wù)的特性:ACID
    • 原子性
    • 一致性
    • 隔離性
    • 持續(xù)性
  • 事務(wù)故障類型:
    • 事務(wù)內(nèi)部故障:大多是非預(yù)期的拴清,不可由應(yīng)用程序處理
    • 系統(tǒng)故障:指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,需要重新啟動(dòng)
    • 介質(zhì)故障
    • 計(jì)算機(jī)病毒
  • 各類故障對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性
    • 數(shù)據(jù)庫(kù)本身被破壞
    • 數(shù)據(jù)異常
  • 恢復(fù)的原理也很簡(jiǎn)單:冗余

3.日志

  • 記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作文件会通,包括:
    • 開始標(biāo)記
    • 結(jié)束標(biāo)記
    • 更新操作
  • 登記日志文件口予,原則:
    • 登記的次序嚴(yán)格按照并發(fā)事務(wù)執(zhí)行的時(shí)間次序
    • 必須先寫日志文件,后寫數(shù)據(jù)庫(kù)

4.并發(fā)控制

  • 交叉并發(fā)方式:在單處理機(jī)系統(tǒng)中涕侈,事物的并發(fā)執(zhí)行實(shí)際上是這些并行事務(wù)的并行操作輪流交叉運(yùn)行(實(shí)際還是串行)
  • 同時(shí)并發(fā)方式:在多處理機(jī)系統(tǒng)中沪停,可以實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行
  • 事務(wù)是并發(fā)控制的基本單位
  • 并發(fā)操作帶來的數(shù)據(jù)不一致保活:
    • 丟師修改
    • 不可重復(fù)讀
    • 讀臟數(shù)據(jù)(讀到不正確的數(shù)據(jù))
    • 以上錯(cuò)誤的原因:并發(fā)操作破壞了事務(wù)的隔離性
  • 控制并發(fā)的主要技術(shù):
    • 封鎖
    • 時(shí)間戳
    • 樂觀控制
    • 多版本并發(fā)控制
  • 可串行性 是并發(fā)事務(wù)正確性的準(zhǔn)則

封鎖

  • 基本的封鎖類型:
    • 排他鎖X鎖(寫鎖)
    • 共享鎖S鎖(讀鎖)
  • 只存在多事務(wù) 同時(shí)用S鎖對(duì)數(shù)據(jù)上鎖驾凶,是可以同時(shí)進(jìn)行牙甫,其他的組合方式都會(huì)被拒絕掷酗。
  • 封鎖協(xié)議:在對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要規(guī)則窟哺,例如:
    • 何時(shí)申請(qǐng)鎖
    • 持鎖時(shí)間
    • 何時(shí)釋放
  • 封鎖協(xié)議的類型
    • 一級(jí)封鎖協(xié)議
      • 事務(wù)T在修改數(shù)據(jù)R之前必須對(duì)其加X鎖泻轰,直至事務(wù)結(jié)束才能釋放
      • 一級(jí)封鎖協(xié)議可防止丟失修改,保證事務(wù)T是可恢復(fù)的
      • 在一級(jí)封鎖協(xié)議中且轨,讀數(shù)據(jù)是不需要加鎖的浮声,所以她不能保證可重復(fù)讀,不讀臟數(shù)據(jù)
    • 二級(jí)封鎖協(xié)議
      • 在一級(jí)封鎖的基礎(chǔ)上增加事務(wù)T在讀取數(shù)據(jù)R之前必須加S鎖旋奢,讀完后釋放S鎖
      • 防止讀臟
    • 三級(jí)封鎖協(xié)議
      • 在一級(jí)封鎖協(xié)議的基礎(chǔ)上增加事務(wù)T在讀取數(shù)據(jù)之前R必須先對(duì)其加S泳挥,事務(wù)結(jié)束再釋放
      • 做到了防止重復(fù)讀
    • 該三級(jí)協(xié)議的主要區(qū)別在于 什么時(shí)候申請(qǐng)封鎖,什么時(shí)候釋放鎖

活鎖

  • 封鎖是可能導(dǎo)致產(chǎn)生操作系統(tǒng)中的異常狀態(tài)的
  • 活鎖:某個(gè)事務(wù)的請(qǐng)求永遠(yuǎn)得不到處理至朗,資源被搶占
  • 解決方法:采用FIFO

死鎖

  • 死鎖:互相等待的狀況
  • 死鎖預(yù)防:
    • 一次封鎖法:要求每個(gè)事務(wù)必須一次將所有要用的數(shù)據(jù)全部加鎖
    • 順序封鎖法:預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順序屉符,所有事務(wù)都按這個(gè)順序?qū)嵤┓怄i
      • 成本太高
  • 死鎖的診斷與解除
    • 超時(shí)法:設(shè)定時(shí)長(zhǎng),解鎖
      • 短了可能誤判锹引,長(zhǎng)了可能沒用
    • 等待圖法:不可產(chǎn)生回路矗钟,即可解決
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嫌变,隨后出現(xiàn)的幾起案子吨艇,更是在濱河造成了極大的恐慌,老刑警劉巖腾啥,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件东涡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡倘待,警方通過查閱死者的電腦和手機(jī)疮跑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來延柠,“玉大人祸挪,你說我怎么就攤上這事锣披≌昙洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雹仿,是天一觀的道長(zhǎng)增热。 經(jīng)常有香客問我,道長(zhǎng)胧辽,這世上最難降的妖魔是什么峻仇? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮邑商,結(jié)果婚禮上摄咆,老公的妹妹穿的比我還像新娘凡蚜。我一直安慰自己,他們只是感情好吭从,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布朝蜘。 她就那樣靜靜地躺著,像睡著了一般涩金。 火紅的嫁衣襯著肌膚如雪谱醇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天步做,我揣著相機(jī)與錄音副渴,去河邊找鬼。 笑死全度,一個(gè)胖子當(dāng)著我的面吹牛煮剧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播将鸵,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轿秧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了咨堤?” 一聲冷哼從身側(cè)響起菇篡,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎一喘,沒想到半個(gè)月后驱还,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凸克,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年议蟆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萎战。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咐容,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚂维,到底是詐尸還是另有隱情戳粒,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布虫啥,位于F島的核電站蔚约,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涂籽。R本人自食惡果不足惜苹祟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧树枫,春花似錦直焙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舔清,卻和暖如春丝里,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背体谒。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工杯聚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抒痒。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓幌绍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親故响。 傳聞我的和親對(duì)象是個(gè)殘疾皇子傀广,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容