我目前正在为大学任务编写程序,我们需要使用JDBC连接到MySQL数据库。
考虑到数据库密码必须以某种形式向程序公开,为了使它能够访问数据库,你当然可以将密码交给黑客吗?
我是对的,还是我错过了什么?
答案 0 :(得分:1)
如果您担心JDBC连接的安全性,请加密它们。 http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-using-ssl.html
您将支付性能损失,但这是纯文本的替代方法。根据MySQL文档:
启用SSL的性能损失是查询处理时间在35%到50%之间,具体取决于查询的大小以及返回的数据量。
此选项适用于大多数SQL和noSQL数据库。
答案 1 :(得分:0)
密码必须暴露给应用程序,这是肯定的,否则你的应用程序如何连接到数据库?
但这不是一个很大的安全漏洞。应用程序运行的机器是不惜一切代价必须安全的。这是主要的事情!如果黑客甚至是天真的用户都可以访问运行应用程序的计算机,那么即使他们拥有足够的权限,他们也可能会破坏您系统中的严重破坏。一旦一个人可以访问你的应用程序的源代码和它正在运行的机器,世界上没有任何办法可以使它安全,除非你有一个非常好的用户帐户管理系统。
您可以将密码外部化为文本文件并将其存储为哈希值,甚至可以使用盐,这基本上是我所知道的最佳/最常用的方式...但这只会使有权访问的人生活你的机器稍微难点......如果它们是智能的,它们仍然可以访问源代码,如果它们不是,那么它们可以简单地删除或破坏它。
所以JDBC没有任何问题......如果你不同意,请说服数百万用户使用JDBC。安全性不是您在单一技术上构建的。它涉及保护所有系统并在每个不同的节点上添加一层又一层的保护,但要注意每层保护都会损害越来越多的可用性和灵活性(这就是人们不仅仅在顶层添加1000层密码的原因)一个应用程序/数据库,它只是不切实际,甚至是不必要的,甚至)。
答案 2 :(得分:0)
JDBC是Java应用程序用于连接数据库系统的标准API。它在Java社区中成熟,稳固且广泛使用。
尽管有些应用程序通过在源代码中公开 - 例如 - 数据库连接凭证来不正当地使用API。
在How can I protect MySQL username and password from decompiling?中,对这个设计问题有一个很好的解释,并提出解决问题的建议:比如将数据库凭证存储在应用程序外部的文件中并采用多层体系结构。