Bart Duncan Microsoft Corporation本頁內(nèi)容簡介保護(hù)開發(fā) SQL Server 的安全以最低權(quán)限帳戶身份進(jìn)行開發(fā)遵照保護(hù) T-SQL 的最佳方法了解具有獨(dú)特安全考慮事項(xiàng)的 T-SQL 命令小結(jié)參考資料
簡介
關(guān)于如何以安全的方式部署 SQL Server,存在大量很好的信息源。但是,這些資源的目標(biāo)用戶通常都是那些對已經(jīng)開發(fā)好的應(yīng)用程序執(zhí)行保護(hù)任務(wù)的數(shù)據(jù)庫治理員。另外,還有很多內(nèi)容討論了如何編寫安全的 .NET 和 asp.net 代碼,其中包括訪問 SQL Server 的 .NET 代碼。然而,很多這樣的資源關(guān)注的是在應(yīng)用服務(wù)器上運(yùn)行的數(shù)據(jù)訪問代碼,而不是在 SQL Server 中執(zhí)行的 Transact-SQL (T-SQL) 代碼。本專欄則將注重力投射到如何開發(fā)在 SQL Server 上安全運(yùn)行的 T-SQL 代碼。 返回頁首
保護(hù)開發(fā) SQL Server 的安全
開發(fā)安全 T-SQL 的第一步是保護(hù)開發(fā) SQL Server 的安全。為什么要想方設(shè)法地鎖定一個(gè)不保存真實(shí)數(shù)據(jù)的 SQL Server 實(shí)例,而從不將它展示給最終用戶呢?這是因?yàn)椋@樣會(huì)強(qiáng)制您編寫更安全的 T-SQL,并且當(dāng)將您的應(yīng)用程序部署到生產(chǎn)中時(shí),也會(huì)更加輕易地保護(hù)該應(yīng)用程序。下面是幾個(gè)具體的步驟,采用這些步驟您就可以快速保護(hù)開發(fā)服務(wù)器: •在開發(fā)或測試 SQL Server 中,至少應(yīng)該有一個(gè)正在運(yùn)行的、最新的 Service Pack 和 SQL 安全修補(bǔ)程序,這樣才能確保您的客戶能夠在此 SQL Server 版本上成功運(yùn)行您的應(yīng)用程序。 •默認(rèn)情況下,SQL Server 2000 Service Pack 3a 會(huì)禁用稱為“交叉數(shù)據(jù)庫所有權(quán)鏈接”的不安全功能。在開發(fā)服務(wù)器上安裝 SP3 時(shí),假如讓該 Service Pack 禁用“交叉數(shù)據(jù)庫所有權(quán)鏈接”,則有助于驗(yàn)證您正在基于安全的服務(wù)器配置編寫 T-SQL 代碼。 •找出開發(fā) SQL Server 上常見的安全配置問題的一種簡便方法是針對該服務(wù)器運(yùn)行 Microsoft Baseline Security Analyzer。除了這種方法之外,還可以利用本專欄“參考資料”部分列出的資源;這些資源提供了一些附加步驟,可幫助您保護(hù)開發(fā) SQL Server 的安全。 通常情況下,保護(hù)開發(fā)服務(wù)器安全的最佳方法,就好似它正在生產(chǎn)環(huán)境中運(yùn)行那樣對它進(jìn)行保護(hù)。您離這個(gè)目標(biāo)越接近,那么就可以越自信于您開發(fā)的代碼可以在一個(gè)安全的生產(chǎn)環(huán)境中正常運(yùn)行。 返回頁首
以最低權(quán)限帳戶身份進(jìn)行開發(fā)
在開發(fā)過程中,大家都著迷于使用具有 sysadmin 或 dbo SQL Server 權(quán)限的帳戶,直到部署之前才轉(zhuǎn)換為一個(gè)權(quán)限更低的帳戶。使用這種方法存在著一個(gè)問題:將設(shè)計(jì)人員的權(quán)限集還原為最低的所需權(quán)限集與在開發(fā)應(yīng)用程序過程中編寫這些權(quán)限集相比,前者要困難得多。 鑒于部署應(yīng)用程序之前您要決定可以取消哪些權(quán)限,所以請不要使用 SQL sysadmin 帳戶開發(fā) T-SQL 代碼。假如使用 SQL sysadmin 帳戶,可能會(huì)造成這樣的結(jié)果,即應(yīng)用程序會(huì)以比所需權(quán)限更多的特權(quán)帳戶運(yùn)行。因此,開發(fā)時(shí)請改為使用具有最低權(quán)限的帳戶。 使用這樣的帳戶進(jìn)行開發(fā)時(shí),您會(huì)逐漸地升高授予的特定權(quán)限,以 EXEC(執(zhí)行)一些必需的存儲(chǔ)過程、從某些表進(jìn)行 SELECT(選擇)等。請編寫這些 GRANT 語句,以便可以將同樣的最低權(quán)限輕松部署到生產(chǎn)環(huán)境中,而不會(huì)出現(xiàn)任何基于猜測的操作。 這種理念同樣適用于測試。執(zhí)行臨時(shí)測試以及結(jié)構(gòu)更加復(fù)雜的測試時(shí),所使用帳戶擁有的權(quán)限集和用戶權(quán)限應(yīng)該與在生產(chǎn)環(huán)境中所使用帳戶擁有的權(quán)限集和用戶權(quán)限完全相同。 在開發(fā)過程中使用最低權(quán)限帳戶的另一個(gè)優(yōu)點(diǎn)在于,您可以避免不小心編寫出需要危險(xiǎn)權(quán)限或過高權(quán)限的代碼。例如,假設(shè)您需要在 T-SQL 中與第三方 COM 組件進(jìn)行交互。為此,一種方法是發(fā)送一個(gè) SQL 批處理命令,它直接調(diào)用 sp_OACreate 和 sp_OAMethod 來操縱該 COM 對象。在應(yīng)用程序使用 sysadmin 帳戶連接 SQL Server 的開發(fā)環(huán)境中,上述方法效果很好。但是,當(dāng)您嘗試將已經(jīng)開發(fā)完成的應(yīng)用程序預(yù)備用于生產(chǎn)部署時(shí),您就會(huì)發(fā)現(xiàn)假如使用權(quán)限較低的帳戶,那么該方法不會(huì)奏效。為了讓該應(yīng)用程序能夠使用非 sysadmin 帳戶在生產(chǎn)環(huán)境中正常運(yùn)行,您必須針對 sp_OACreate 顯式授予 EXECUTE 權(quán)限。請考慮一下,假如某個(gè)用戶最終找到了一個(gè)方法,可以使用該應(yīng)用程序登錄執(zhí)行任意代碼,并利用此權(quán)限針對 SQL Server 實(shí)例化一個(gè)類似 Scripting.FileSystemObject 的 COM 對象,將會(huì)產(chǎn)生怎樣的安全隱患? 返回頁首
SQL Server Security Resource PageBuilding Secure ASP.NET applications: Authentication, Authorization, and Secure CommunicationSQL Server 2000 SP3 Security Features and Best Practices: Secure Multi-tier Deployment