【问题标题】:MS ACCESS Database Password - How secure?MS ACCESS 数据库密码 - 安全性如何?
【发布时间】:2010-12-01 03:39:15
【问题描述】:

我有一个用 Delphi 7 编写的程序,它使用 MS Access 2000 数据库作为后端。

我使用 16 个字符的密码保护了我的 MS ACCESS 2000 数据库文件 (*.mdb),密码由数字、控制、大写和小写字符组成。

但是,市场上似乎有许多程序声称可以检索密码。如果是这种情况,这个数据库密码的目的是什么?有没有办法让它无法恢复?可以说收紧加密?

谢谢

【问题讨论】:

  • 数据库密码,尤其是在 A2007 引入 ACCDB 格式之前,基本上没有用(很容易破解并且必须嵌入到您的前端代码中)——它们是安全剧院,并且有没有真正的理由使用它们。如果您需要数据安全性,您应该使用不同的数据库引擎。 Jet/ACE,因为它是基于文件的并且需要每个用户直接访问,所以永远不会真正安全。
  • 顺便说一句,你为什么认为你需要加密你的数据库?如果您确实需要保护数据,那么您绝对选择了错误的数据存储。

标签: database delphi ms-access encryption delphi-7


【解决方案1】:

MS Access 2010 使用更好的加密并具有一些其他功能。 SQL Server Compact 版本为您提供了更多的安全性,但仍然适用于桌面应用程序。

否则,使用服务器数据库:mysql、sql server、oracle。大多数都有免费版本。

【讨论】:

  • 谢谢,如果客户接受,我会考虑将数据库升级到更新版本
【解决方案2】:

有没有办法做到这一点 不可取回?拧紧 可以说是加密?

视情况而定;您可以更改您的数据库并寻找更安全的数据库(例如 MS SQL Server Compact Edition),或者如果您想继续使用 MS Access 并且数据的安全性对您很重要,请使用良好的加密来加密重要字段算法(例如 AES)。

如果你要加密你的字段,你可以在 Delphi 中透明地进行; Delphi 中的每个 DB 字段都派生自 TField 类,并且有两个事件,称为 OnGetText 和 OnSetText。每次尝试读取字段数据时都会触发 OnGetText,每次尝试写入字段时都会触发 OnSetText。您可以在触发 OnSetText 时对字段数据进行加密,这样,加密的数据将保存在数据库中。另一方面,您可以在触发 OnGetText 时解密字段数据,这样,用户将始终看到并使用解密的数据。整个过程对用户来说是透明的。

当然,您应该注意,每次读取或写入字段时对其进行加密/解密都会存在性能缺陷,具体取决于要加密的字段数量、大小、读取或写入频率以及加密算法用过的。最好只加密重要字段。

另一种选择是加密整个 MS Access 数据库文件,并在您的应用程序连接到它时对其进行解密,但这样一来,只要您的应用程序没有运行,该文件就是安全的;一旦您的应用程序正在运行并且文件被解密;该文件会暴露给其他人。

【讨论】:

  • “另一种选择可能是加密整个 MS Access 数据库文件”?任何建议我如何解决这个问题。有没有免费的delphi加密库可以加解密大型数据库文件?
  • @Shane,加密整个 MS Access 数据库文件只是加密文件。要在 Delphi 中加密/解密文件,您有几个免费或商业选项。 Delphi 中两个著名的免费加密库是 Delphi Encryption Compendium 和 TurboPower LockBox。另一个免费选项是使用 Windows 加密 API (Windows CryptoAPI)。
【解决方案3】:

如果是这样,这个数据库密码的目的是什么?

它让那些认为 Access 是一个真正的数据库的人感觉很好。

有没有办法让它无法检索?

停止使用 Access。

可以说收紧加密吗?

不在 Access 中。但是,如果你停止使用 Access 并使用真正的数据库,你会发现你也可以拥有真正的安全性。

