Share via


SQL Server 2008

安全性

Rick Byham

 

摘要:

  • 加密方面的增強功能
  • 驗證方面的增強功能
  • 安全性稽核
  • 原則式管理

SQL Server 2008 所提供的許多新功能和增強功能,都是為了改進您資料庫環境的整體安全性而設計的。它添加了重要的加密和驗證功能,並引進一套全新的稽核系統,

幫助您呈報使用者行為,以及達成您的法規需求。

在本文中,我將概略介紹 SQL Server® 2008 安全性方面最重要的變更。其中一項您可能會先注意到的變更是,SQL Server 2005 介面區組態工具已被淘汰。介面區組態工具所提供的通訊協定選項,現在改由組態管理員工具提供。不過,要啟用和停用功能,現在必須使用全新的 SQL Server 2008 原則式管理架構來進行。

加密方面的增強功能

加密這一方面有兩大改進。首先,SQL Server 現在可以使用存放在外部協力廠商硬碟安全性模組上的加密金鑰。其次,儲存在 SQL Server 內的資料,現在可以在不影響連接到資料庫的應用程式的情況下進行加密。也就是說,資料庫系統管理員不需要修改現有的應用程式程式碼,便可以輕鬆地加密儲存在整個資料庫當中的全部資料。

第一項改進是透過全新的可延伸金鑰管理 (EKM) 功能達成,這項功能在 SQL Server 2008 的 Enterprise、Developer 和 Evaluation 版都有提供。EKM 可讓企業金鑰管理與硬體安全性模組 (HSM) 解決方案的協力廠商,在 SQL Server 註冊他們的裝置。這些裝置一經註冊,使用者即可使用儲存在這些模組上面的加密金鑰。

這些廠商甚至還可以開放這些模組內的進階加密功能 (例如金鑰老化和金鑰輪換)。在某些設定下,這麼做可以保護資料不受非系統管理員 (sysadmin) 群組成員的資料庫系統管理員存取。而且 T-SQL 密碼編譯陳述式也可以使用儲存在外部 EKM 裝置上的金鑰,來加密和解密資料。

另外一項新功能,亦即透明資料加密,讓您不必修改任何應用程式,就可以加密資料庫檔案。它會對資料和記錄檔案執行即時的 I/O 加密和解密作業。加密作業會用到資料庫加密金鑰 (DEK),它是儲存在資料庫開機記錄中,以供修復期間使用。DEK 會透過儲存在伺服器的 Master 資料庫中的憑證獲得保護。[圖 1] 中的圖說明了達成透明資料加密的架構。

Figure 1 透明資料加密的架構

Figure 1** 透明資料加密的架構 **(按影像可放大)

這非常適合保護靜止的資料。雖然幫助保護資料庫安全可以採取的預防措施不少,例如將機密資產加密起來,以及在資料庫伺服器周圍設立防火牆等,但是存放資料庫的實際媒體 (甚至是備份磁帶) 還是有其他的弱點。譬如惡意的使用者可以竊取該媒體,並且存取儲存的資料。

然而,透明資料加密可讓您加密資料庫中的機密資料,並且透過憑證,保護用來加密資料的金鑰。此舉有助貴公司遵守許多適當保護資料安全相關的法律、法規和業界指標。

透明資料加密可讓軟體開發人員使用進階加密標準 (AES) 和三重資料加密標準 (3DES) 加密演算法來加密資料。資料庫檔案的加密作業是在頁面層級進行,頁面在加密之前會先寫入磁碟,並且在稍後讀入記憶體時加以解密。啟用透明資料加密功能的資料庫備份檔案,也會使用資料庫加密金鑰進行加密。

若要還原已加密的資料庫,必須有權存取用來加密資料庫的憑證或非對稱金鑰。沒有憑證或非對稱金鑰,便不能還原資料庫。因此,請務必保有任何金鑰,因為您可能需要存取相關的備份。

驗證方面的增強功能

