SQL連線設定-SQL 連線字串中關於 Persist Security Info 參數的用途


當你在新增連線時,可以選擇 [Save my password] 選項,如果你有勾選,可以點選 [Advanced...] 按鈕查詢透過工具幫你產生的連線字串。
實際儲存在 web.config 的連線參數大概將會長這樣:
Data Source=.;Initial Catalog=master;Persist Security Info=True;User ID=sa;Password=xxxx
光透過 Visual Studio 工具上的說明就可大略得知 Persist Security Info 的用途。在預設不加上 Persist Security Info 的情況下,預設為 False,當程式需要進行資料庫連線時,此時會將「敏感資訊」例如:密碼(Password) 等資訊暫存在連線物件中(記憶體裡),當連線建立成功之後,就會立即將「敏感資訊」清除,這能確保記憶體中的「敏感資訊」會立即清除,降低資訊揭露(Information Leakage)的風險,因為這樣的風險也是出現在 OWASP Top 10 (2007) 的第六位 (A6)。
精確的來說,連線資訊是在 SqlConnection 類別的 ConnectionString 屬性或DbConnection 類別的 ConnectionString 屬性中。
當你將 Persist Security Info 宣告為 True 時,即便連線已經建立,也會將密碼儲存在記憶體中,供後續程式引用,而我們就剛好有一支程式需要在程式執行的過程中取得新的連線,需要用到原本的連線參數,所以需要將 Persist Security Info 宣告為 True 才能正常運作。
其實也不一定要將Persist Security Info 宣告為 True,因為只要將該程式修改成直接從 web.config 中重新讀取 Connection String 即可。
数据库连接前
ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=false"
数据库连接成功后
ConnectString="Provider=MSDAORA.1;User ID=yzs;Data Source=ydgl22"
----------------------------------------------------------------------------------------------------------
数据库连接前
ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=true"
数据库连接成功后
ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=dlyx;Data Source=ydgl22"
----------------------------------------------------------------------------------------------------------
 总体来说,如果数据库连接成功后不再需要连接的密码,出于安全性考虑,还是建议将Persist Security Info设为false,以防止后门程序取得数据库连接的密码(windows2003在sp1前就发生过这个问题)。

留言

這個網誌中的熱門文章

C#換行、連接符號

C#常用的幾個特殊逸出Escape字元