SQL Server 2005 Express Edition 是 Microsoft SQL Server 的 Microsoft 桌面引擎 (MSDE) 版本的替代產品。它的體系結構完全重新設計,您可以像使用 Microsoft Access/JET 數據庫那樣安裝和使用它,但是不會出現與該方法相關聯的問題。SQL Server 2005 Express Edition 為滿足下列應用程序的需要而構建更好的解決方案,這經歷了很長的歷程: www.c hinaitpower.comlqkdsOnN
•替代 JET 數據庫。也就是說,如果需要,可以由 IT 部門代替 DBMS,這一方面可以滿足 HIPA 安全性的需要,一方面可以使用所有 SQL Server 保護數據和參照安全性的功能,並且無需考慮用戶采取的手段。(HIPPA 或 HIPAA(通常簡略為 HIPA)指聯邦立法部門,該部門要求將可靠的安全性和訪問保護用於存儲個人醫療衛生信息的數據庫中。) www.c hinaitpower.comlqkdsOnN
•無需升級到 SQL Server Standard Edition,DBMS 即可從單個用戶擴展到很多用戶,並且 DBMS 無需擔心在最需要調控器時,調控器的性能降低。 www.c hinaitpower.comlqkdsOnN
•可以輕松地在小型網站上和客戶端/服務器配置中工作的 DBMS。 www.c hinaitpower.comlqkdsOnN
•當 Service Pack 可用時,可以輕松地安裝並就地更新的 DBMS 引擎。這意味著安裝例程可以輕松地集成到應用程序的部署腳本中。 www.c hinaitpower.comlqkdsOnN
•通過簡單地指向安裝或傳遞到應用程序中的 DBMS 文件,就可以對其進行訪問的 DBMS。因為 SQL Server Express 旨在允許數據庫隨時連接,它可以比以前更加簡單地使用“松散”的 SQL Server MDF 數據庫文件並利用應用程序對它們進行部署。這使得部署獨立的 SQL Server Express 數據庫 .MDF 文件非常簡單,就像利用 JET 數據庫完成那樣。 www.c hinaitpower.comlqkdsOnN
•引用 SQL Server 的共享實例的標准方法。當安裝 SSE 時,默認情況下安裝為具有相同的實例名稱 SQLEXPRESS。這意味著如果假設應用程序安裝例程利用了該功能,無論應用程序的連接字符串是安裝在本地系統上還是安裝在局域網上,它都可以更簡單地針對 SQL Server Express。我會在稍後談論實例問題。 www.c hinaitpower.comlqkdsOnN
我的新書,Hitchhiker's Guide to Visual Studio and SQL Server 2005 (Addison Wesley),將會用一整節來討論 SQL Server 2005 Express Edition,但對於本文,我將重點限制在使用 SQL Server 2005 Express Edition Beta 2 的托管安全性上。隨後我將會討論下列內容: www.c hinaitpower.comlqkdsOnN
•什麼是“安全”的系統?對於小型系統而言,安全性意味著什麼呢? www.c hinaitpower.comlqkdsOnN
•MSDE 開發人員面臨著什麼問題? www.c hinaitpower.comlqkdsOnN
•SQL Server Express 如何解決這些問題? www.c hinaitpower.comlqkdsOnN
•應用程序如何獲得對 SQL Server Express 數據庫的訪問? www.c hinaitpower.comlqkdsOnN
•如何保護 SQL Server Express 數據庫? www.c hinaitpower.comlqkdsOnN
注 在撰寫本文時,SQL Server 2005 Express Beta 2 不應該用於產品系統中,不應該公開在 Web 上或在 EULA 限制外使用。www.c hinaitpower.comlqkdsOnN
在我們深入討論 SQL Server 2005 Express Edition 的技術優點以及如何配置其安全功能之前,我認為有必要定義安全性的實際含義。當然,對於小型企業或部門系統來說,當數據服務器受到安全威脅或其數據丟失或損壞時,該公司與大型公司一樣容易面臨失敗。SQL Server Express 可以駐留在 Web 服務器上,為 ASP 應用程序提供 SQL Server 服務。因此,正常運行時間、可靠性和安全性也意味著對 Web 服務器應用程序公開信息的能力,但同時還不易受到來自 Web 的攻擊。對於將編寫代碼和構建應用程序作為兼職的“經驗不足的開發人員”來說,SQL Server Express 也是非常理想的。這些醫生、律師、接待員和出租車司機都需要一個用於存儲和檢索數據的簡單、安全、穩定的方式,而不必考慮在後台正在為他們所做的操作。www.c hinaitpower.comlqkdsOnN
安全性還包括應用程序設計程序和開發人員要防止數據丟失而采取的這些步驟,無論丟失是由於意外、疏漏或是惡意攻擊所致。安全性意味著將那些不應該訪問數據的人員拒之門外,並保護物理文件和系統本身。它意味著制作備份並能夠無縫地執行還原。利用 SQL Server Express 系統,尤其具有挑戰性,因為與通常不同,沒有專職系統管理員或 IT 部門介入並執行周期性的備份,或者當系統發生故障時從各個部分中進行還原整個系統。具有安全的系統意味著當發生問題時保持您的工作(並且可能會有提升),然後可以快速、安靜、高效地恢復應用程序。我將會指出很多事項,您可以完成它們使應用程序更持久、更不容易受到攻擊並且更易於維護。 www.c hinaitpower.comlqkdsOnN
相當長時間以來,我一直都在贊美 SQL Server 的 MSDE 版本。這是因為我確信對於需要“少量用戶”數據存儲區的應用程序,或應用程序不需要對遠程 DBMS 引擎進行訪問的情況下,MSDE 是非常好的解決方案。盡管 MSDE 已經廣泛地被大量關鍵業務采用,它們通常必須依賴自己來處理很多問題 — 實現非標准解決方案,該解決方案有時與解決相同或不同問題的其他公司的嘗試相沖突。這些沖突包括:www.c hinaitpower.comlqkdsOnN
部署:如果將 SQL Server 與應用程序一起安裝將會怎樣?下面就是對相關問題的闡述。例如,如果 SQL Server 已經安裝,又該如何呢?如果實例名與其他現有實例沖突,又該如何呢?應用程序應該共享一個現有的 SQL Server 實例還是創建一個獨特的實例呢?當卸載安裝有共享 SQL Server 實例的應用程序行時會發生什麼情況?它還會卸載 SQL Server 實例嗎?如果會,那麼該實例宿主的其他數據庫會發生什麼情況呢?www.c hinaitpower.comlqkdsOnN
安全性:如果選擇共享一個 SQL Server 實例,應該為 SA 使用什麼密碼呢?如何設置用戶帳戶?應用程序是否應該只是使用由域控制器管理的集成安全性呢?如果沒有 Active Directory,又該如何呢?如何將數據庫安裝在目標 MSDE 服務器上?安裝後,數據庫是否對服務器上的其他應用程序可見呢?應用程序如何隱藏專用數據呢?www.c hinaitpower.comlqkdsOnN
性能: MSDE 使用限制服務器上並發操作數量的調控器。如果單個用戶應用程序需要同時執行幾個操作,但是調控器不發揮作用並使其速度下降,又該如何呢?坦白地說,我不確認這個問題是十分普遍的。我曾經聽到非常少的人抱怨調控器終止,並且使他們的應用程序運行得非常慢。的確,我曾聽說應用程序運行得不是特別快,但是這(通常)是由於野蠻強制查詢或“置疑的”數據庫實現導致的結果。www.c hinaitpower.comlqkdsOnN
可伸縮性: MSDE 數據庫限制在 2GB。如果您需要比這更多的數據,又該如何呢?這是否意味著您必須升級目標系統以使用 SQL Server Standard Edition,而這可能比期望使用它的系統花費更多?另外,我所聽到的最多的抱怨就是人們存儲二進制大對象 (BLOB)(例如數據庫中的文檔或圖片)時涉及的問題。一旦它們將 BLOB 替換為一個到 BLOB 文件的路徑,它們的數據庫就縮小到非常合理的大小了。www.c hinaitpower.comlqkdsOnN
工具: SQL Server 的 MSDE 版本是“部署”配置。同樣,它並不包括管理服務器或它所管理的數據庫所需要的任何工具。我通常會推薦開發人員購買 49 美元的 (SRP) Developer Edition,它包括用於管理其 MSDE 數據庫的整套工具。但是,由於許可限制,這些工具無法利用應用程序進行部署。這意味著開發人員必須構建他們自己的客戶端工具或簡單地將需要的功能構建到他們已部署的應用程序中。 www.c hinaitpower.comlqkdsOnN
管理: 無論它是如何完成的,應用程序必須要承擔很多管理性責任。對於沒有“SA”(系統管理員)值守的 SQL Server Express 系統而言,這一點尤為重要。這些管理責任包括管理登錄帳戶、權限、備份、還原和日志維護。最終用戶通常不具有執行這些操作的能力並且不應該被信任來執行這些操作 — 這取決於應用程序。因為 JET 數據庫需要周期性的壓縮或修復,MSDE(和任意 SQL Server 數據庫)需要周期性地備份(和轉儲)日志和數據庫。當數據庫沒有進行集中管理時(集中管理可以更簡單地管理管理性和維護任務),這個問題就變得相當重要。同樣,這取決於應用程序。www.c hinaitpower.comlqkdsOnN
Service Pack: 由於 MSDE 通常嵌入到應用程序中,用戶可能不知道他們已經安裝了一個 SQL Server 實例。同樣,他們也沒有注意到他們可能需要應用 SQL Server Service Pack 來保護他們的數據和系統以免受攻擊,即使他們在 5 點鐘新聞時看到它時,還在正常運轉。為了防止由蠕蟲和其他攻擊病毒引起的某些問題,MSDE SP3(a) 禁用了網絡連接,因此應用程序無法通過 Intranet(或 Internet)連接到服務器。問題在於 Service Pack 未能應用到很多系統中,因為用戶不知道它是必要的,或者不知道如何應用修補程序。將 SQL Server 更新應用到 MSDE 安裝這個問題仍然難以解決,因為 Microsoft 升級不是始終可以與用於部署 MSDE 應用程序和數據庫的自定義安裝腳本一起使用的。www.c hinaitpower.comlqkdsOnN
近年來,世界范圍的開發人員、架構師和 IT 經理一直對上述問題進行著討論。盡管沒有對所有這些問題的解決方案,但是通過一些相當基本的改動,SQL Server Express 已經解決了其中的很多問題。在了解差異之前,知道什麼內容沒有變化非常重要。SQL Server 2005 Express Edition 仍然是免費的(具有慣例的 licensing and use restrictions),它仍然支持訂閱者復制以及實際上與 MSDE 相同的所有功能。新的 SQL Server Express 版本無法宿主報告服務,但它可以作為宿主在 SQL Server 2000 Standard Edition 上的服務器的數據源。(有關 SQL Server 報告服務的詳細信息,請參閱 Boost.net 網站。)默認情況下,安裝程序仍然禁用將 SQL Server Express 實例公開到網絡的能力(首次在 MSDE SP3 中實現)。讓我們更仔細地考察一下 SQL Server Express 是如何解決每個問題的。 www.c hinaitpower.comlqkdsOnN
SQL Server Express 設計為可以通過 Web 下載,並可以像任何其他系統軟件那樣安裝在用戶系統上。(這假設系統管理員安裝了 SQL Server Express。)您可以使用交互式安裝程序(我將在稍後進行說明),或運行命令行安裝可執行文件。利用“安靜”模式,用戶根本不需看到任何 SQL Server Express 安裝對話框。 www.c hinaitpower.comlqkdsOnN
當安裝 SQL Server Express 時,默認情況下安裝程序會嘗試創建一個公用的 SQLEXPRESS 實例。如果它已經准備就緒,將提示您選擇放棄安裝或是選擇另一個實例名。此處的思想在於讓使用 SQL Server Express 的應用程序共享一個公用實例,而不是創建它們自己的實例。這使得應用程序配置更加簡單,同時還可以降低用戶系統上的內存和磁盤占用空間。 www.c hinaitpower.comlqkdsOnN
如果卸載應用程序,最好還是卸載您所安裝的任意唯一的 SQL Server Express 實例。但是,Microsoft 建議保留所有就緒的 SQLEXPRESS 實例,除非您確認系統沒有任何其他使用該實例的相關應用程序。確定這一點的一種方法是搜索其他應用程序可能連接或創建的其他數據庫的 Master 數據庫。www.c hinaitpower.comlqkdsOnN
默認情況下,SQL Server Express 配置為保護您的數據。在安裝時,您會有機會根據要求進一步加強安全性或放松安全性。您必須首先做出的決定就是選擇安裝實用工具配置 SQL Server Express 實例的方式。實例就是程序的一個副本。從 SQL Server 2000 版本開始,SQL Server 允許您安裝服務器的幾個獨立的實例。每個實例都被視為獨立的實體:每個實例具有其自己的 Master 數據庫、其自己的安全性配置以及其自己的磁盤和內存中的位置。安裝 SQL Server Express 後,每個應用程序(或您)必須決定它是否與使用該服務器的共享實例的其他應用程序共存,或者它是否要求其自己的獨立實例。有幾個與每個配置相關聯的安全性問題,我將在下面進行闡述。請注意,SQL Server Express 允許您安裝多達 15 個實例,但是我希望人們不要安裝多個實例,除非在非常特殊的情況下。www.c hinaitpower.comlqkdsOnN
默認情況下,SQL Server Express 假設您要創建(或使用)一個名為“SQLEXPRESS”的公用實例。還可以命名一個“公用”實例,但是這假設您所安裝的所有程序都可以分辯出這個獨特的名稱。如果保留默認名稱 (SQLEXPRESS),其他應用程序可以自動共享這個公用實例。利用這種方法,所有數據庫都可以由一個單個的、共享 Master 數據庫管理,並且有一個永遠不需要顯示的 SA 密碼。當使用公用實例時,您有可能看到其他安裝的數據庫,而其他應用程序也可能會看到您的數據庫 — 除非您確保應用了適當的權限。一般而言,對於家庭、個人或小型辦公室實現,您通常不必擔心一個應用程序會擾亂另一個數據庫中的數據。如果您安裝一個單獨的公用實例,那麼只有一組 SQL Server DLL、緩存和其他駐留內存的結構會加載到內存中。這意味著只有一個 SQL Server 實例占用 CPU 資源。 www.c hinaitpower.comlqkdsOnN
在安裝過程中,如果您將實例名設置為自己的值,那麼安裝程序會創建一個完全獨立的 SQL Server Express 版本。該實例具有其自己的 Master 數據庫、其自己的文件、DLL、內存占有空間以及其自己的 SA 密碼。除了可能已安裝的任意其他實例外,每個獨立的實例都會啟動占用 CPU 周期的單獨的 SQL Server 服務(程序)。盡管該方法在某種意義上增加了安全性,只有那些被授予對該實例訪問權限的程序才能看到它所管理的數據庫,但是實現和維護卻增加了很多成本。這是因為每個實例都要復制 DLL、緩存和其他內存中的結構。 www.c hinaitpower.comlqkdsOnN
另一種方法就是在安裝過程中刪除實例名。在這種情況下,SQL Server Express 作為默認實例安裝,假設沒有已安裝的默認實例。在這種方式中,只可以安裝一個服務器實例。同樣,如果這是安裝到系統上的唯一的實例,那麼在其他配置之間差異就會非常小,除非當它連接 SQL Server Express 時,我將在稍後對此進行討論。 www.c hinaitpower.comlqkdsOnN
SA 密碼是解開整個數據庫的密鑰。系統管理員獲准對數據庫或數據庫中的信息進行任何操作。SA 可以添加、更改或刪除數據庫,所有操作都可以在任何人不知道所做更改的情況下進行。正確設置這個密碼並對其進行保護是至關重要的。www.c hinaitpower.comlqkdsOnN
當您使用公用實例安裝 SQL Server Express 時,只有一個 SA 密碼需要關注。由於只有在您選擇使用 Windows 身份驗證進行安裝時,SA 帳戶才可以訪問,所以 SA 密碼永遠不需要顯示。在任何情況下,當安裝 SQL Server Express 時,都要求您提供 SA 密碼,但是在已發布的版本中,可以設置為隨機(隱藏)的值。 www.c hinaitpower.comlqkdsOnN
Microsoft 建議您配置 SQL Server Express 實例以使用 Windows 集成安全性身份驗證。這意味著計算機和 Windows 域系統管理員帳戶都被授予對 SQL Server Express 實例的完全 SA 訪問權限。當然,您需要成為計算機或域管理員才能執行維護、安裝數據庫以及執行像更改數據庫表值這樣的簡單操作。這並不意味著使用 SQL Server Express 的每個人都應該成為管理員。它真正的意義在於,作為安裝制度的組成部分,您需要創建“用戶”或應用程序登錄,並在應用程序需要的表格、視圖、函數以及存儲過程上設置適當的權限。我將會在稍後對此進行更詳細的討論。www.c hinaitpower.comlqkdsOnN
SQL Server Express 已經摒棄了“調控器”的概念。坦白地講,我以前幾乎沒有看到調控器降低任何 MSDE 系統的情況,但是通過放棄調控器,Microsoft 消除了有關 SQL Server 引擎可伸縮性的混淆。SQL Server Express 有很多方法來限制可伸縮性。正如在測試版中所配置的那樣,SQL Server Express 只能處理緩沖池中 1GB 的系統 RAM。這限制了 RAM 緩存中數據頁面和過程的數量。任何 SQL Server 專業人士都可以告訴您改進性能的最簡單方法就是向緩存中增加內存。將可見 RAM 限制在 1GB 意味著在您向 SQL Server Express 實例中增加負載時,您將(最終)耗盡性能。這是否意味著 SQL Server Express 可以支持 1000 個用戶呢?當然,如果將負載放在 SQL Server Express 實例上並不會那麼完美。在相同的情況下,10 個用戶就可以將 SQL Server Express 陷入困境,尤其是如果應用程序編寫得並不是非常有效時。www.c hinaitpower.comlqkdsOnN
SQL Server Express 也限制到一個單個的處理器,而不可以在附加處理器(最多兩個)上運行線程(如果系統支持)。這種限制也壓縮了您期望從 SQL Server Express 獲得的性能上限。www.c hinaitpower.comlqkdsOnN
當使用 SQL Server Express 的應用程序結束時,SQL Server 並不會關閉。在 SQL Server Express 版本中並沒有自動關閉選項。因此,即使在您的應用程序結束後,SQL Server 引擎也會保留在內存中,並繼續占用系統 RAM 和 CPU 資源。可以編寫 SQL 管理對象 (SMO) 例程來關閉 SQL Server Express 實例,但只有在您確認該實例沒有被其他應用程序共享時,才可以完成該操作。www.c hinaitpower.comlqkdsOnN
盡管 MSDE 數據庫限制在 2GB,SQL Server Express 數據庫文件卻限制在 4GB。這意味著可以比以前多存儲一倍的數據。坦白地講,這使我很困惑。我曾經在大型機上使用過大型的公司數據庫,它在單個 40MB 磁盤包上非常適合。我猜想人們喜歡使用數據庫來存儲其寵物的大量文檔和圖片。對於 MSDE 而言,日志文件大小並不受限制 — 至少表面上看是這樣。您仍然需要周期性地備份或截斷日志,我將在稍後進行討論。www.c hinaitpower.comlqkdsOnN
Microsoft 同時還更改了其對工具的訪問方法。即使您不將新的 GUI 安裝程序計算在內,當您下載 SQL Server Express Beta 2 時,新的 OSQL 版本、SQL 計算機管理器(MMC 管理單元)以及 SQLCMD 命令行工具都包括在其中,以協助管理 SQL Server Express 實例。此外,Microsoft 計劃設計一個新的 GUI 工具(暫時命名為 SQL Express Manager),以執行 SQL Server 數據庫的初始配置和周期性維護。這個工具很快可用於獨立下載,基本上可以說,它是不同於 SQL 查詢分析器的工具,可以執行用戶帳戶設置和維護以及協助編寫、測試和調試 SQL 查詢。您不能使用其他任何工具連接到 SQL Server Express,包括 Management Studio 或 SQL 企業管理器。但是,我希望在它發布前,當前的任何工具都可以訪問 SQL Server Express。 www.c hinaitpower.comlqkdsOnN
要管理 MSDE,您只須對 SQL Server Express 進行操作,這與對 SQL Server 的其他版本所做操作相同。我希望看到一個可以周期性地轉儲數據庫和日志然後截斷日志的自動日志備份腳本。或許,這就是企業第三方需要創建的腳本。到那時,我建議開發人員將這些管理任務構建到他們的應用程序中,然後使用 SMO 來執行這些需要的維護功能,並且使用 Windows 計劃程序來進行協助。 www.c hinaitpower.comlqkdsOnN
SQL Server Express 只能使用 Windows Installer (MSI) 安裝軟件包文件進行安裝。與 MSDE 不同,您將無法創建自定義的 MSM 安裝腳本。在其他方面中,它與 MSDE 相同,因此您仍然需要准備通過傳統的 Service Pack 方式來更新 SQL Server 引擎。在 Microsoft 工作的人都敏銳地意識到與此相關的問題,並且仍然在規劃著更好的策略。www.c hinaitpower.comlqkdsOnN
與 MSDE 不同,MSDE 不支持任何形式的 GUI 安裝實用工具,而 SQL Server Express 允許命令行安裝和 GUI 版本。對於使用標准版版本或更高版本的開發人員來說,這個安裝版本是非常熟悉的。但是,在該過程的早期,SQL Server Express GUI 安裝程序出現對話框(如圖 1 所示),詢問用戶是否要設置 Advanced Configuration 選項。默認情況下,安裝程序會配置正在進行安裝的 SQL Server Express 實例來使用集成安全性,同時禁用對 TCP 端口和外部協議的所有訪問。這意味著您將無法從其他系統或使用 SQL Server 憑據來訪問 SQL Server Express 實例,除非更改高級配置選項。 www.c hinaitpower.comlqkdsOnN
圖 1. 捕獲 SQL Server Express GUI 安裝實用工具的注冊信息www.c hinaitpower.comlqkdsOnN
SQL Server Express 安裝實用工具允許您在身份驗證模式對話框(如圖 2 所示)中設置服務器所使用的安全性類型。正如我將在稍後討論的那樣,默認模式是 Windows Authentication,它會根據域 Active Directory 數據庫來驗證用戶憑據。在理解切換到 SQL Server Mixed Mode 安全性的安全意義之前,最好保留為默認模式。例如,混合模式 (SQL Server) 安全性強制開發人員指出隱藏由其應用程序所使用的 SQL Server 憑據的方法,以防止肆無忌憚的黑客的使用。盡管如此,最好還是堅持使用默認設置,除非您的設計使該配置無法使用。www.c hinaitpower.comlqkdsOnN
興趣使然 黑客從何處來?在倫敦舉行的 Diligence Information Security 研討會上,一項調查表明大多數“黑客”(那些試圖獲得對受保護的數據進行未經授權訪問的人)是公司防火牆內部的個人 — 並且大多數(到目前為止)都是公司的正式員工。www.c hinaitpower.comlqkdsOnN
不管您選擇的安全性類型如何,安裝實用工具都將要求您提供 SA 密碼。盡管它要求您需要提供“強”密碼,這實際上是域密碼強度設置的功能。我提倡您使用格式規范的強密碼,但是如果使用 Windows 身份驗證模式,這一點就並不那麼重要了。實用工具不會讓您將其保留為空。www.c hinaitpower.comlqkdsOnN
圖 2. 設置由 SQL Server Express 實例使用的身份驗證模式www.c hinaitpower.comlqkdsOnN
與 SQL Server Express 安裝的一個也是唯一一個工具就是 SQL Server 計算機管理器 MMC 管理單元。該工具可用於管理 SQL Server 服務並且使得可以在網絡上查看 SQL Server。要安裝該組件,請在安裝 SQL Server Express 實例過程中使用 Features Selection 對話框(如圖 3 所示)選擇它即可。www.c hinaitpower.comlqkdsOnN
圖 3. 安裝 SQL Server 計算機管理器擴展。www.c hinaitpower.comlqkdsOnN
在安裝 SQL Server Express 實例後,通過導航到“Protocols for SQLEXPRESS”節點,右鍵單擊然後選擇 Enable(如圖 4 所示),SQL Server 計算機管理器可以啟用 TCP 端口或適當的網絡協議。在此例中,我啟用了 Named Pipes (Np) 協議。您還必須啟動 SQL Brower 服務來提供服務器名稱解析。www.c hinaitpower.comlqkdsOnN
注 請注意,“Slammer”蠕蟲利用這樣一個事實,大多數 SQL 服務器在 UDP 端口 1434 公開。這意味著 SQL Server Express 不會受到這種類型的攻擊,除非您啟用 SQL Browser 服務。www.c hinaitpower.comlqkdsOnN
圖 4. 使用計算機管理器 MMC 管理單元組件來啟用網絡可視性www.c hinaitpower.comlqkdsOnN
在安裝完成後,安裝文件(可以包含純文本或弱加密憑據以及其他敏感配置信息 — 基本上是指服務器的密鑰)應該被刪除或進行保護。 www.c hinaitpower.comlqkdsOnN
Microsoft 和我希望您使用托管代碼來打破對 COM 和 OLE DB 提供程序的依賴性 — 即,SQL Server 提供程序。SqlClient .NET 數據提供程序仍然是最好的選擇。如果必須使用 MDAC 和 OLE DB 從基於 COM 的應用程序連接到 SQL Server Express,您可以這麼做,但是您無法通過共享的內存提供程序進行連接,並且您將需要確保啟動了 SQL Browser 服務。 www.c hinaitpower.comlqkdsOnN
由於默認安全性設置是集成安全性,您將需要在連接字符串中使用 Integrated Security=SSPI,除非更改為混合模式安全性。您仍然需要在連接字符串中指定初始目錄或 Database,以指向 SQL 所針對的特定數據庫。當使用 SQL 分析器來監視代碼所執行的操作時,我還建議您使用 Application Name 連接字符串參數來唯一地標識您的操作。 www.c hinaitpower.comlqkdsOnN
SQL Server 團隊所推薦的新方法是將關鍵字 AttachDBFilename 添加到連接字符串。如果一直用於 Web 應用程序,對於典型 SQL Server 客戶端/服務器前端應用程序而言,這是不常用而且是極少使用的方法。對於說明 SQL Sever 實例的任意連接字符串,您必須按名稱(或 IP 地址)指向服務器並提供一個實例名。此外,當使用 AttachDBFilename 關鍵字指向連接字符串中的文件名時,ADO.NET(或 ADO)會通知目標 SQL Server 實例,您希望將引用的文件“附加”到服務器 — 這樣,在打開連接的過程中會將該數據庫注冊在 SQL Server Master 數據庫中。 www.c hinaitpower.comlqkdsOnN
在附加數據庫後,當您引用數據庫時,從此時起,該服務器訪問引用的文件 (.MDF) 及其附帶日志文件 (.LDF)。因為此處有一個 catch 語句,請務必小心。您必須 在連接字符串中指定 Database 關鍵字。如果不指定,該服務器則無法確定這個新附加的數據庫。代碼列表 1 顯示了被配置為附加並打開一個 .MDF 文件的 ADO.NET Sqlclient.SqlConnection 對象的示例。 www.c hinaitpower.comlqkdsOnN
代碼列表 1. 使用 AttachDBFilename 關鍵字連接到 SQL Server .MDF 文件。www.c hinaitpower.comlqkdsOnN
Try cn = New SqlConnection("Data Source=.\SQLExpress;" _ & "Integrated Security=True;Database=Biblio;" _ & "Timeout=60;" _ & "Application Name=SQLExpress Test;" _ & "AttachDBFilename=" & strFn) da = New SqlDataAdapter("SELECT AU_ID, Author, Year_Born from authors", cn) ds = New DataSet da.Fill(ds) DataGridView1.DataSource = ds.Tables(0) Catch ex As Exception MsgBox(ex.ToString) End Try
提示 將新數據庫附加到 Master 的過程比簡單地打開它要花費更多的時間。確保設置連接字符串 Timeout 關鍵字,以考慮該增加的時間。 www.c hinaitpower.comlqkdsOnN
盡管打開連接的過程會附加一個數據庫,但是當應用程序關閉該連接時,數據庫並沒有分離。一旦附加,它會永久性地安裝在 SQL Server 實例中。這意味著在應用程序結束後,數據庫本身對任何應用程序都是可視的,且帶有足夠的權限。它還表示您需要負責在帶有其他應用程序文件的相同目錄中維護數據庫文件。由於在 SQL Server 運行時,文件受到 Windows 的保護,所以在沒有首先從數據庫分離時,它不應該被“更新的”版本所覆蓋。當然,分離並不困難。您可以從 SQLCMD 中使用以下命令,或使用 SQL Server 2005 GUI 管理工具。另一種方法是使用當使用該數據庫的所有應用程序結束時自動關閉數據庫文件的 AutoClose 選項。www.c hinaitpower.comlqkdsOnN
EXEC sp_detach_db 'MyDb' GO
請記住要將數據庫文件保存在本地硬盤上,而不是保存在共享的網絡服務器上。強制 SQL Server 執行通過線纜的物理 I/O(即使它支持該操作)是非常危險的,並且它確實會降低您的性能。 www.c hinaitpower.comlqkdsOnN
與 JET 數據庫不同,備份 SQL Server 數據庫文件(可能有若干個文件)非常簡單,但是備份過程還涉及了通過 OSQL(其中一個工具)或 SMO 向 SQL Server 發送 T-SQL 命令。數據庫可以在任何時間進行備份,可以帶有任何數量的登錄(和活動)用戶。 www.c hinaitpower.comlqkdsOnN
連接到名為 SQL Server Express 實例(或任意 SQL Server 實例)上的命名數據庫的更典型方法是,簡單地在實例名後寫出計算機名,如代碼列表 2 所示。這種方法假設作為目標的 Database 已經注冊了 SQL Server Master 數據庫。 www.c hinaitpower.comlqkdsOnN
代碼列表 2. 使用對已注冊的 SQL Server 數據庫的“直接”訪問。www.c hinaitpower.comlqkdsOnN
cn = New SqlConnection("Data Source=.\SQLExpress;" _ & "Integrated Security=True;Database=Biblio;" _ & "Timeout=60;" _ & "Application Name=SQLExpress Test;" _ & "AttachDBFilename=" & strFn)
注 SQL Server Express 仍然支持連接字符串的“(local)”或“.”表示法來指代 SQL Server 的“默認”實例,但前提是只有您按照我前面所述安裝了“默認”實例。我並不建議使用這種方法,因為 SQL Server Express 服務器可能不是服務器上的原始“默認”實例。www.c hinaitpower.comlqkdsOnN
您不必使用默認的“SQLEXPRESS”實例名來安裝 SQL Server Express。我可以想象出幾種情況來說明使用默認實例名並不是很好的解決方案。在這種情況下,您需要使用安裝過程中的“高級配置”選項,以選擇另一個實例名並在連接字符串中使用這個實例名。這種方法的問題在於,如果應用程序安裝實用工具不知道安裝在目標服務器上的數據庫名稱,您的名稱可能會與現有名稱發生沖突 — 正像在用戶系統上安裝 SQL Server 的某個其他應用程序可能會與您選擇的名稱發生沖突一樣。這就解釋了為什麼 SQLEXPRESS 的公用實例名是如此重要的一項創新。www.c hinaitpower.comlqkdsOnN
從應用程序連接到“公用”服務器名的另一種方法是使用別名。也就是說,您可以使用 SQL 計算機管理器來為 SQL Server 實例指定一個別名(如圖 5 所示)。在此例中,我創建了別名“George”,我可以將其用於我的連接字符串中。如果基本服務器發生變化(例如,當我從測試服務器更改為生產服務器時),我只要更改別名,該應用程序就會重定向到正確的服務器。 www.c hinaitpower.comlqkdsOnN
圖 5. 使用計算機管理實用工具來創建實例別名。www.c hinaitpower.comlqkdsOnN
當您的連接字符串包含關鍵字 Integrated Security=SSPI 時,ADO.NET(或您所使用的數據訪問接口)則使用 Windows 身份驗證模式。在幕後,這種模式使用 NTLM (NT LAN Man) Windows NT 質詢/響應身份驗證協議來驗證使用加密的帳戶憑據,以便保護傳輸過程中的密碼以防止“刺探者”以離線狀態攫取您的憑據。每次打開(或重新打開)連接時,用戶憑據會根據域控制器 (Active Directory) 數據庫重新進行驗證。Microsoft 建議對大多數應用程序使用 Windows 身份驗證模式。www.c hinaitpower.comlqkdsOnN
注有關安全性支持提供程序 (SSP) 軟件包(如 NTLM 和 Kerberos)的詳細信息,請參閱 Platform SDK 中的 SSP Packages Provided by Microsoft。www.c hinaitpower.comlqkdsOnN
當然,我所編寫的用於驗證這段代碼的測試應用程序可以正常工作(該代碼顯示在代碼列表 1 中)。因為我是以管理員身份登錄的,所以我的 Windows 帳戶被授予了 SQL Server 上的系統管理員權限。這就是當使用 SQL Server Express 時,為什麼不需要使用 SA 帳戶或者不需要知道 SA 密碼的原因所在。然而,我的確希望最終用戶不被授予管理員帳戶。當任何人登錄到 Windows 域時,域管理員會確定授予他們的權限。該信息存儲在 Active Directory 中。這些權限不會傳遞到 SQL Server,除非您特別地授予這些權限。這意味著(默認情況下)不會 為非管理員授予到服務器或其內容的權限,並且您將需要設置用戶、組和角色以管理數據庫及其內容。執行該操作的機制在一段時間以來都沒有改變,在 SQL Server Books Online 中有對它們的詳細說明。有關 SQL Server 安全性最佳操作的詳細信息,請訪問 TechNet。www.c hinaitpower.comlqkdsOnN
從基本上講,您需要建立並配置四層安全性。 www.c hinaitpower.comlqkdsOnN
1.www.c hinaitpower.comlqkdsOnN
Windows 域帳戶:系統管理員需要建立域帳戶,包括登錄名和(強)密碼 — 用戶“憑據”。該帳戶(默認情況下)是“Domain Users”組的成員。管理員可以建立其他組並根據需要將用戶分配到這些組。我通常建立用戶的“類”,它按照用戶在辦公室中被分配的工作角色的類型對其進行分類。例如,我將建立“Accounting Admin1”和“Accounting Admin Lead”組,並將特定的 Windows 域帳戶添加到這些組。可以分配給單個 Windows 用戶多個角色。 www.c hinaitpower.comlqkdsOnN
2.www.c hinaitpower.comlqkdsOnN
工作站和用戶的物理安全性。如果在用戶離開時,工作站保留為登錄狀態,或者用戶允許其他人使用他們的 Windows 帳戶憑據,那麼您的安全性已經被洞穿。這一層通常被忽略。這就解釋了為什麼當用戶沒有實際出現時 Microsoft 使用密鑰訪問系統來防止對系統的訪問。 www.c hinaitpower.comlqkdsOnN
3.www.c hinaitpower.comlqkdsOnN
SQL Server 登錄:這是在 SQL Server 上建立的帳戶,用於屏蔽連接到 SQL Server 的嘗試。您向該列表中添加的每個帳戶,都會減弱保護數據的服務器能力,因為它允許額外的 Windows 用戶獲得對該服務器的訪問。當使用集成安全性(我們建議這麼做)時,您仍然需要在 SQL Server 上建立一個登錄帳戶,以允許特定用戶或 Windows 域組(例如 Domain Users)對目標數據庫進行訪問。授予每個登錄帳戶對一個或多個數據庫的訪問權限,並且如果初始目錄 (Database) 關鍵字沒有在連接字符串中使用,則分配一個所引用的默認數據庫。 www.c hinaitpower.comlqkdsOnN
4.www.c hinaitpower.comlqkdsOnN
數據庫用戶:保護的最後一層是在數據庫本身中進行管理的。在這種情況下,您需要建立一個或多個數據庫用戶,為這些用戶授予對特定表格、視圖、函數和存儲過程的訪問權限。如果需要,您甚至可以授予對特定列的訪問權限。 www.c hinaitpower.comlqkdsOnN
在任何 SQL Server 數據庫上管理安全性帳戶的一個方法就是使用 SQLCMD。但是,除非您是數據庫管理員 (DBA) 並且具有 T-SQL 的豐富經驗,否則這可能有一點令人畏縮。幸運的是,您可以使用 SQL Server 2005 Management Studio(與 SQL 企業管理器等價)來創建數據庫用戶、組或角色。該工具沒有包括在 SQL Server Express 中,因此您需要使用 Microsoft 提供的標准版或開發人員版的工具或使用第三方的一個工具。在創建這些角色後,您可以使用 SQL 工具將這些 T-SQL 命令導出到一個腳本文件。 www.c hinaitpower.comlqkdsOnN
混合模式身份驗證是使用 Windows 集成安全性的一個備選方法。在這種情況下,連接字符串 UID 和 PWD 關鍵字會根據 SQL Server 登錄名和密碼進行驗證。由於這種技術繞過了 Windows 身份驗證,它被認為是不太安全的。要使用這種安全性模式(並忽略我們的建議),您需要在安裝過程中啟用這種混合模式安全性。為此,當使用安裝批處理文件時,您可以將 SECURITYMODE 命令參數設置為“SQL”。該選項還可用於 SQL Server Express 交互式安裝程序和 SQL Server Express Manager (XM),其預覽版本應該很快就可用了。www.c hinaitpower.comlqkdsOnN
無論它是每小時百萬次點擊量的企業服務器還是每千年百萬次點擊量的小型辦公系統,在任意系統上違反安全,都可能意味著公司的崩潰 — 或者丟掉您的工作。由於 SQL Server Express 系統假設應用程序扮演很多安全性角色,需要對其進行准備才能管理 SQL Server 登錄、執行周期性維護(例如數據和日志備份)、將備份存儲移動到系統外(最好是現場外)以及適於數據庫使用的其他維護任務。應用程序還需要采取措施來監視服務器日志的運行狀況,並且在遇到問題時對其進報告。 www.c hinaitpower.comlqkdsOnN
不熟悉 SQL Server 的開發人員通常會忽略一個維護安全性的更基本的方法,例如 SQL Server 具有將對象保護到列的能力。在大多數關鍵的辦公系統中,DBA(如果有)會直接將訪問權限限制到基表。此後,DBA 為重點訪問數據庫的人建立特定的用戶和角色帳戶,根據專用視圖、存儲過程和函數啟用適當的權限。這樣,如果用戶憑據被盜,可以訪問數據的唯一方法就是通過這些非常簡單地限制的機制。 www.c hinaitpower.comlqkdsOnN
本文介紹了 SQL Server 2005 的新改進的版本,也稱為 Express Edition。我討論了使 SQL Server Express 易於使用並易於保護的差異,並討論了幾個安全性問題,涉及了保護數據、保護服務器以及保護物理系統。我希望這篇概述能夠促使您將現有的 JET 應用程序遷移到更安全穩定的 SQL Server 2005 Express Edition 中。www.c hinaitpower.comlqkdsOnN
關鍵詞: