我需要编写一个网络应用程序使用SQL服务器2005年,asp.net,ado.net.许多用户的数据存储在这个应用程序必须加密(阅读HIPAA)。

在过去的项目所需的加密,我密/解密的应用程序的代码。然而,这一般对于加密的密码或信用卡信息,因此只有极少数列在一对夫妇表。对于这种应用,远远超列在几个表需要进行加密,因此我怀疑推动加密的责任入数据层将更好地执行,尤其是考虑SQL服务器2005年的本地支持几个加密的类型。(我可以相信,否则,如果任何人有真实的,经验证据。)

我咨询BOL,我很擅长使用。所以我不想在线文章的链接或MSDN文件(其可能的我已经阅读)。

一种办法我的包裹我的头这么远是使用一个对称的关键是开设使用证书。

这样的一个时间设置程序步骤(通过执行一个数据库管理员在理论上):

  1. 创建一个主钥匙
  2. 备份主的关键文件,烧光盘和存储场。
  3. 打开主的关键,并创建一个证书。
  4. 备份的证明文件,烧光盘和存储场。
  5. 创建对称的关键用的加密算法的选择使用的证书。

然后随时存储程序(或个人用户通过管理工作室)需要访问的加密数据,你必须先打开对称的关键,执行任何tsql声明或批,然后关闭对称的关键。

然后就asp.net 应用程序感到关切的是,在我的情况下,应用代码的数据存取层,数据加密,是完全透明的。

所以我的问题是:

  1. 我想要打开,执行tsql声明/批,然后关闭对称的关键内的所有sproc?危险我看到的是什么,如果出现错误的tsql执行,并码sproc执行永远不会到达的声明,关闭的关键。我猜这意味着关键将继续开放,直到sql杀死SPID,sproc执行。

  2. 我应该,而不是考虑的三个数据库的电话对于任何给定的程序,我需要执行(只有当加密是必要的)?一个数据库中调用开放的关键,第二次呼吁执行sproc,第三个电话到密切的关键。(每个叫裹在自己试着赶回路,以便最大限度的可能性,一个开放的关键最终关闭。)

  3. 任何考虑应当我需要使用客户端的交易(意我的代码是客户,并发起交易,执行若干sprocs,然后提交的事务的假设成功的)?

有帮助吗?

解决方案

1)考虑使用的尝试。。赶在SQL2005年。不幸的是,没有最终的,所以你必须要处理成功的和错误的情况下独立。

2)不必要的,如果(1)处理清理。

3)没有真正差别的客户和服务器的交易与SQL服务器。连接。服务器()更多或更少,执行"开始交易"的服务器(和系统。交易/TransactionScope不相同,直到它提升为一个分布式交易)。至于关注与开/闭关键的多次内部事务,我不知道的任何问题是知道的。

其他提示

我是个大风扇的选项3。

假装一分钟你都会设立了事务基础设施不管怎么说,其中:

  1. 每次呼叫数据库是关于须如果现有的交易还没有开始然后一个。
  2. 如果一项交易已经在地然后叫来的数据储存挂钩,交易。这是常有用的业务规则提出的保存/会的数据库的事件。IE。如果你有一条规则,每当你出卖了一个小部件需要更新WidgetAudit表,你可能会想换部件的审计插入的电话在相同的交易因为这说的是数据存储库的一小部件已被出售。
  3. 每当原始呼叫者的数据存储(从步骤1)为完成了它的提交/返回的交易,它影响着所有的数据库行动期间发生的事情,它呼吁(利用试/赶/finally).

一旦这种类型的事务创建的,然后就变成简单的粘在一个开放的关键在开始时(当的事务打开了)和关键结束时(仅在交易之前结束)。使得"要求"的数据存储库不是几乎为昂贵,如开口的连接的数据库。这是真正的东西喜欢和.Open()燃烧的资源(甚至如果ADO.NET 是汇集他们对于您)。

如果你想要一个例子,这些种类型的代码,我会考虑看NetTiers.它有一个相当优雅的解决方案的事务,我们只是描述(假设你已经没有什么东西在头脑)。

只有2美分。好运气。

  1. 你可以使用@@错误看到,如果有任何错误发生在叫到一个sproc在SQL。

  2. 没有要复杂。

  3. 你可以但我更喜欢使用的交易SQL服务器本身。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top