2014-11-20 65 views
4

目前,我已经创建了连接到我的谷歌云SQL数据库正常方式一个简单的Java应用程序:连接方法,谷歌的Cloud SQL数据库和Java JDBC

try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con = DriverManager.getConnection("jdbc:mysql://-google-cloud-sql-ip:-port-/-projectname-","-user-","-password-"); 
    Statement st = con.createStatement(); 
} 
catch (Exception ex) { 
    ex.printStackTrace(); 
} 

我唯一担心的是,密码被放置在这里作为纯文本。它不受任何保护。我知道可以用类似yGuard的东西来保护源代码。另外,我必须在Google Cloud中注册我的外部IP地址才能使用它。

因此,我想知道是否可以使用某种OAuth方法与云SQL数据库建立数据库连接。我更喜欢独立于计算机物理位置的连接方式,所以我可以在任何地方连接(如果我有互联网连接)。

有没有比上面介绍的更好的方法,还是这是唯一的方法?如果是这样,请让我知道如何保护纯文本密码。

任何帮助非常感谢!

+1

这个问题并不明显,但是这个应用程序运行在可信环境(应用程序服务器)还是不可信任应用程序(移动应用程序)中? – 2014-11-23 03:01:12

+0

感谢您的回复。它运行在不受信任的环境中。 – 2014-11-23 07:00:47

+4

如果是这种情况,我建议远离直接说话的MySQL从这些地方(如果用户是逆向工程的应用程序连接的方式将能够发出任意查询)。相反,您可以构建后端(1)公开仅允许某些操作的API,(2)正确验证用户身份(例如,OAuth2)。 – 2014-11-23 10:18:05

回答

2

无法使用OAuth2来验证与Cloud SQL的连接。您可能会使用经过OAuth2认证的API调用来创建新的临时用户名/密码对(和/或授权IP),然后使用它进行连接,但这不会增加任何额外的安全性, 。

由于Razvan在他的评论中建议直接连接到您的Android应用的Cloud SQL实例几乎肯定会变得不安全。此外,您将来无法进行架构更改,因为您将无法控制升级的旧版本应用程序。

这里有几个选择:

  • 使用Firebase,这是专为从移动和JavaScript安全数据库使用。
  • 开发您自己的数据库支持的API来满足您的移动应用程序的需求。由您的应用程序设置或检索的每一点数据都可以有一个单独的API调用,它可以在进行实际的数据库调用之前进行任何授权或验证。你可以使用Google Cloud Endpoints为你做很多事情。