您可能已經知道,Kerberos 是一種網路驗證通訊協定,它提供一種高度安全的方式,相互驗證網路上的用戶端和伺服器實體 (或安全性主體)。Kerberos 可幫助使用者舒緩安全性漏洞,例如誘餌攻擊和攔截式攻擊。跟 Windows® NTLM 驗證比起來,Kerberos 除了更安全、更穩固之外,效能也更高。

若要使用 Kerberos 互相驗證連線,必須在 Active Directory® 中註冊 SQL Server 執行個體的服務主體名稱 (SPN),而且在連線時,用戶端驅動程式也必須提供註冊的 SPN。在 SQL Server 2008 中,Kerberos 驗證已擴充到所有網路通訊協定,包括 TCP、具名管道、共用記憶體和虛擬介面卡 (Virtual Interface Adapter,VIA)。在預設的情況下,用戶端驅動程式會自動為它所連接的 SQL Server 執行個體推測正確的 SPN。為了提高安全性、控制能力,以及方便疑難排解,您也可以在連接字串參數中明確地指定 SPN。

網際網路資訊服務 (IIS) 已經不再提供對 ASP.NET、報表管理員或報表伺服器 Web 服務的存取。在 SQL Server 2008 中,Reporting Services 會透過一套支援 Windows 式和自訂驗證的全新驗證子系統,來處理所有的驗證要求。

Reporting Services 現在主控內建至 SQL Server Common Language Runtime (CLR) 的 Microsoft® .NET Framework 和 ASP.NET 技術,而且 Reporting Services 也使用作業系統 (OS) 的 HTTP.SYS 功能。報表伺服器包括了一個 HTTP 接聽程式,可接受導向您在伺服器設定期間所定義的 URL 和連接埠的要求。URL 的保留和註冊作業,現在皆直接由報表伺服器透過 HTTP.SYS 加以管理。

安全性稽核

SQL Server Audit 是一項全新的功能,它可讓您建立自訂的資料庫引擎稽核事件。這項功能使用擴充的事件來記錄資訊以進行稽核,而且它還提供您在各種伺服器和資料庫物件上啟用、儲存和檢視稽核所需的工具和程序。

SQL Server Audit 的速度也比 SQL Server Trace 快,而且 SQL Server Management Studio 讓建立和監視稽核記錄檔的工作更加簡單。您現在可以稽核到更細微的層級,針對個別的使用者擷取 SELECT、INSERT、UPDATE、DELETE、REFERENCES 和 EXECUTE 陳述式。此外,SQL Server Audit 也完全可以使用 T-SQL 陳述式 CREATE SERVER AUDIT 和 CREATE SERVER AUDIT SPECIFICATION 及其相關 ALTER 和 DROP 陳述式來編寫。

設定稽核的方法是建立稽核,然後指定要記錄稽核事件的位置。您可將稽核儲存到 Windows 安全性記錄檔、Windows 應用程式記錄檔,或是儲存到您指定位置的檔案中。接下來是為稽核命名,並設定它的特性,例如稽核檔案的路徑,以及它的大小上限。您也可以選擇在稽核失敗時,讓 SQL Server 關機。如果需要將稽核事件記錄到一個以上的位置,只要建立多個稽核就行了。

下一步是建立一或多個稽核規格。伺服器稽核規格會收集關於 SQL Server 執行個體的資訊,並且加入伺服器領域物件,例如登入和伺服器角色成員資格等。它也包括 Master 資料庫中所管理的資料庫資訊,像是存取資料庫的權利。在定義稽核規格時,必須指明由哪一個稽核接收監視的事件。您可以定義多個伺服器稽核和多個伺服器稽核規格,但是每一個伺服器稽核一次只能包含一個啟用的伺服器稽核規格。

您也可以建立資料庫稽核規格,來監視單一資料庫中的事件。您可以在稽核中加入多個資料庫稽核規格,但是一個伺服器稽核每次只能在每一個資料庫啟用一個資料庫稽核規格。

