第一步一般都是創(chuàng)建數(shù)據(jù)庫,除非是使用第三方的數(shù)據(jù)庫服務(wù)。當(dāng)創(chuàng)建一個(gè)數(shù)據(jù)庫的時(shí)候,會(huì)指定一個(gè)所有者來執(zhí)行和新建語句。通常,只有所有者(或超級(jí)用戶)才有權(quán)對數(shù)據(jù)庫中的對象進(jìn)行任意操作。如果想讓其他用戶使用,就必須賦予他們權(quán)限。
應(yīng)用程序永遠(yuǎn)不要使用數(shù)據(jù)庫所有者或超級(jí)用戶帳號(hào)來連接數(shù)據(jù)庫,因?yàn)檫@些帳號(hào)可以執(zhí)行任意的操作,比如說修改數(shù)據(jù)庫結(jié)構(gòu)(例如刪除一個(gè)表)或者清空整個(gè)數(shù)據(jù)庫的內(nèi)容。
應(yīng)該為程序的每個(gè)方面創(chuàng)建不同的數(shù)據(jù)庫帳號(hào),并賦予對數(shù)據(jù)庫對象的極有限的權(quán)限。僅分配給能完成其功能所需的權(quán)限,避免同一個(gè)用戶可以完成另一個(gè)用戶的事情。這樣即使攻擊者利用程序漏洞取得了數(shù)據(jù)庫的訪問權(quán)限,也最多只能做到和該程序一樣的影響范圍。
鼓勵(lì)用戶不要把所有的事務(wù)邏輯都用 web 應(yīng)用程序(即用戶的腳本)來實(shí)現(xiàn)。最好用視圖(view)、觸發(fā)器(trigger)或者規(guī)則(rule)在數(shù)據(jù)庫層面完成。當(dāng)系統(tǒng)升級(jí)的時(shí)候,需要為數(shù)據(jù)庫開辟新的接口,這時(shí)就必須重做所有的數(shù)據(jù)庫客戶端。除此之外,觸發(fā)器還可以透明和自動(dòng)地處理字段,并在調(diào)試程序和跟蹤事實(shí)時(shí)提供有用的信息。