您的位置:首页 > 数据库

ADO数据库连接中的Persist Security Info参数的作用

2009-12-18 10:56 274 查看
作者: 云杉上的蝴蝶 来源: IXPUB技术博客

可能许多人不知道数据库连接参数(Connection String) 中的Persist Security Info 参数是做什么用的,且用到的机会也很少,但我们这几天就遇到了一个跟Persist Security Info 参数有关的错误,特别分享一下处理的经验。
先从 Visual Studio 的Server Explorer 讲起,请先参考下图。
当你在新增连接时,可以选择[Save my password] 选项,如果你有勾选,可以点选[Advanced...] 按钮查询通过工具帮你产生的连接符串。


image2.axd.png



image3.axd.png


实际存储在 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)的风险,因为这样的风险也是出现在OWASPTop 10 (2007) 的第六位 (A6)。

精确的来说,连接信息是在SqlConnection类型的 ConnectionString属性或DbConnection类型的 ConnectionString属性中。
当你将 Persist SecurityInfo 宣告为 True时,即便连接已经创建,也会将口令存储在内存中,供后续程序引用,而我们就刚好有一支程序需要在程序执行的过程中取得新的连接,需要用到原本的连接参数,所以需要将 Persist Security Info 宣告为True 才能正常运作。

其实也不一定要将PersistSecurity Info 宣告为True,因为只要将该程序修改成直接从web.config 中重新读入Connection String 即可。
除此之外,我同事也遇到一个奇怪的事件,就是同一段代码在执行时明明有些页面不会挂掉,有些页面就会挂掉,不同人看同一页时,也会有时成功、有时失败的情况。那是因为 ADO.NET 有Connection Pool 的概念,在连接数足够的情况下是不需要重新创建连接的,所以才会有这种类似灵异事件的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: