我需要使用 SQL Server 2005、asp.net 和 ado.net 编写一个 Web 应用程序。此应用程序中存储的大部分用户数据都必须加密(读取 HIPAA)。
过去对于需要加密的项目,我在应用程序代码中加密/解密。但是,这通常用于加密密码或信用卡信息,因此只有几个表中的少数列。对于这个应用程序,需要对多个表中的更多列进行加密,因此我怀疑将加密职责插入数据层会更好地执行,特别是考虑到 SQL Server 2005 对多种加密类型的 native 支持。 (如果有人有真实的经验证据,我可能会被说服。)
我咨询过 BOL,而且我相当擅长使用 google。所以我不想链接到在线文章或 MSDN 文档(我可能已经阅读过)。
到目前为止,我一直在思考的一种方法是使用使用证书打开的对称 key 。
所以一次性设置步骤是(理论上由 DBA 执行):
然后任何时候存储过程(或通过 Management Studio 的人类用户)需要访问加密数据,您必须首先打开对称 key ,执行任何 tsql 语句或批处理,然后关闭对称 key 。
然后就asp.net应用程序而言,在我的例子中应用程序代码的数据访问层,数据加密是完全透明的。
所以我的问题是:
最佳答案
1) 研究在 SQL 2005 中使用 TRY..CATCH。不幸的是,没有 FINALLY,因此您必须分别处理成功和错误情况。
2) 如果 (1) 处理清理,则不需要。
3) SQL Server 的客户端和服务器事务之间没有真正的区别。 Connection.BeginTransaction() 或多或少地在服务器上执行“BEGIN TRANSACTION”(System.Transactions/TransactionScope 也是如此,直到它被提升为分布式事务)。至于在事务中多次打开/关闭 key 的问题,我不知道有什么需要注意的问题。
关于asp.net - SQL Server 2005 加密、asp.net 和存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59926/