當(dāng)心懶惰的程序員降低你的數(shù)據(jù)庫安全
在我最近撰寫的一本書中,我嘗試著為菜鳥SQL Server管理員解釋SQL Server的安全性。必須承認(rèn)的一點(diǎn)是,很少有應(yīng)用程序是以SQL Server安全所希望的方式來進(jìn)行編寫的。我把問題歸咎于懶惰的數(shù)據(jù)庫開發(fā)人員。
不 足為奇的是,這本書早期的評審就是幾個(gè)開發(fā)人員,而且對我的評論表現(xiàn)出了反感。有一個(gè)人寫到,“SQL Server 并非唯一的數(shù)據(jù)庫,我編寫的代碼還必須要與Oracle相匹配。”換句話說,要取代對每個(gè)數(shù)據(jù)庫平臺(tái)安全的特定考量,他只要采用***標(biāo)準(zhǔn)即可,因?yàn)樗唵?易行,而且不用考慮對用戶產(chǎn)生的影響。
你需要意識(shí)到數(shù)據(jù)庫開發(fā)人員和廠商的態(tài)度,而且你需要與其抗?fàn)帯?/p>
數(shù)據(jù)庫安全技術(shù)***的標(biāo)準(zhǔn)是在數(shù)據(jù)庫中只創(chuàng)建一個(gè)用戶賬戶,然后讓每個(gè)應(yīng)用程序副本都使用此單一用戶賬戶登錄。此應(yīng)用程序會(huì)實(shí)現(xiàn)其自身的“安全性”,對于微軟,Oracle以及其他平臺(tái)公司數(shù)以百記專家開發(fā)出來的平臺(tái)安全性,我是確信它是健壯的。
此方法的問題主要體現(xiàn)在以下幾個(gè)重要方面:
審計(jì):當(dāng)只有一個(gè)用戶賬戶可以訪問數(shù)據(jù)的時(shí)候,你無法知道到底是誰在操作。當(dāng)然,應(yīng)用程序可以實(shí)現(xiàn)其自身的審計(jì)跟蹤,但是任何有相關(guān)知識(shí)的用戶如果擁有賬戶名和密碼都可以繞過審計(jì)跟蹤。
安全性:將用戶名和密碼嵌入進(jìn)一個(gè)連接字符串使其不易讓人發(fā)現(xiàn)信息?,F(xiàn)成的工具可以在幾秒鐘內(nèi)反編譯常見的企業(yè)應(yīng)用程序,這使得連接字符串和其密碼都采取了明文的方式。
故障排除:由于你不能將一個(gè)單獨(dú)的數(shù)據(jù)庫連接指定給某個(gè)人,因此很難對性能和操作問題進(jìn)行故障排除。當(dāng)一個(gè)用戶抱怨運(yùn)行緩慢的時(shí)候,管理員也無法準(zhǔn)確定位問題。這就意味著問題會(huì)持續(xù)更長的時(shí)間。
而 對于一個(gè)開發(fā)人員來說,換做讓他的應(yīng)用程序使用SQL Server自帶安全幾乎是不費(fèi)吹灰之力。只需要對主連接字符串做出更改,移除用戶名和密碼并讓用戶的Windows登錄憑證加以通過。在大多數(shù)環(huán)境中, 除了授權(quán)服務(wù)器端的權(quán)限讓人們可以讀寫必要的數(shù)據(jù)之外,這都是數(shù)據(jù)庫管理員所需要做的。你會(huì)利用SQL Server自己的審計(jì)功能,更好的進(jìn)行故障排除,并且對于每個(gè)應(yīng)用程序副本中嵌入的全能用戶不提供明文密碼來提升安全性。
那么你要如何與 ***標(biāo)準(zhǔn)的數(shù)據(jù)庫安全技術(shù)相對抗呢?很簡單。建立采購標(biāo)準(zhǔn)。確保新應(yīng)用程序使用SQL Server的Windows身份驗(yàn)證機(jī)制。改變現(xiàn)有的應(yīng)用程序。你可能需要和廠商制定一個(gè)時(shí)間表或是讓他們了解到豐厚的“維護(hù)費(fèi)用”收入不是那么好賺 的。掌控你的環(huán)境——有些人可以為你提供***的安全性但這對他們而言一切都很簡單,不要把公司交給這種人。