用於伺服器稽核規格的 SQL Server 稽核動作事件,會分成幾個相關稽核動作事件的集合。這些集合都會公開成稽核動作群組。在稽核規格中加入群組時,等於是監視該群組所包含的所有事件。比方說,現在有一個名叫 DBCC_GROUP 的稽核動作群組,它會公開 DBCC 命令。但是 DBCC 命令不能個別執行稽核。

伺服器可用的稽核動作群組共有 35 種,當中有一部分是彼此息息相關的。例如,SUCCESSFUL_LOGIN_GROUP、FAILED_LOGIN_GROUP 和 LOGOUT_GROUP。另外也有 AUDIT_ CHANGE_GROUP 稽核動作類型,可用來稽核稽核程序。

資料庫稽核規格也可以指定組成資料庫層級稽核動作群組的稽核動作事件群組。除了稽核動作群組之外,資料庫稽核規格還可以包含個別的稽核動作事件,來稽核資料操作語言陳述式。您可以設定這些事件來監視整個資料庫,或只監視特定的資料庫物件。例如,SELECT 稽核動作可用來稽核對單一資料表或整個結構描述的 SELECT 查詢。您也可以設定這些事件來監視特定的使用者或角色的動作 ─ 例如所有的 db_writers。

舉個例說,您可以使用 SELECT 稽核動作,來稽核使用者 Mary 或 FINANCE_DEPT 資料庫角色或公用資料庫角色對單一資料表的 SELECT 查詢。這個方法很明顯的提供了許多您建立稽核所需的彈性和控制能力。

相依性報告

相依性報告已透過全新的目錄檢視和全新的系統功能而獲得改良。如果您使用 sys.sql_expression_dependencies、sys.dm_sql_referencing_entities 和 sys.dm_sql_referenced_entities,便可以同時針對結構描述繫結和非結構描述繫結物件,報告跨伺服器、跨資料庫和資料庫 SQL 相依性。

全新的資料庫角色

msdb 資料庫所含的資料庫角色也有所變更。db_dtsadmin 角色重新命名為 db_ssisadmin,db_dtsltduser 角色重新命名為 db_ssisltduser,而 db_dtsoperator 角色則重新命名為 db_ssisoperator。在升級伺服器時,也會將舊版的角色作為新角色的成員加入,以支援回溯相容性。

除了這些變更之外,另外也加入了新的資料庫角色來支援新的 SQL Server 2008 功能。特別是 msdb 資料庫現在包含了伺服器群組的新角色 (ServerGroupAdministratorRole 和 ServerGroupReaderRole)、原則式管理 (PolicyAdministratorRole) 和資料收集器 (dc_admin、dc_operator 和 dc_proxy)。而且管理資料倉儲資料庫也包含了資料收集器的新角色 (mdw_admin、mdw_writer 和 mdw_reader)。

FILESTREAM 安全性

現在 SQL Server 包含對 FILESTREAM 儲存體的支援,因此 SQL Server 應用程式可以儲存檔案系統上的非結構化資料 (例如文件和影像)。換句話說,用戶端應用程式不但可以藉由串流 API 和檔案系統的效能而蒙受其利,同時在非結構化和相對應的結構化資料之間仍可保有交易一致性。

FILESTREAM 資料必須儲存在 FILESTREAM 檔案群組中 — 這是一個特別的檔案群組,內含的是檔案系統目錄,而不是實際的檔案。這些目錄叫做資料容器,它們為資料庫引擎儲存體和檔案系統儲存體之間提供了介面。

就安全性而言,FILESTREAM 資料也像任何其他資料一樣受到保護 — 權限是在資料表或資料行層級授與。唯一授有 FILESTREAM 容器的 NTFS 權限的帳戶,是 SQL Server 伺服器帳戶所執行的帳戶。當資料庫被開啟時,SQL Server 會限制對 FILESTREAM 資料容器的存取,若是使用 T-SQL 交易和 OpenSqlFilestream API 存取,則沒有此限。

原則式管理

SQL Server 2008 原則式管理為管理 SQL Server 提供了一套全新的系統。您可以建立原則來測試和報告許多 SQL Server 的層面,而且可在單一資料庫、SQL Server 的單一執行個體,或是您所管理的所有 SQL Server 上套用原則。

