我意识到这个问题的答案可能非常明显(如果对我来说有点不方便),但我希望有人会有一个巧妙的解决方案。
我正在空闲时间慢慢构建一个应用程序,希望在工作中有用。这是一个简单的跟踪应用程序,用于分配同行评审。基本上,我只是想自学一些C#。
我的问题是,因为我真的无法安装任何东西,而且我不能使用我自己的网站(两个原因 - 1)国防部可能不会允许它,2)我希望这是一个桌面(WinForms)项目,而不是Web),我使用Jet(如Access)作为数据存储。
我需要一种方法来保护数据库免受窥探,因为有些事情我真的只想要一个管理员级用户(比如团队负责人)来访问。我基本上决定设置数据库密码。密码将在安装时被选中,用于保护数据库,然后加密以供应用程序提取,解密和用于打开数据库连接。
我的问题是我希望这段代码有些公开。我最终想在我的网站上发布我的代码,并询问StackOverflow和编程subReddit以获得一些快速的评论和见解。可以把它想象成一个穷人的导师计划。为了维护,特别是在我离开这份工作之后,我的同事最终可以获得该来源。如果他们可以访问加密的“密钥文件”和源,他们就能够确定数据库密码。
有没有办法对此进行编码,以便即使使用文件和代码,我的同事也无法进入数据库?我不这么认为,但值得一提。
如果没有办法做到这一点,我想我的第二个选择是在我将其加载到我的网站时更改加密(将加密等效于哈希 - IV? - 更改为发布后的不同内容),并提供受密码保护的rar文件中的源,仅向管理员提供密码。
有什么想法吗?
答案 0 :(得分:3)
没有“Security Through Obscurity”。如果您始终认为所有代码都是公开的,那么您就有更好的机会实现实际上安全的东西。如果你“隐藏”代码或“隐藏”密码,你就犯了一个可怕的错误。
以下是如何在Jet上破解密码。 http://lastbit.com/access/
安全是一个深层次的问题。您不能在文件中输入密码。您可以在文件中输入密码哈希值。
你有两个互补的问题。
认证。谁是用户?这就是密码和密码可以告诉你的:谁在联系。
批准。这个用户可以做什么?这就是你职责分离的原因。设置密码的安全人员和必须提供密码并且可以访问数据的用户需要是独立的人。
修改强>
“密码将在安装时被选中,用于保护数据库,然后加密以供应用程序提取,解密和用于打开数据库连接。”不行。密码文件的加密密钥在应用程序中可用,使其全部打开。
“有没有办法对此进行编码,以便即使使用文件和代码,我的同事也无法进入数据库?”是。这很简单。使用密码哈希,而不是加密密码。
“仅向管理层提供密码”错误。如果您将密码提供给某人,则会有太多人知道密码。这打破了身份验证人们必须设置自己的密码,否则他们没有经过身份验证。
修改强>
怎么办?
定义 - 确切地说 - 您的身份验证和授权需求。不要选择技术。定义用户及其用例。定义每个用户类的授权。不要选择这项技术。定义访问权限。
在你的问题中,你没有提到真正重要的事情。例如,您没有提到是否有多个用户。您只需提及特定技术(JET)和特定技术(DB级密码)。您没有提及这些用户是否共享数据库。
如果您有多个拥有共享数据库的用户,那么此数据库最好位于某个服务器上。不在某个桌面上。不属于特定桌面。不会分布在多个桌面上。
如果您没有共享数据库 - 如果每个用户都有一个私有数据库 - 那么您可以单独安装普通的Windows安全性。为什么模糊不清?
选择一个架构。
您有Active Directory。这为您提供了用户名和安全的哈希密码。利用这个。
SQL / Server可以使用AD进行用户身份验证和授权。如果人们不共享密码,这是相当安全的。
构建有效的东西。
广告组。
SQL / Server中的中央数据库。
用于创建用户,重置密码,将用户从一个组移动到另一个组等的管理员程序。这并不难。它在AD文档中。任何Windows系统管理员都可以提供有关他们如何执行此操作的指导。记录程序。他们是安全模型的一部分。
Winforms可以安装在桌面上的应用程序。用户将利用他们现有的Windows凭据。登录到窗口意味着您的winforms应用程序可以将它们登录到数据库中然后离开它们。安全
桌面组件的MSI。由于没有“主数据库密码”或其他垃圾,他们只是安装一个简单的应用程序。它们配置中央数据库服务器的位置。他们使用现有的Windows凭据登录。
答案 1 :(得分:0)
不幸的是,访问安全性并不是那么好。即使您的连接凭据不在您的来源中,如果有人进入,如果他们真的想要,也只是时间问题。
具有访问权限的最安全选项是将文件存储在具有良好文件共享权限设置的服务器上,并使用ODBC来访问它。 - 虽然没有真正解决你的发行问题。
为什么不看看那里的一些替代品呢? SQL Compact更安全,并提供非常类似的编程体验。如果你能负担得起'更重',那么SQL Express非常出色。还有很多很好的开源产品。 Firebird可能在这里很适合你。
希望这会有所帮助..
编辑:S.lott就在这里。最终,如果人们可以访问您的代码和数据库并知道如何处理它,那么他们就可以进入。