-1

场景是我们的客户拥有并管理一个托管在他们客户场所的系统(我们编写了它)。他们的客户在合同上受到限制,不能更改系统后面数据库中的任何数据,但如果他们愿意,他们可以更改数据,因为他们拥有完全的管理员权限(服务器由他们采购并托管在他们的场所内)。

要求是在他们更改任何数据时获得通知。现在,请忽略删除数据,这个讨论是关于修改表格中的数据。

我们使用 Linq to Sql 并覆盖了数据上下文,因此对于每次读取数据,我们将行数据的散列与存储的散列进行比较,该散列之前在插入/更新期间保存在表中的每一行上。

我们关心可扩展性,所以我想知道是否有人有其他想法。我们试图在 SSMS 中获取数据更改的通知,查询直接在数据库上运行等。此外,如果有人要停止我们的服务(Windows 服务),在启动时我们需要知道一行已被更改。有什么想法吗?

编辑:让我澄清一下,因为我本来可以更清楚。我们不一定要阻止所做的更改(这是不可能的,因为他们拥有完全访问权限)如果他们更改数据,更多人会收到通知。

4

1 回答 1

2

答案很简单:为了防止客户端直接操作数据,请将其存储在Windows AzureAmazon EC2实例中,使其无法触及。他们最多能做的是获取连接字符串,然后将他们作为受限权限用户连接。

此外,如果有人要停止我们的服务(Windows 服务),在启动时我们需要知道一行已被更改。

您可以创建触发器,将您想要的任何信息写入审计表,然后您可以检查审计表以确定您的应用程序和直接由客户端所做的更改。审计数据库更改是一个众所周知的问题,之前已经解决了很多次,关于它的信息很多。

对于每次读取数据,我们将行数据的哈希值与存储的哈希值进行比较

正如您可能猜到的那样,这非常缓慢且不可扩展。

于 2013-11-01T13:31:57.367 回答