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