連線字串的密碼消失了!?Persist Security Info 的用途

某天使用 LINQPad 寫程式,裡面混用了 LINQ to SQL 以及 Dapper,我認為很簡單的程式,卻莫名其妙出現 SqlException

如下圖所示,在第三次執行查詢時出現錯誤訊息 Login failed for user 'sa'.

image

不都是同一個連線字串嗎?怎麼突然顯示無法登入呢?🤔

於是我把連線字串顯示出來

image

連線字串的密碼消失了!?

解決方法

為何會出現這樣的情形呢?我節錄了保哥的文章內容

在預設不加上 Persist Security Info 的情況下,預設為 False,當程式需要進行資料庫連線時,此時會將「敏感資訊」例如:密碼 (Password) 等資訊暫存在連線物件中 (記憶體裡),當連線建立成功之後,就會立即將「敏感資訊」清除,這能確保記憶體中的「敏感資訊」會立即清除,降低資訊揭露 (Information Leakage) 的風險

所以在連線字串後加上 Persist Security Info=True 即可,如此一來,密碼就正常顯示了

image

image

但官方文件不建議將此參數設定為 True,非必要還是不要開啟 🔥

相關連結