您可以透過原則式管理,測試 SQL Server 組態選項和許多安全性設定。而且還可以針對一些安全性設定來建立原則,以偵測不符合規定的資料庫伺服器,並採取行動強制它們遵守規定。

SQL Server 2008 也預設停用了一些不必要的功能,以盡可能降低遭到攻擊的可能性。您可以使用原則式管理,選擇性的啟用其他所需的功能。這樣就可以根據排程來評估組態,萬一發現組態設定與原則不符,就會收到警示。

原則式管理會將相關的屬性組合在一起,並將他們公開在稱為 Facet 的元件中。舉例來說,介面區組態 Facet 包含了特定遠端查詢、CLR 整合、Database Mail、OLE Automation、遠端 DAC、SQL Mail、Web 助理和 xp_cmdshell 的屬性。您可以建立一項原則,規定只啟用 CLR 整合,但停用所有其他的功能。您的原則可以包括複雜的條件陳述式,例如除非命名為 Customer_Repsonse,否則停用所有 SQL Server 執行個體上的 Database Mail。

原則建好之後,您就可以在所有伺服器上評估該原則,產生一份報告,告訴您哪些伺服器不符合規定。按下 [設定] 按鈕之後,就會以原則設定來設定所有不合格的執行個體。您也應該排定時間表,定期執行原則,來監視伺服器的狀態。Database Engine、Analysis Services 和 Reporting Services 都有提供介面區組態 Facet。

不過,有一點要特別注意,原則式管理並不適合作為強制安全性的機制。在大多數的情況下,具有充分權限的使用者可以發出有違原則或忽視原則的陳述式,並且進行可能違反安全性原則重新組態的動作。您應該將 SQL Server 2008 原則式管理當作是監視 SQL Server 安全性設定的助力。

Facet 在強制設定方面的能力,必須根據它們相關的 DLL 陳述式是否能在非自動認可模式下執行而定。Facet 有時候可以在 Database Engine 的執行個體上強制採用組態設定,但系統管理員仍然可以重新進行設定。有些 Facet 可以由伺服器觸發程序強制採用 — 這樣不但可以防止低權限的使用者變更設定,同時也可以降低系統管理員不慎變更設定的可能性。但是在這種情況下,系統管理員必須暫時停用原則才能變更設定。其他 Facet 只能報告屬性的狀態,但不能變更它。像是檢查對稱或非對稱金鑰的金鑰長度的原則就是一例 (如 [圖 2] 所示)。

Figure 2 對稱金鑰的 Facet

Figure 2** 對稱金鑰的 Facet **(按影像可放大)

絕大多數的資料庫物件類型都有可用的 Facet,當中許多都有安全性用途。比方說,登入 Facet 可判斷每個登入是否有強制採用密碼原則,而預存程序 Facet 則可偵測所有程序是否皆已加密。其他 Facet 還可以測試使用者、結構描述、密碼編譯提供者、符合通用準則和 C2 稽核的屬性。

Windows Server 2008

SQL Server 2008 已完全通過隨附啟用了防火牆的 Windows Server® 2008 的測試。現在正是評估如何設定防火牆設定的好時機。另外,Windows Server 2008 也提供使用者存取控制,這一點您在使用 Windows Vista® 時可能已經體驗過了。它會限制您身為系統管理使用者自動獲得的權限。這些功能都將影響到 SQL Server 的所有版本。

結論

安全性一直是改進 SQL Server 的重心。加密和驗證的增強提供了新的功能,而全新的稽核系統和 SQL Server 2008 原則式管理則提供新的工具,讓您監視符合安全性的狀態。

Rick Byham 於 1995 年加入 Microsoft,他在客戶支援服務部擔任 SQL Server 支援工程師一職,之後加入 Microsoft Learning 的 SQL Server 小組。他在 2003 年轉任 SQL Server 線上叢書小組的技術作家,目前負責安全性相關文件。您可以透過電子郵件與 Rick 聯絡:rick.byham@microsoft.com

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.