2010-07-09 178 views
1

我们的程序附带SQL Server 2005数据库和SQL Server 2005 Express。通常它会在客户端的计算机中安装自己的SQL Server 2005实例。SQL Server:防止数据库被直接更改

现在我不得不添加一些表格,其内容只能从程序中更新。我需要通过使用Management Studio来防止直接更改这些表。

我该如何做到这一点?我应该设置用户权限吗?我可以使用加密吗?我想设置自己的'sa'密码来访问SQL Server实例并仅在程序中使用它,但是这并不会通过Windows身份验证使其访问失效。

[编辑]对我正在尝试做什么的一些澄清。该计划是一项考勤计划。员工的计时从时钟收集并保存在数据库中;一旦收集,这些时钟不能被删除,并且它们的日期和时间值不能被改变。所以我需要一种方法来防止用户直接在数据库中混淆这些值。

请记住,我们的大多数客户没有任何SQL经验,所以我需要在程序安装时设置这些权限。

[编辑2]谢谢您的回答,我想提出两个有关这一主题的问题:

1 - 我只授予SELECT权限,对那些通过Windows身份验证访问数据库?

2 - 通过哈希系统保护表格是否可以防止变化?就像添加一个哈希列并为每一行计算一个哈希值,然后比较行数据和哈希值来检查更改?

+1

你能解释一下这个背景吗?例如你是卖给企业还是个人?特别想要保护这些表的原因是什么? – 2010-07-09 12:40:13

回答

4

如果任何人有sa级别的访问权限,则无法阻止此操作。虽然常规用户不应该有访问权限。

您可以通过拨款将其与常规用户隔离,例如,只允许应用程序用户访问INSERT,UPDATE,DELETE(或EXECUTE,如果您使用的是存储过程而不是直接SQL),并且只允许其他用户使用SELECT(或无)访问权限。

你可以做一些其他的事情来减轻临时用户的负担,也许在插入/更新/删除时触发器检查来强制这些操作只能由你的应用程序用户完成。我不会推荐它,但你可以做到。

+0

由于数据库实例在*他们*机器上,所以普通用户将具有访问权限。 – 2010-07-09 12:29:11

+0

@Martin Smith:在企业领域,也许不是。本地管理员通常是受控的。但那为什么安装express呢? – gbn 2010-07-09 12:30:25

+0

@gbn - 我假设(也许不正确)这是他们出售的产品,因此无法控制。 – 2010-07-09 12:32:00

3

您无法阻止本地管理员组的成员使用您的数据库执行任何他们喜欢的任务。任何相反的要求是蛇油。在这个时代,所有需要的是一个一个无畏的用户找到一种方式来改变数据(例如添加自己的时钟时间),从此谷歌将确保用户感兴趣将发现黑客。

绝大多数用户都是他们使用的机器上的管理员组的成员。即使是在最严格和严格的公司执行的组策略环境中,当涉及用户的薪水时,也不会想到在用户计算机上留下敏感数据。

在用户有篡改数据的动机的情况下,在用户计算机上设置防篡改数据存储只是要求麻烦。集中存储数据,使用Web服务收集数据。

0

您是否可以使用SQL Server Compact Edition而不是Express? 它被嵌入到应用程序中,并被设计用于这种场景。

0

您可以在行级别为您的数据添加散列检查,以便如果修改它,每夜运行的篡改检查可以检测到它并引发警报。

+0

是的,我想到了,我的问题是:如何检测整行被删除? – djeidot 2010-07-12 11:02:42

+0

@djeidot - 有另一行存储表和相关的行数,并有防篡改哈希值以及... – cjk 2010-07-12 11:09:22