.NET 數據訪問體系結構向導二
發表時間:2024-01-30 來源:明輝站整理相關軟件相關文章人氣:
[摘要]更多信息當使用 SQL Server .NET 數據提供程序連接池時,請注意以下幾個方面: 連接是通過連接字符串上的完全匹配算法進行池化的。池機制甚至對名稱-值對之間的空格也敏感。例如,下面的兩個連接字符串將導致兩個獨立的池,因為第二個連接字符串包含額外的空格字符。 SqlConnection c...
更多信息
當使用 SQL Server .NET 數據提供程序連接池時,請注意以下幾個方面:
• | 連接是通過連接字符串上的完全匹配算法進行池化的。池機制甚至對名稱-值對之間的空格也敏感。例如,下面的兩個連接字符串將導致兩個獨立的池,因為第二個連接字符串包含額外的空格字符。 SqlConnection conn = new SqlConnection( "Integrated Security=SSPI;Database=Northwind");conn.Open(); // Pool A is createdSqlConmection conn = new SqlConnection( "Integrated Security=SSPI ; Database=Northwind");conn.Open(); // Pool B is created (extra spaces in string) |
• | 連接池被劃分為多個事務專有池和一個與當前尚未在事務中登記的連接對應的池。對于與特定事務上下文關聯的線程,會返回相應池(該池包含在該事務中登記的連接)的連接。這就使得使用已登記的連接成為一個透明的過程。 |
OLE DB .NET 數據提供程序的池機制
OLE DB .NET 數據提供程序通過使用基礎 OLE DB 資源池來池化連接。有多個用于配置資源池的選擇:
• | 可以使用連接字符串來配置、啟用或禁用資源池。 |
• | 可以使用注冊表。 |
• | 可以用編程方式配置資源池。 |
為避免出現與注冊表相關的部署問題,請不要使用注冊表來配置 OLE DB 資源池。
監控連接池
要對應用程序使用連接池的情況進行監控,可以使用 SQL Server 隨附的事件探查器工具,或者使用 Microsoft Windows? 2000 操作系統隨附的性能監視器工具。
使用 SQL Server 事件探查器監控連接池
1. | 單擊 Start,指向 Programs,指向 MicrosoftSQLServer,然后單擊 Profiler 以啟動事件探查器。 |
2. | 在 File 菜單上,指向 New,然后單擊 Trace。 |
3. | 提供連接詳細信息,然后單擊 OK。 |
4. | 在 Trace Properties 對話框中,單擊 Events 選項卡。 |
5. | 在 Selected event classes 列表中,確保 Audit Login 和 Audit Logout 事件顯示在 Security Audit 下面。要使跟蹤變得更為清晰,請從該列表中刪除所有其他事件。 |
6. | 單擊 Run 以啟動跟蹤。當連接建立時,您將看到 Audit Login 事件;當連接關閉時,您將看到 Audit Logout 事件。 |
使用性能監視器監控連接池
1. | 單擊 Start,指向 Programs,指向 Administrative Tools,然后單擊 Performance 以啟動性能監視器。 |
2. | 右鍵單擊圖形背景,然后單擊 AddCounters。 |
3. | 在 Performance object 下拉列表中,單擊 SQL Server:General Statistics。 |
4. | 在顯示的列表中,單擊 User Connections。 |
5. | 單擊 Add,然后單擊 Close。 |
管理安全性
盡管數據庫連接池提高了應用程序的總體可伸縮性,但這意味著您不再能夠在數據庫級別管理安全性。這是因為,要支持連接池,連接字符串必須完全相同。如果您需要跟蹤每個用戶的數據庫操作,請考慮添加一個參數,以便能夠傳遞用戶標識并在數據庫中手動記錄用戶操作。您需要將該參數添加到每個操作中。
使用 Windows 身份驗證
在連接到 SQL Server 時,應該使用 Windows 身份驗證,因為它提供了許多好處:
1. | 安全性更易于管理,因為您使用單一 (Windows) 安全模型,而不是獨立的 SQL Server 安全模型。 |
2. | 可避免將用戶名和密碼嵌入到連接字符串中。 |
3. | 不會以明文方式通過網絡傳遞用戶名和密碼。 |
4. | 通過采用密碼到期期限、最小長度以及在多次無效登錄請求后鎖定帳戶,改善了登錄安全性。 |
存儲連接字符串
要存儲數據庫連接字符串,可以有多種選擇,這些選擇具有不同級別的靈活性和安全性。盡管在源代碼中對連接字符串進行硬編碼可提供最佳性能,但文件系統緩存可確保在外部將該字符串存儲到文件系統中所帶來的性能下降是微不足道的。幾乎在所有情況下,人們都首選外部連接字符串所提供的額外的靈活性(它支持管理員配置)。
當您選擇連接字符串存儲方法時,需要注意的兩個最重要的事項是安全性和配置簡易性,然后緊跟著的是性能。
可以選擇下列位置來存儲數據庫連接字符串:
• | 在應用程序配置文件中;例如,ASP.NET Web 應用程序的 Web.config |
• | 在通用數據鏈接 (UDL) 文件中(僅由 OLE DB .NET 數據提供程序支持) |
• | 在 Windows 注冊表中 |
• | 在自定義文件中 |
• | 在 COM+ 目錄中,方法是使用構建字符串(僅適用于服務組件) |
通過使用 Windows 身份驗證來訪問 SQL Server,可以避免將用戶名和密碼存儲在連接字符串中。如果您的安全要求需要采取更嚴格的措施,請考慮以加密格式存儲連接字符串。
對于 ASP.NET Web 應用程序而言,在 Web.config 文件內以加密格式存儲連接字符串,代表著一種安全的、可配置的解決方案。
注 可以在連接字符串中將 Persist Security Info 命名值設置為 false,以禁止通過 SqlConnection 或 OleDbConnection 對象的 ConnectionString 屬性返回對安全敏感的細節(如密碼)。
下面幾小節討論了如何使用各種選擇來存儲連接字符串,并介紹了各種方法的相對優點和缺點。這些內容有助于您根據自己特定的應用程序方案做出明智的選擇。
使用 XML 應用程序配置文件
可以使用 <appSettings> 元素在應用程序配置文件的自定義設置節中存儲數據庫連接字符串。該元素支持任意的密鑰-值對,如以下代碼片段所示:
<configuration> <appSettings> <add key="DBConnStr" value="server=(local);Integrated Security=SSPI;database=northwind"/> </appSettings></configuration>
注 <appSettings> 元素出現在 <configuration> 元素下面,并且不是緊跟在 <system.web> 的后面。
優點
• | 易于部署。連接字符串是通過定期 .NET xcopy 部署與配置文件一起部署的。 |
• | 易于以編程方式訪問。通過 ConfigurationSettings 類的 AppSettings 屬性,可以在運行時方便地讀取已配置的數據庫連接字符串。 |
• | 支持動態更新(僅限于 ASP.NET)。如果管理員在 Web.config 文件中更新連接字符串,當下一次訪問該字符串時(對于無狀態組件而言,這可能是客戶端下一次使用該組件進行數據訪問請求),所做更改將生效。 |
缺點
• | 安全性。盡管 ASP.NET Internet 服務器應用程序編程接口 (ISAPI) 動態鏈接庫 (DLL) 禁止客戶端直接訪問帶有 .config 文件擴展名的文件,并且可以使用 NTFS 權限進一步限制訪問,您可能仍然希望避免以明文形式在前端 Web 服務器上存儲這些詳細信息。為獲得額外的安全性,請以加密格式在配置文件中存儲連接字符串。 |
可以使用 System.Configuration.ConfigurationSettings 類的靜態 AppSettings 屬性來檢索自定義應用程序設置。以下代碼片段對此進行了說明,該代碼片段采用了前面例舉的名為 DBConnStr 的自定義密鑰:
using System.Configuration;private string GetDBaseConnectionString(){ return ConfigurationSettings.AppSettings["DBConnStr"];}