我想使用SecureString來保存數據庫的連接字符串。但是,只要將SqlConnection對象的ConnectionString屬性設置爲securestring的值,那麼對於能夠讀取我應用程序內存的任何其他應用程序而言,它肯定會變得可見?使用securestring進行sql連接
我已經作出以下假設:
a)本人不能夠實例管理存儲器
b)中管理的存儲器內的任何串的外SqlConnection對象可以由一個應用程序如Hawkeye
我想使用SecureString來保存數據庫的連接字符串。但是,只要將SqlConnection對象的ConnectionString屬性設置爲securestring的值,那麼對於能夠讀取我應用程序內存的任何其他應用程序而言,它肯定會變得可見?使用securestring進行sql連接
我已經作出以下假設:
a)本人不能夠實例管理存儲器
b)中管理的存儲器內的任何串的外SqlConnection對象可以由一個應用程序如Hawkeye
絕對正確的是,當您需要將字符串傳遞給託管API時,例如設置ConnectionString,SecureString不會爲您提供任何好處。
它的確是專門爲安全的非託管API進行安全通信而設計的。
微軟理論上可以考慮加強SqlConnection對象支持安全的ConnectionString,但我認爲他們是不可能這樣做的原因是:
SecureString的真的只有在客戶端應用程序,例如有用的地方密碼是從用戶輸入字符逐個建立的,而不需要在管理字符串中具有整個密碼。
在這樣的環境中,使用Windows身份驗證連接到SQL Server更爲常見。
在服務器上還有其他方法來保護SQL Server憑據,首先將對服務器的訪問限制爲授權管理員。
使用SQL Server身份驗證時,.NET 4.5將允許將密碼作爲SecureString傳遞:[ADO.NET 4.5中的新增功能](http://msdn.microsoft.com/zh-cn/library/ex6y04yf(v = vs.110).aspx) – 2011-11-19 04:00:57
我的意見是,SecureString適用於以安全方式進行所有類型的機密通信,而不限於非託管API。 Per Lee SecureString受.NET 4.5支持。我個人在企業支持工程環境中工作,其中最低級別的支持可能有權訪問SQL中的某些數據,但未被授予知道什麼是SQL用戶的密碼。相反,這個祕密是事先用證書加密的,並且程序被授權使用證書而不是用戶。 – 2015-04-01 16:39:27
@DavidBurg - 我不明白你的觀點。 SqlConnection.ConnectionString仍然不使用.NET 4.5中的SecureString。如果您可以避免使用密碼,那麼顯然這是一個更好的解決方案,但情況並非總是如此。而使用證書進行身份驗證的程序不需要SecureString。 – Joe 2015-04-01 19:33:24
爲什麼連接字符串是一個問題?密碼是不是你想要保護的(除非你把密碼放在連接字符串裏,這對我見過的所有驅動程序來說都是可選的)。話雖如此,密碼通常必須在某些時候在內存中「清晰」(除非驅動程序有一些允許加密密碼的api,但實際上這可能實際上並不會有太大幫助)。
通常這不是問題,因爲進程處於安全環境中,如在Web服務器上,或作爲系統管理員帳戶類型運行(因此普通用戶無法訪問進程內存),或通常都是這兩種情況。如果這是在用戶端運行的客戶端計算機上,則必須假定該進程無論如何都會受到影響,這無濟於事。一旦你確保了這個過程,你就不必擔心這樣的事情。
將SecureString值分配給SQLConnection.ConnectionString將繞過安全性,使其無用。
一個SecureString的是爲了解決這些正常的字符串問題,ref:
恕我直言,SecureString類型是一個僞劣安全實現的補丁,目前SecureString並沒有在整個框架內實現,所以它的好處可以'完全可以使用。
我有同樣的問題,我選擇存儲敏感信息的RSA加密。
另一種解決方案是通過數據庫服務器上的服務託管數據訪問層,並且服務在本地系統帳戶下運行,該服務連接到數據庫並提供數據,而本地用戶無法訪問服務配置。
隨着新版本的。NET,SecureString實現更全面,使原始響應有點過時。 – 2015-04-01 16:42:51
是的,你可以,是的,你應該使用SecureString,以避免讓密碼在內存中徘徊,並打開攻擊。您不需要使用sql連接字符串,而需要使用Password屬性爲SecureString的新SqlCredential類。請參閱下面的文章以獲取幫助。
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcredential.password(v=vs.110).aspx
http://www.codeproject.com/Tips/408901/Storing-your-connection-string-password-in-SecureS
顯然鷹眼1.2.0可以顯示SecureStrings ......那麼,什麼是你的問題? – 2009-12-17 15:07:24
噢 - 那麼在securestrings有什麼意義呢? – Richard 2009-12-17 15:08:35