數(shù)據(jù)庫安全專家面臨的主要威脅之一就是如何消除推理功能。簡(jiǎn)單而言,推理就是從已知的信息推出新的信息,當(dāng)用戶能夠在低的安全級(jí)別下進(jìn)行數(shù)據(jù)拼湊從而推導(dǎo)出在高安全級(jí)別保護(hù)下的數(shù)據(jù)時(shí),推理功能便構(gòu)成了對(duì)數(shù)據(jù)庫的嚴(yán)重威脅。我們最好還是通過實(shí)例來了解什么是推理吧。
假設(shè)你是一個(gè)軍隊(duì)交通運(yùn)輸系統(tǒng)的數(shù)據(jù)庫管理員,你的數(shù)據(jù)庫里有一份名為運(yùn)輸貨物的數(shù)據(jù)表,包含了每條出貨航班上大量的貨艙信息。表中的每一行都代表了單次發(fā)貨信息,并列出了發(fā)貨的內(nèi)容和航班號(hào)。航班號(hào)被其他的數(shù)據(jù)表交叉引用,以確定發(fā)貨地、目的地、飛行時(shí)間和類似的數(shù)據(jù)。運(yùn)輸貨物表內(nèi)容如下:
航班號(hào) |
貨艙 |
貨品 |
安全分類 |
1254 |
A A |
Boots靴子 |
Unclassified未分類 |
1254 |
B B |
Guns槍 |
Unclassified未分類 |
1254 |
CCC |
Atomic Bomb原子彈 |
Top Secret絕密 |
1254 |
D D |
Butter牛油 |
Unclassified未分類 |
假設(shè)趙將軍(具有查看最高安全機(jī)密信息的權(quán)限)來要求查看關(guān)于1254航班運(yùn)載的貨物信息。趙將軍將會(huì)看到所有四次發(fā)貨信息。另一方面,小兵張三(沒有查看最高安全機(jī)密信息的權(quán)限)也要了這份數(shù)據(jù),不過他只能看到下面這個(gè)數(shù)據(jù)表:
航班號(hào) |
貨艙 |
貨品 |
安全分類 |
1254 |
A A |
Boots靴子 |
Unclassified未分類 |
1254 |
B B |
Guns槍 |
Unclassified未分類 |
1254 |
D D |
Butter牛油 |
Unclassified未分類 |
上面的操作過程都正確貫徹了安全規(guī)則,禁止沒有相應(yīng)安全權(quán)限的人看到比他不應(yīng)該看到的分類數(shù)據(jù)。然而,假設(shè)對(duì)于航班號(hào)和貨艙的排列有一個(gè)不能重復(fù)輸入信息的限制條件,這樣可以避免把兩次出貨任務(wù)安排到同一個(gè)貨艙。當(dāng)小兵張三看到看到1254航班的C貨艙沒有安排任何貨物時(shí),他很可能試圖為該航班插入一條運(yùn)輸蔬菜的新記錄。不過,當(dāng)他試圖插入這條記錄時(shí),當(dāng)唯一對(duì)應(yīng)的限制條件起作用時(shí),他的插入操作就會(huì)失敗。這時(shí),這個(gè)小兵張三完全可以根據(jù)上面這些數(shù)據(jù)來推理出1254航班上將要運(yùn)送一批機(jī)密貨物。然后,他可能會(huì)交叉引用航班信息表,找到這次秘密運(yùn)輸任務(wù)的發(fā)貨地、目的地和其他更多信息。
這自然引出了一個(gè)問題:你要怎么做才能防止這種推理問題的發(fā)生?基本上,你有兩個(gè)選擇。第一,你可以把安全列納入到唯一性的約束條件中。這種技術(shù),我們稱之為多實(shí)例(polyinstantiation),使同一張表格中的不同記錄處于不同的安全級(jí)別上。這樣小兵張三就永遠(yuǎn)不會(huì)知道最高機(jī)密運(yùn)輸任務(wù)的任何信息了。第二,你可以處理對(duì)貨艙的雙預(yù)約請(qǐng)求,把小兵張三要運(yùn)的一卡車蔬菜就擱置在機(jī)場(chǎng)。第二個(gè)選擇只是簡(jiǎn)單的保持表格的原樣。小兵張三可能知道有一個(gè)安全分類的運(yùn)輸任務(wù)要執(zhí)行,但不會(huì)有機(jī)會(huì)獲取運(yùn)輸內(nèi)容的任何信息。無論哪一個(gè)解決方案都很理想,但都要求對(duì)安全和實(shí)用之間的平衡做出某種意義上的取舍。