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

作者: 云杉上的蝴蝶    来源: 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 的概念,在连接数足够的情况下是不需要重新创建连接的,所以才会有这种类似灵异事件的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值