關於connection string應該存放在哪裡有許多不同的方法每個都有自己的使用場合根據MSDN和我以前編程的經驗總結/摘錄了一篇文章希望對大家有所幫助
在程序中要存儲connection strings我們有不少的選擇的每一種方法都有自己的優缺點特別是在靈活性和安全性上當然很多人就直接把connection strings寫在了程序裡這樣雖然效率提高了一些可是實在是非常不方便將來的修改和配置所以並不是一種推薦的行為
在選擇connection strings存儲方式時感覺最重要的是安全性和易配置性其次就是性能在各類資料中我們可以看到存儲的方式主要有
)程序配置文件例如aspnet中的webconfig文件
)windows注冊表中
)UDL文件
)在COM+的catalog中(只用於serviced component)
下面我們逐個來討論一下這幾種方法的優缺點
)使用XML程序配置文件
我們可以使用<appSettings>來把 connection string存儲在程序配置文件的custom settings部分
<configuration>
<appSettings>
<add key=DBConnStrvalue=server=(local);Integrated Security=SSPI;database=northwind;username=;password=/>
</appSettings>
</configuration>
優點
a)很明顯容易分發connection string可以跟隨NET的xcopy機制極其簡單的deploy
b)易編程性我們可以使用 ConfigurationSettings 中的AppSetting來讀取connection string
using SystemConfiguration;
private string GetDBaseConnectionString()
{
return ConfigurationSettingsAppSettings[DBConnStr];
}
c)在ASPNET中使用的話可以自動更新也就是說如果一個管理員修改了webconfig中的connection string下一次這個string被訪問是修改後的內容會被使用這點在web編程中非常實用
缺點
安全性雖然ASPNET中已經明確寫了帶config後綴的文件是不能被客戶訪問的並且NTFS文件系統可以用來進一步加強安全性在web server中用明文來存儲connection string還是讓人覺得不爽啊幸運的是MS還提供了在配置文件中用encrypted方式存儲的辦法這下基本上就OK樂
)使用UDL文件
OLE DB NET Data Provider支持在connection string中使用UDL文件具體方法可以參考KB Q HOW TO: Use Data Link Files with the OleDbConnection Object in Visual C NET不過要注意的是這種方法SQL Server NET Data Provider不支持
優點
這也是一種比較標准的方法特別是你以前就一直用UDL
缺點
a) 性能 每次connection打開時都需要去讀取和分析UDL文件
b) 安全性UDL文件是以明文的方式存放的我們只能通過NT的文件系統設置它的訪問權限
要注意在ASPNET中要保證ASPNET跑的賬號有讀的權限並且注意不要把UDL文件放在虛擬目錄中不然它有可能會被客戶下載
)使用注冊表
當然我們也可以在注冊表中增加一個鍵來存儲connection但是這樣比較難以分發
優點
a) 安全性 我們可以對注冊表的鍵使用ACL來控制讀寫權限也可以考慮加密信息
b) 易編程性NET也提供了很多類使我們可以容易的操作注冊表
缺點
分發 這種方式必須要把相應注冊表的修改也放入程序的分發過程中一定程度上就與NET的xcopy不相符合了
)使用自定義文件
我們當然也可以自定義一種文件格式來儲存connection string但是這樣的話就沒有太多優點了而且需要額外的編程並且不容易分發所以在很多場合下不太適用
)使用COM+的catalog和construction arguments
在使用到COM+的時候我們也會把connection string存到COM+的catalog中然後通過object construction string來傳遞給objectCOM+會在初始化對象時調用對象的construct函數這種方法只適用於service components當我們用到分布式transaction或object pooling時我們就可以考慮這種方法
優點
管理Admin可以非常容易的使用MMC配置connection string
缺點
安全性雖然我們可以通過COM+中的role來進行一定的控制 COM+ catalog 不是一個非常安全的存儲地區所以不要以明文的形式在其中存儲connection string
分發性COM+ catalog中的內容也必須和我們的程序一起分發這部分的內容比較多這裡我就不一一詳述了
通過上面的分析我的結論是在ASPNET中還是存放在webconfig中最好而且加上encryped應該是很安全的了
From:http://tw.wingwit.com/Article/program/net/201311/15560.html