Security 源代码公开时的安全性

Security 源代码公开时的安全性,security,encryption,jet,Security,Encryption,Jet,我意识到这个问题的答案很明显(如果对我有点不方便的话),但我希望有人能想出一个巧妙的解决办法 我正在空闲时间慢慢开发一个应用程序,希望它在工作中有用。这是一个简单的跟踪应用程序,用于分配同行评审。基本上,我只是想教自己一些C 我的问题是,因为我真的不能安装任何东西,我也不能使用我自己的网站(两个原因-1)国防部可能不允许,2)我希望这是一个桌面(WinForms)项目,而不是Web),我使用Jet(如Access)作为数据存储 我需要一种方法来保护数据库不被窥探,因为有些东西我真的只希望管理员级

我意识到这个问题的答案很明显(如果对我有点不方便的话),但我希望有人能想出一个巧妙的解决办法

我正在空闲时间慢慢开发一个应用程序,希望它在工作中有用。这是一个简单的跟踪应用程序,用于分配同行评审。基本上,我只是想教自己一些C

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

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

我的问题是,我希望这段代码是公开的。我最终想在我的网站上发布我的代码,并询问StackOverflow和可能的编程子Reddit,以获得一些快速的评论和见解。把它想象成穷人的导师计划。为了维护,特别是在我离开这项工作后,我的同事们最终可以使用这个资源。如果他们有权访问加密的“密钥文件”和源,他们将能够确定数据库密码

有没有办法编写代码,这样即使有了文件和代码,我的同事也无法进入数据库?我想不会,但这是值得问的

如果没有办法做到这一点,我想我的第二个选择是在我把它放在我的网站上时更改加密(在发布时将相当于散列-IV?-的加密更改为其他内容),并在一个受密码保护的rar文件中提供源代码,只将密码提供给管理层


有什么想法吗?

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

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

为什么不看看外面的一些替代方案呢?SQLCompact更安全,提供了非常相似的编程体验。如果您能负担得起稍微“重一点”的话,SQL Express是非常好的。还有很多好的开源产品。火鸟可能很适合你

希望这有帮助

编辑:S.洛特在这里很受欢迎。最终,如果人们能够访问您的代码和数据库,并知道如何处理它,他们将能够进入。如果你认为所有的代码在任何时候都是公开的,那么你就有更好的机会去实现那些真正安全的东西。如果你“隐藏”代码或“隐藏”密码,你犯了一个可怕的错误

下面是如何破解Jet上的密码

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

你有两个互补的问题

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

  • 授权。这个用户能做什么?这就是为什么你们有职责分离。设置密码的安全官员和必须提供密码并有权访问数据的用户必须是单独的人


编辑

“将在安装时提取密码,用于保护数据库,然后对其进行加密,以便应用程序提取、解密并用于打开数据库连接。”不起作用。密码文件的加密密钥在应用程序中可用,使其全部打开

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

“仅向管理层提供密码”错误。如果你给某人密码,那么太多人知道密码。这会破坏身份验证。人们必须设置自己的密码,否则就无法进行身份验证


编辑

怎么办

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

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

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

    如果您没有共享数据库——如果每个用户都有一个私有数据库——那么您可以在普通Windows安全性良好的情况下进行单独的安装。为什么要隐瞒什么

  • 选择一个架构

    • 你有Active Directory。这将为您提供用户名和安全哈希密码。利用这一点

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

  • 做一些有用的东西

    • 广告组

    • SQL/Server中的中央数据库

    • 创建用户、重置密码、将用户从一个组移动到另一个组等的管理过程。这并不难