2010-06-07 96 views
1

对项目使用实体框架并希望它与我的普通ado.net项目类似,我从不从数据库中获取密码哈希以避免安全泄漏秘密信息。在EntityFramework中隐藏passwordhash字段

从来就尽管一对夫妇的想法

  • 之一就是隐藏部分 类领域的,但我不知道这是否是 可能。
  • 变化与这种特殊情况

无论这些解决方案的一个丑陋的,如果 条款代码 生成模板离开我猜停止数据库中的数据,只是隐藏字段与返回的String.Empty或如。 有没有办法根本不启用该字段,但仍有可能添加新用户或在忘记密码功能中更改散列。

回答

1

您有几种选择:

  1. 您可以从概念层删除密码属性和EF不会从数据库中选择它。 (只需在设计器中选中属性时点击'删除'。)
  2. 您可以在数据库中创建视图并仅发布密码(即虚拟列)的散列。 An earlier question of mine可能会帮助你。
  3. 您可以将生成的实体中的密码属性的可访问性设置为非公开。 (再次,在设计器中选择属性并检查其属性。)当然要注意,密码确实是使用此选项离开数据库。

对于前两种情况,您需要一个辅助通道来更新数据库中的密码 - 可能是存储过程。第三个选项应允许更新密码,同时保持它对日常用户隐藏,虽然它当然会在内存中,所以精明的用户仍然可以访问它。

+0

谢谢,比我的想法更容易的解决方案,但它需要一些数据库黑客方式。我认为我会继续删除它并创建一个登录sp,它将userid和输入的密码作为哈希值。 – kiteloop 2010-06-12 13:44:43