明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

.NET 數(shù)據(jù)訪問體系結(jié)構(gòu)向?qū)Ф?/h1>

[摘要]更多信息當(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,以禁止通過 SqlConnectionOleDbConnection 對(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"];}