2

我意识到这个问题的答案可能很明显(如果对我来说有些不便),但我希望有人能有一个巧妙的解决方案。

我正在利用空闲时间慢慢构建一个应用程序,希望对工作有用。这是一个用于分配同行评审的简单跟踪应用程序。基本上,我只是想自学一些 C#。

我的问题是,因为我真的不能安装任何东西,而且我不能使用我自己的网站(两个原因 - 1)国防部可能不允许它,2)我希望这是一个桌面(WinForms ) 项目,而不是 Web),我使用 Jet(如 Access)作为数据存储。

我需要一种方法来保护数据库不被窥探,因为有些东西我真的只希望管理员级别的用户(如团队负责人)访问。我基本上决定设置一个数据库密码。安装时将选择一个密码,用于保护数据库,然后加密以供应用程序获取、解密并用于打开数据库连接。

我的问题是我希望这段代码有点公开。我最终想在我的网站上发布我的代码,并向 StackOverflow 和编程 subReddit 询问一些快速评论和见解。把它想象成一个穷人指导计划。对于维护,尤其是在我离开这份工作之后,我的同事最终将可以使用该源。如果他们有权访问加密的“密钥文件”和源,他们将能够确定数据库密码。

有没有办法对此进行编码,以便即使使用文件和代码,我的同事也无法进入数据库?我认为不是,但值得一问。

如果没有办法做到这一点,我想我的第二个选择是在我把它放在我的网站上时更改加密(将加密等价于哈希 - IV? - 在发布时更改为不同的东西),并提供源受密码保护的 rar 文件,仅将密码提供给管理人员。

有任何想法吗?

4

2 回答 2

3

没有“通过默默无闻的安全”。如果您始终认为所有代码都是公开的,那么您就有更好的机会实现真正安全的东西。如果你“隐藏”代码或“隐藏”密码,你就犯了一个可怕的错误。

以下是破解 Jet 密码的方法。 http://lastbit.com/access/

安全是一个深刻的问题。您不能在文件中输入密码。您可以将密码的哈希值放入文件中。

你有两个互补的问题。

  • 验证。用户是谁?这就是密码和密码可以告诉你的:谁在连接。

  • 授权。这个用户能做什么?这就是你有职责分离的原因。设置密码的安全人员和必须提供密码并有权访问数据的用户需要是不同的人。


编辑

“将在安装时选择一个密码,用于保护数据库,然后加密以供应用程序获取、解密并用于打开数据库连接。” 不工作。密码文件的加密密钥在应用程序中可用,使其全部打开。

“有没有办法对此进行编码,这样即使有了文件和代码,我的同事也无法进入数据库?” 是的。这很简单。使用密码哈希,而不是加密密码。

“仅将密码提供给管理人员” 错误。如果您将密码提供给某人,那么太多人知道​​密码。这会破坏身份验证。人们必须设置自己的密码,否则无法通过身份验证。


编辑

该怎么办?

  1. 准确定义您的身份验证和授权需求。不要选择技术。定义用户及其用例。定义每类用户拥有的权限。不要选择技术。定义访问。

    你没有在你的问题中提到非常非常重要的事情。例如,您没有提及您是否有多个用户。您只是提到了一种特定技术(JET)和一种特定技术(DB 级密码)。您没有提及这些用户是否共享数据库。

    如果您有多个用户使用共享数据库,那么最好将此数据库放在某处的服务器上。不在某处的桌面上。不是特定桌面的一部分。不分布在多个桌面上。

    如果你没有共享数据库——如果每个用户都有一个私有数据库——那么你有单独的安装,普通的 Windows 安全性很好。为什么要遮遮掩掩?

  2. 选择一种架构。

    • 您有活动目录。这为您提供了用户名和安全散列的密码。利用这一点。

    • SQL/Server 可以使用 AD 进行用户身份验证和授权。如果人们不分享他们的密码,这是相当安全的。

  3. 构建有用的东西。

    • 广告组。

    • SQL/Server 中的中央数据库。

    • 用于创建用户、重置密码、将用户从一个组移动到另一个组等的管理程序。这并不难。它在 AD 文档中。任何 Windows 系统管理员都可以提供他们喜欢如何执行此操作的指导。记录程序。它们是安全模型的一部分。

    • 可以安装在桌面上的 Winforms 应用程序。用户将利用他们现有的 Windows 凭据。登录到 windows 意味着您的 winforms 应用程序可以将它们登录到数据库中并离开它们。安全。

    • 用于桌面组件的 MSI。由于没有“主数据库密码”或其他垃圾,他们只是在安装一个简单的应用程序。他们配置中央数据库服务器的位置。他们使用现有的 Windows 凭据登录。

于 2009-07-07T01:18:12.273 回答
0

不幸的是,访问安全性并不是那么好。即使您的连接凭据不在您的来源中,如果有人真的想要进入,也只是时间问题。

最安全的访问选项是将文件存储在具有良好文件共享权限设置的服务器上,并使用 ODBC 访问它。- 虽然并不能真正解决您的分配问题。

为什么不看看那里的一些替代品呢?SQL Compact 更安全,并提供非常相似的编程体验。如果你能负担得起一点“重”的 SQL Express,那就太好了。还有很多不错的开源产品。Firebird 在这里可能很适合你。

希望这可以帮助..

编辑:S.lott 就在这里。最终,如果人们可以访问您的代码和数据库并知道如何处理它,他们将能够进入。

于 2009-07-07T01:16:35.003 回答