【问题标题】:Encryption SQL Server 2005加密 SQL Server 2005
【发布时间】:2013-09-22 07:05:22
【问题描述】:

我有一个 SQL Server 2005 数据库,我计划使用 PassByPhrase 加密我的一些列。但是这些列必须以原始形式显示在我的 ASP.Net 网页和一些 Crystal Reports 上。现在我知道,每次我的类(显示数据)访问数据库时,我都必须创建一个存储过程来解密列并运行这个存储过程。但是如果我将密码存储在某个存储过程中,那么任何有权访问数据库的人都可以打开存储过程并获取密码的值。那么加密的意义何在?

所以我的问题是:

  1. 如何在 ASP 网页或 Crystal Report 上显示我的加密列(以其原始形式)?

  2. 我应该如何存储我的密码?

【问题讨论】:

  • 我认为重点是不是将短语存储在存储过程本身上,而是从 asp.net 应用程序传入。显然,可以访问 asp.net 应用程序的人可以找出该短语并使用它来解密数据库中的数据。

标签: sql asp.net sql-server sql-server-2005 encryption


【解决方案1】:

没有灵丹妙药。当服务必须代表用户访问数据时,您看到的问题始终存在。加密不能替代访问保护。如果您需要显示加密数据,则必须出示解密密钥。只有两种可能:

  1. 您要求用户输入密码。用户输入密码(在 web 中,或在水晶中),然后您使用密码来解密数据。如果用户想要保护数据免受的侵害,这非常有效。数据受到密码学保护,即使对数据具有读取权限的用户仍然无法在不知道密码的情况下解密数据。在实践中也基本不可能实现。
  2. 您将加密密钥存储在密钥层次结构(对称密钥->证书->主密钥->服务主密钥)中,最终植根于服务主密钥,因此存储在 OS DPAPI 中。见Encryption Hierarchy。这为 SQL Server 服务本身提供了对解密密钥的访问权限,因此 任何 有权访问服务器的用户都可以通过简单地要求服务器为他解密数据来解密数据。在服务器上,数据仅受访问保护(授予/拒绝/撤销 SELECT 权限)的保护。然而,数据受到保护,不会发生意外的媒体丢失,这通常是真正的要求。当许可不允许TDE 时,这通常用作穷人解决方案。

仅此而已。其他任何东西要么是加密层次主题的变体(例如,将密码存储在受保护部分下的 ASP.Net 配置文件中),要么是普通的旧蛇油(例如在应用程序代码中嵌入密码)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2011-01-10
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多