MS Access数据库的密码保护和其他安全措施

时间:2011-07-14 18:10:37

标签: security ms-access ms-access-2007

我被要求以尽可能高的级别保护Access数据库,并且有些东西告诉我保护文件的密码是不够的。我们有非常敏感的数据,我需要尽可能地保护它。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

首先,在讨论安全性时,我们必须定义威胁模型。

常见的威胁有:

  • 未经授权访问数据:不应该读取数据的人可以读取数据。
  • 未经授权修改数据:不应该修改数据的人可以修改数据
  • 未经授权破坏/损坏数据:有人能够破坏数据库
  • 权限提升:本应能够读取或写入某些数据的人,却能够读取或写入超出预期的数据
  • 数据泄露:应该能够读取某些数据的人能够复制大量数据并将其移动到外部(或受保护较少的)系统。
  • 恶意软件插入:有人能够将恶意代码插入应用程序

正如所讨论的,访问的主要防御是encrypting the database using a database password。使用 accdb 文件时,这通常可以提供足够的保护,防止未经授权的访问和数据修改。这是一种“一刀切”的方法,有一个密码,如果你有它,你就拥有了所有的特权,可以随意读取、写入和插入组件。此外,如果您对文件具有写访问权限,但没有密码,则可以损坏或删除文件。

更高的级别是保护 Access 文件:使用安全文件服务器只将文件提供给应该有权访问它的人。这几乎具有加密的所有好处,并且还可以防止破坏,因为未经授权的用户无法访问文件。这也允许我们撤销对该文件夹的权限,假设用户尚未复制。

如果我们想使用用户权限,我们可以将文件分成一个不包含特权数据的前端文件和多个后端文件,并分别保护这些文件,通过为每个文件使用不同的密码文件,或将它们存储在单独安全的位置。同样,安全位置提供了防止破坏的额外好处。

由于 Access 要求用户对文件具有写入权限(用于放置锁)才能具有读取权限,因此我们无法通过这种方式轻松分离读取和写入权限。我见过的一种方法是使用“影子文件夹”,其中为读取用户创建一个虚拟文件夹,并在访问该文件夹时,将最新的数据库文件放入其中,并每次都覆盖。然而,设置它并不简单。

另一种非常常见的方法是尝试使用 VBA 来限制用户可以执行的操作,并允许他们只打开特定的表单并对它们执行特定的操作。这可能与禁用旁路键和/或创建没有原始代码的编译副本(accde/mde)等技巧相结合。但是,这些只会阻止新手攻击者,并且实际上总是可以绕过,或者通过使用非 Access 程序读取数据(这将忽略 VBA 施加的任何限制),允许绕过密钥通过 COM,完全禁用 VBA机器等。编译好的数据库只能查看和修改代码,不能查看和修改数据,专家也可以通过手动重构代码来绕过(示例commercial service that offers this)。因此,虽然这乍一看似乎是适当的安全措施,但它存在严重缺陷。

在结合对代码进行签名时,编译代码非常有用,可以防止未经授权的恶意软件插入。由于反编译、修改然后重新编译的副本将没有有效的签名,假设攻击者无法访问用于签署代码的可信证书,并且系统可以配置为不打开没有该签名的已编译数据库,这会有所帮助检测对数据库的恶意修改。

如果我们想要拥有单独的用户权限,但不能使用单独保护的文件夹来强制执行此操作,则可以选择使用不同的密钥分别加密后端。出于可用性目的,我们可以使用密钥加密密钥为每个用户设置单独的密码,并让该密码授予对允许用户使用的后端的访问权限。我已经创建了一个使用密钥加密密钥 for this Q&A 的数据库示例,但现在我会进行一些更改,例如使用具有 KEK 和链接表到加密数据库的单个前端,以及使用 CNG API 在 VBA 中进行快速加密。

请注意,其中一些选项增加了很多复杂性,并且没有一个可以适当地防止数据泄露(这在我工作的国家/地区和部门中日益增加的威胁)。通常,在基础架构、管理等方面,使用与 Access 不同的后端要简单得多。这仍然可以允许您使用 Access 作为前端,因此用户甚至可能不会注意到更改,但权限管理由后端确定,可以通过为每个用户使用不同的密码来保护,或者,以防万一SQL 服务器,通过将安全性链接到 AD 域 (SSPI)。

在 SQL Server 中,我们还可以添加日志记录,通过仅授予存储过程的权限来限制获取大型数据集,并限制一段时间内的请求量,以减少数据泄露。但是,使用 Access 作为客户端所带来的额外复杂性通常会使选择不同的客户端更加明智,如果您只使用存储过程链接表不可用,并且 Access 往往会发出不必要的请求。

请注意,在选择使用其他后端时,仍然建议编译并签署Access数据库以缓解恶意软件插入,这不依赖于所使用的后端。


奖金:

用户级安全性如何?这是一项专门用于为每个用户提供读写权限的技术,以及用于修改数据库和管理用户的单独权限。不幸的是,它不安全,有很多工具可以删除它,而且它只适用于 mdb 和 mde 数据库格式,所以没有任何用处。

当然,您还可以通过保护 Access 运行的环境来保护用户的安全。我见过这样一种部署,其中用户只能访问位于防火墙后面的虚拟环境中的资源,不允许所有 Internet 访问, 仅限于打开这个特定的数据库,不允许存储设备,并且不与主环境共享剪贴板。这允许您使用 VBA 拥有一个安全的数据库,但严重限制了数据库的可用性(尤其是复制粘贴限制使用户感到沮丧,但复制和粘贴可能会用于数据泄露)。

答案 1 :(得分:0)

我建议你把它放在文件服务器上,并有一个严格的访问控制列表。

在数据库中强制用户登录 添加触发器以在记录更改时写出审核信息(使用用户信息,日期/时间)。

答案 2 :(得分:0)

这是我在Access 2003上使用了几年的一个问题。我们在数据库上设置了一个数据库密码以将其锁定,以便用户需要密码才能访问它。不一定是最好的选择和痛苦。

由于您使用的是MS Access 2007,因此您可能希望查看所需的Microsoft数据库保护选项。