會自動生成一組連接資訊,如下圖:
同時亦會在Web.Config裡記錄連線的資訊
由圖可知,記錄的資訊是包含帳密的完整的連線資訊,也許我們可以透過主機信任的方式,使得它不儲存密碼部份的機密資訊,但本篇不討論這部份(而且我也不確定這點),也許我們可以透過其它軟體,替Web.config做加密的動作,不過我只想要手動替這行連線字串加密,來保持我的隱密性就夠了,這就是我要的目的。
先直接貼上程式碼
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Linq.Mapping; namespace Library.LinkSource { public partial class Link : MyDataContext { private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); partial void OnCreated(); public Link() : base(rtns(System.Configuration.ConfigurationManager.ConnectionStrings["SelfConnectionString"].ConnectionString), mappingSource) { OnCreated(); } public Library.LinkSource.MyDataContext DataBase() { return new Library.LinkSource.MyDataContext(rtns(System.Configuration.ConfigurationManager.ConnectionStrings["SelfConnectionString"].ConnectionString)); } public static string rtns(string s) { string xmlpath = func_Encryption.UserGroup.PrivateXmlKey; System.Xml.XmlDocument x = new System.Xml.XmlDocument(); //x.Load(xmlpath); x.LoadXml(xmlpath); return func_Encryption.RSA.DecryptRSA(s, x.InnerXml); } } }
MyDataContext是我建立的LinqToSQL所使用的dbml
SelfConnectionString是對應Web.Config的組態名稱
rtns(string s)是將從Web.Config取得的資料進行解密動作的方法,依照你個人設計方式去進行加解碼的動作,在我的範例裡,我另外事先寫好了加解碼的function讓我套用。
而我在Web.Config的原始字串,則是被我用RSA加密過的資料,一般來說除非取得我的私鑰,否則無法解析。
connectionString加密後的樣子:
<connectionStrings> <add name="SelfBlogConnectionString" connectionString="4E04EFD36139DFF903496A3C72B3E389914CC27617041075209CE2D819G197539F8A6E0E0F372D3D1446E451479A31FFBEA596DB99E2FDA7F32BFE817A6D5206C7BBC3771F861F3B5CFB52327AF118DF4CCBC0BB877561CFA243CA82372280E542BDEDAAE538E3443D79FB85B0B5FF2E21048658D7AAFAA7BA86CB20396C9610" providerName="System.Data.SqlClient"/> </connectionStrings>
當我要使用時
Link conn = new Link(); var sysc = from use in conn.DataBase().MyTable select use;
其實講明白點,就只是在
Library.LinkSource.MyDataContext(rtns(System.Configuration.ConfigurationManager.ConnectionStrings["SelfConnectionString"].ConnectionString)
多加了一個rtns()的處理而已。