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