設(shè)計(jì)數(shù)據(jù)庫(kù)

第一步一般都是創(chuàng)建數(shù)據(jù)庫(kù),除非是使用第三方的數(shù)據(jù)庫(kù)服務(wù)。當(dāng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)的時(shí)候,會(huì)指定一個(gè)所有者來執(zhí)行和新建語(yǔ)句。通常,只有所有者(或超級(jí)用戶)才有權(quán)對(duì)數(shù)據(jù)庫(kù)中的對(duì)象進(jìn)行任意操作。如果想讓其他用戶使用,就必須賦予他們權(quán)限。

應(yīng)用程序永遠(yuǎn)不要使用數(shù)據(jù)庫(kù)所有者或超級(jí)用戶帳號(hào)來連接數(shù)據(jù)庫(kù),因?yàn)檫@些帳號(hào)可以執(zhí)行任意的操作,比如說修改數(shù)據(jù)庫(kù)結(jié)構(gòu)(例如刪除一個(gè)表)或者清空整個(gè)數(shù)據(jù)庫(kù)的內(nèi)容。

應(yīng)該為程序的每個(gè)方面創(chuàng)建不同的數(shù)據(jù)庫(kù)帳號(hào),并賦予對(duì)數(shù)據(jù)庫(kù)對(duì)象的極有限的權(quán)限。僅分配給能完成其功能所需的權(quán)限,避免同一個(gè)用戶可以完成另一個(gè)用戶的事情。這樣即使攻擊者利用程序漏洞取得了數(shù)據(jù)庫(kù)的訪問權(quán)限,也最多只能做到和該程序一樣的影響范圍。

鼓勵(lì)用戶不要把所有的事務(wù)邏輯都用 web 應(yīng)用程序(即用戶的腳本)來實(shí)現(xiàn)。最好用視圖(view)、觸發(fā)器(trigger)或者規(guī)則(rule)在數(shù)據(jù)庫(kù)層面完成。當(dāng)系統(tǒng)升級(jí)的時(shí)候,需要為數(shù)據(jù)庫(kù)開辟新的接口,這時(shí)就必須重做所有的數(shù)據(jù)庫(kù)客戶端。除此之外,觸發(fā)器還可以透明和自動(dòng)地處理字段,并在調(diào)試程序和跟蹤事實(shí)時(shí)提供有用的信息。