因此,我们的Web服务器应用程序需要连接到数据库,而其他一些应用程序具有在启动时执行的启动脚本。
就安全性和可维护性而言,存储这些应用程序的名称/密码的最佳方式是什么?例如,我们可能不希望系统管理员知道数据库密码,并且使配置易于更改密码等。
欢迎提供Windows和Linux解决方案!
因此,我们的Web服务器应用程序需要连接到数据库,而其他一些应用程序具有在启动时执行的启动脚本。
就安全性和可维护性而言,存储这些应用程序的名称/密码的最佳方式是什么?例如,我们可能不希望系统管理员知道数据库密码,并且使配置易于更改密码等。
欢迎提供Windows和Linux解决方案!
保护密码的最佳方法是停止使用单一密码,使用受信任的连接: 如何:在ASP.NET 2.0中使用Windows身份验证连接到SQL Server。 这样你就没有什么需要隐瞒的了-公开你的Web.config和源代码给全世界,他们仍然无法攻击你的数据库。
如果这种方法对您不起作用,请使用内置的ASP.NET配置加密系统。
我同意lomaxx的观点:如果有人已经在服务器上或者拥有广泛的访问权限(比如系统管理员),那么游戏基本上就结束了。因此,想法就是使用你信任的服务器,以达到你所期望的安全程度。具体来说:
除此之外,环境变量似乎是存储这些凭据类型的流行选择,因为这意味着仅访问源(例如通过攻击开发环境)不直接透露它,并且可以很好地本地化至每个服务器(开发、测试等)。
纯文本?如果它们在您的服务器上,我希望服务器足够安全,不允许未经授权的访问。如果人们可以访问服务器上的配置文件,那么早期就出了问题。
澄清一下:就安全性和可维护性而言(例如,如果登录需要更改,我能否稍后找到它等),
@lomax:也许我不希望所有有物理服务器访问权限的人(例如系统管理员)都能看到密码。
谢谢!
您可以将对称加密密钥嵌入到二进制文件中,并在启动时从磁盘上的文件中读取加密的用户名/密码。
然而,这实际上不过是混淆,因为您的代码很可能存储在某个源代码库中。
我建议您最好使用防火墙和私有网络气泡来控制物理和网络访问服务器,并将密码明文(或base-64编码)存储在磁盘上,并将权限锁定为Web应用程序的运行用户。
您还可以通过IP锁定数据库服务器,仅接受来自Web应用程序机器的连接。
最终,您的问题在于密钥(您的DB用户名/密码对)需要在Web应用程序中以编程方式进行无人值守使用。