对于连接到 mysql 数据库的应用程序,通常将凭据存储在属性文件中,例如 jdbc.properties 以明文形式包含用户名和密码。
有没有一种非常安全的方法可以做到这一点?当然,我可以限制对此文件的访问,使其隐藏等。但是除了属性文件方法之外,还有其他方法可以连接到数据库吗?
一种选择是将此类敏感信息以加密方式存储在另一个数据库中。然后应用程序可以连接到此数据库(使用属性文件方式),然后解密敏感信息(而不是从属性文件中读取)并使用它来启动与应用程序数据库的连接。
还有其他方法吗?请分享您的经验和想法。我正在使用 Linux 机器来托管 mysql。
答案1
我认为这里的基本问题是您要保护什么。
您显然可以确保您的数据库服务器在接受哪些连接方面非常有选择性,这将为您的数据提供保护,防止通过其他主机访问。
您可以使用 SSL 选项连接到服务器(有关详细信息,请参阅 mysql 手册)。
您可以加密属性文件中的数据,并使用硬编码到应用程序源中的解密密钥。
但最终,如果有人有权访问运行该应用程序的服务器,那么他/她就可以访问您的数据库。
答案2
如果应用程序需要访问数据库,但它却连接到另一个数据库以获取密钥,并使用属性文件进行身份验证,那么安全性又从何而来?链条的强度取决于其链接,而这里的链接就是将密码存储在属性文件中。您可以任意深度地嵌套此类数据库,但最终应用程序必须具有某种方法来针对链中最近的数据库进行身份验证。隐藏文件本身并不是安全性;它是“通过混淆实现的安全性”,这并不安全。您可以(并且应该)正确设置包含密码的属性文件的所有者和权限,只允许访问相关的应用程序。您可以以其他用户的身份运行应用程序,使属性文件仅对该用户可见。还可以在数据库本身内设置权限,以锁定用户访问数据库的能力,以最大限度地减少任何安全漏洞的影响。设置权限的目的是:首先,阻止任何未经授权访问属性文件和数据库;其次,最大限度地减少此类漏洞的影响。