国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

連接字符串與連接池

2024-07-10 12:37:53
字體:
來源:轉載
供稿:網友

數據庫連接是一種重要的、有限的、開銷昂貴的資源,因此用好連接對象是任何應用的最基本的要求。使用數據庫連接的要點可總結如下:

(1)保存連接字符串應注意安全。

(2)打開連接應遲,關閉連接應早。

連接字符串是訪問數據庫的鑰匙。連接字符串除了說明要訪問的數據之外,還包含了用戶為什么可以訪問那些數據的身份證明。在執行數據庫操作時,用戶身份證明是確定數據訪問權限的最重要的因素。

1、保存連接字符串

目前,硬編碼的連接字符串具有最好的性能,因為它們直接編譯進了應用的代碼之中。然而,硬編碼的字符串影響程序的靈活性,一旦連接字符串改變,應用程序必須重新編譯。

將連接字符串保存到外部提高了靈活性,代價是訪問外部字符串需要付出額外的開銷。但在絕大多數情況下,由此導致的性能開銷可以忽略不計,真正需要擔心的是安全問題。例如,攻擊者可能修改、竊取連接字符串。將連接字符串保存到外部環境的常見途徑有:配置文件,UDL文件,Windows注冊表。

.NET框架配置文件以純文本文件的形式部署,訪問方便。如果連接字符串包含密碼,文本格式將是最大的缺陷所在,因為密碼將以明文的形式保存。可以考慮引入一個專用的加密/解密引擎,不過這部分工作需要開發者自己完成。

UDL文件是供OLE DB提供者使用的文本文件,也就是說,SQL Server托管提供者不支持UDL文件。UDL文件也存在和前面的配置文件一樣的安全問題,總地看來優勢不多。

最后,Windows注冊表可以作為一個天然安全的存儲場所。注冊表是一個保存關鍵信息的系統知識庫,如果結合運用加密技術,可以達到較高的安全性。使用注冊表的主要缺點是部署麻煩,要求創建注冊鍵(可能還要執行加密)以及從注冊表讀取數據。雖然.NET Framework提供了一組調用底層Win32 API的封裝類,但這些類都沒有提供加密功能。ASPnet_setreg.exe工具可以用來創建HKEY_LOCAL_MACHINE下的注冊鍵保存用戶名稱和密碼,例如:aspnet_setreg.exe -k "Software/MyData" -u:userID -p:password。該ming令將加密指定的用戶ID和密碼。

2、 連接池原理

連接池允許我們通過一個緩沖池重用現有的連接對象,避免每次使用連接對象時都要新建一個對象。采用連接池之后,只要少量的連接對象就可以滿足大量客戶端的需要。

每一個連接池都與一個獨立的連接字符串及其事務上下文關聯。每次打開一個新的連接,數據提供者會嘗試將指定的連接字符串與連接池的字符串進行匹配。如果匹配失敗,數據提供者創建一個新的連接并將它加入連接池。連接池被創建之后,除非進程結束,否則不會被拆除。有人認為這種處理方式會影響性能,其實不然,維護一個不活動的或者空的連接池不需要多少開銷。

連接池創建之后,系統會創建一些連接對象并將它們加入連接池,直至達到額定的最小連接對象數量。以后,系統會根據需要新建和加入連接對象,一直到達最大連接對象數量限額為止。如果程序請求一個連接對象時沒有空閑的連接對象可用,且連接池里面的對象數量已達到上限,則請求被放入隊列,一旦有連接被釋放回緩沖池就立即取出使用。

避免用編程的方式構造連接字符串。如果通過合并多個輸入數據的方式構造出連接字符串,很容易給注入式攻擊以可乘之機。如果必須用到用戶輸入的數據,務必進行嚴ge的驗證。

3、關閉連接

關閉一個連接時,連接對象被返回給連接池以便重用,但這時實際的數據庫連接并未被拆除。如果禁用了連接池,則實際的數據庫連接也被關閉。這里必須強調的一點時,連接對象使用完畢后應當顯式關閉并將它返回給連接池,不要依靠垃圾收集器來釋放連接。實際上,當連接對象的引用超出有效范圍時,連接不一定被關閉——垃圾收集器的功能是拆除代表物理連接的.NET封裝對象,但這并不意味著底層的連接也被關閉了。

調用Close或Dispose方法可以將連接釋放回連接池。只有當生存期結束或出現嚴重錯誤時,連接對象才會被從連接池刪除。

4、連接池與安全

如果一個應用程序的所有數據訪問操作都使用同樣的連接字符串,連接池的優勢將發揮到極限。但是,這只是一種理想化了的狀況,很可能與應用程序的其他要求存在沖突。例如,如果只使用一個連接字符串,要在數據庫這一層次上執行安全控制就很困難了。

另一方面,如果讓每一個用戶分別使用自己的連接字符串(即為每一個用戶分別設定數據庫帳戶),勢必出現大量小型的連接池,許多連接根本不會被重用。依照慣例,這類問題的最佳解決方案是尋找兩個極端之間的一個適當折衷點。我們可以設置一組具有代表性的公用帳戶,同時修改存儲過程,使之接受一個表示用戶標識的參數,存儲過程根據傳入的用戶標識執行不同的操作。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静安区| 安阳市| 奎屯市| 马关县| 京山县| 盐源县| 伊宁县| 抚松县| 漳州市| 永泰县| 循化| 广平县| 罗定市| 成安县| 宜州市| 武乡县| 寿光市| 岳普湖县| 中山市| 周至县| 崇文区| 吴忠市| 阿图什市| 洛川县| 上犹县| 龙南县| 牡丹江市| 河津市| 珠海市| 平湖市| 泾川县| 福鼎市| 长岭县| 绍兴市| 宜良县| 五峰| 崇阳县| 冀州市| 扬州市| 饶阳县| 新野县|