SQL Server:保护数据库不被直接更改

时间:2010-07-09 12:18:28

标签: sql-server sql-server-2005 security database-permissions

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

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

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

[编辑]澄清我正在尝试做什么。该计划是一个时间和考勤计划。员工的时钟从时钟中收集并保存在数据库中;收集后,无法删除这些时钟,并且无法更改其日期和时间值。所以我需要一种方法来防止用户直接在数据库中弄乱这些值。

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

[编辑2] 感谢您的回答,我想再提两个与此主题相关的问题:

1 - 我是否只能向那些通过Windows身份验证访问数据库的人授予SELECT权限?

2 - 通过哈希系统保护表是否可行/可行?就像添加哈希列并计算每行的哈希值一样,然后将行数据与哈希值进行比较以检查更改?

4 个答案:

答案 0 :(得分:4)

如果有人有sa级访问权限,则无法阻止此操作。普通用户不应该访问。

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

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

答案 1 :(得分:3)

您无法阻止本地Administrators组的成员使用您的数据库执行他们喜欢的任何内容。任何相反的声明都是蛇油。在这个时代,所有需要的是一个无畏的用户找到改变数据的方法(例如,添加自己的时钟时间),从那时起谷歌将确保每个感兴趣的用户会找到黑客。

绝大多数用户都是他们使用的计算机上Administrators组的成员。即使是在最严格和严格的公司强制执行的组策略环境中,当涉及该用户的非常薪水时,也不会梦想将敏感数据留在用户计算机上。

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

答案 2 :(得分:0)

您是否可以使用SQL Server Compact Edition代替Express? 它嵌入到应用程序中,专为此类场景而设计。

答案 3 :(得分:0)

您可以在行级别向数据添加哈希检查,以便在修改后,每晚运行的篡改检查可以检测到并发出警报。

相关问题