代码之家  ›  专栏  ›  技术社区  ›  djeidot

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

  •  1
  • djeidot  · 技术社区  · 14 年前

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

    现在我必须添加一些表,这些表的内容只能从程序中更新。例如,我需要使用ManagementStudio来防止直接更改这些表。

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

    [编辑]澄清一下我想做的事情。该计划是一个时间和出勤计划。员工的时钟是从时间时钟中收集的,并保存在数据库中;一旦收集,这些时钟就不能被删除,其日期和时间值也不能更改。所以我需要一种方法来防止用户直接在数据库中处理这些值。

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

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

    1-我可以只授予那些通过Windows身份验证访问数据库的用户选择权限吗?

    2-是否可能/可行通过哈希系统保护表免受更改?像添加一个哈希列并计算每行的哈希,然后比较行数据和哈希以检查更改?

    4 回复  |  直到 14 年前
        1
  •  4
  •   Joe    14 年前

    如果任何人有SA级别的访问权限,则无法阻止此操作。但是,普通用户不应该有SA访问权。

    您可以通过授权将其与常规用户隔离开来,例如,仅允许应用程序用户访问插入、更新、删除(或执行,如果您使用的是存储过程而不是直接SQL),并且仅允许其他用户选择(或不)访问。

    您可以做其他一些事情来贬低临时用户,可能在插入/更新/删除时进行触发器检查,以强制这些操作仅由应用程序用户执行。我不推荐,但你可以。

        2
  •  3
  •   Remus Rusanu    14 年前

    不能阻止本地管理员组的成员执行此操作 他们喜欢什么都行 用你的数据库。任何与此相反的说法都是蛇油。在这个时代,只要 勇敢的用户找到改变数据的方法(例如增加自己的时钟时间),从那时起,谷歌将确保 每一个 感兴趣的用户会找到黑客。

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

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

        3
  •  0
  •   Chris Bednarski    14 年前

    你能用吗 SQL Server Compact Edition 而不是快车? 它嵌入到应用程序中,是为这种情况而设计的。

        4
  •  0
  •   cjk    14 年前

    您可以在行级别向数据添加哈希检查,这样,如果修改了哈希检查,则每晚运行的篡改检查可以检测到它并发出警报。