【讨论】:

  • 如果应用程序分布广泛,培训成本会不会很高?
  • '如果是这样,这个数据库密码的目的是什么?有没有办法让它无法恢复?可以这么说加强加密吗?”我不相信你回答了我的问题。相反,你批评并放下产品。另外,你告诉我停止使用它。我不能停止使用它。不是我的选择。
  • @Shane:这就是重点。该产品没有做您希望它应该做的事情。我还能说什么?该产品不是很安全。使用 SQL/Server 作为带有 MS-Access 前端的后端数据存储库。
  • SQL服务器的维护呢?它不是基于文件的,因此更难设置和维护。此外,据我所知,OP 有一个 Access 后端,而不是前端。 Access 总是存在混淆,因为它是两个产品合二为一,Jet/Ace 端用于数据,Access 端用于表单、报告等。你永远不应该将两者放在一个文件中,除非它是一个文件用户,即使这样,后端/前端设置也会更好。
  • @Remou:它不是基于文件的,所以它更容易设置和维护。据一些人说。
【解决方案4】:

如果需要安全性,那么您不应该使用 Jet 数据库或任何其他文件共享数据库架构。就这么简单。

【讨论】:

  • 这不是一个选项!问题是:'如果是这样的话,这个数据库密码的目的是什么?有没有办法让它无法恢复?可以这么说收紧加密吗?”我不相信你回答了我的问题。
  • 所以安全不是你的选择。这真遗憾。密码的目的是为不了解的人提供安全的假象。基本上是默默无闻的安全性。
  • Shane:上面的帖子回答了这些问题。加密的目的是给人一种安全的假象。就像您可以用坏锁踢开一扇门一样,您也可以轻松破解 MS Access 安全性。没有办法减少它的可检索性。你不能加强安全性。您有两个选择: 1) 停止使用 Access 并转移到另一个安全的数据库; 2)放弃安全作为一种选择。没有办法拥有强大的安全性并使用 MS Access。
【解决方案5】:

这个数据库的目的是什么 如果是这样的话,密码呢?

目的是让人们升级到 MS SQL Server 并为此购买许可证。有些事情 MS 永远无法解决。

另一方面,他们有一个免费版本的 MS SQL Server,它并没有那么残缺,所以除非你的系统实际增长到需要完整的 MS SQL Server,否则你不必开始付钱。

但是,如果您开发这样的系统(没有计划并且不了解您选择的技术的限制),您很可能将自己锁定在专有功能中,无论好坏。

编辑: 这里直接引用MS

注意虽然模型和 本文讨论的技术 增强安全性,最安全的方式 帮助保护您的访问数据是 将表存储在服务器上,例如 运行 Windows SharePoint 的计算机 服务 3.0 或 Microsoft Office SharePoint Server 2010。

【讨论】:

  • 我没有选择数据库。我正在为其他人开发一个程序。同样,作为您之前的另外两个人,您没有回答问题,而是批评了供应商。
  • @Shane,对不起,我的目的是解释供应商在过去十年中的战略。与客户端服务器相比,任何基于文件的 DBMS 本质上都是不安全的,即使 2010 年改进了加密,我也不会赌自己的钱。不能更改数据库的原因是什么?可能没那么复杂(问题应该在i-logic.com/utilities/MySQL.htm级别)
  • Shane:别那么自卫了。他并没有批评供应商,他只是指出没有强大的 MS Access 数据库之类的事实。连微软都这么说。
【解决方案6】:

使用 crypt aes 代替标准机制。

【讨论】:

    【解决方案7】:

    我也在 E​​xperts-Exchange 上发布了这个问题。这是我一直在寻找的答案(不是批评)。虽然这个人最终告诉我要切换数据库,但他清楚地解释了原因,没有批评:

    数据库MX:

    正如您所发现的,在 A2007 之前,Access db 密码基本上没有安全性。有 1000 种工具(有些是免费的)可以立即破解 Access 密码。 A2007/10 正在使用改进的密码范例……它的安全级别尚不清楚。

    “有没有办法让它无法检索” 不。它只比没有好一点,这取决于您将使用 mdb 的特定环境。

    “如果是这样,这个数据库密码的目的是什么?” 这只是一个糟糕的实施。期间。

    对于 A2003 及之前的版本,您可以做的最好的事情是结合以下各项: 1) 数据库密码 2) 添加用户级安全性 3) 创建一个 MDE 来保护代码。但万一 MDE 可能被黑客入侵。

    所以,如果……您真的需要更好的安全性,您将需要查看 SQL Server 或等效平台。

    mx

    【讨论】:

    • 很好,但在您收到的一些回复中也没有“批评”。我没有批评任何人。请在此处接受其中一个答案。
    • 这个答案混淆了 Access 前端应用程序中的数据安全和代码保护。 -1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多