【问题标题】:avoid access to DB [duplicate]避免访问数据库 [重复]
【发布时间】:2017-07-10 08:55:58
【问题描述】:

我使用 JTDS jar 将我的应用程序 android 与 DB (SQL SERVER) 连接起来,问题是 (databaseName,user,password) 在我的项目中的 Class 中

ConnURL = "jdbc:jtds:sqlserver://" + **** + ";"
                + "databaseName=" +***** + ";user=" + **** + ";password=****"

有没有办法隐藏我的(数据库名、用户名、密码)

如果有人反编译我的应用程序,它将可以访问数据库 我怎样才能避免这个大问题

【问题讨论】:

  • 为什么不使用 api 以便您可以从服务器进行修改,如果您分发应用程序,您将如何控制应用程序的行为?
  • 看看这个SO Q/A

标签: java sql-server android-studio jdbc


【解决方案1】:

如果应用程序将充当客户端应用程序:

更好的方法是不让应用程序直接与数据库通信。

相反,让服务器作为 Web 服务运行,以充当应用程序和数据库之间的中间层。这样,只有服务器可以访问数据库中的数据,而应用程序只能与您的服务器定义的API进行交互,可以防范恶意SQL语句等。

如果应用是服务器端应用:

最好避免将 DB 信息硬编码到您的应用程序中(因为更改应用程序需要重新编译应用程序)。

为避免直接在应用程序代码中编码 DB 信息,您可以将 DB 信息存储在外部 .properties 文件中,例如:

db.server=myserver.com
db.name=myDB
db.user=user1
db.pass=pass1

然后您可以分别分发您的应用程序和属性文件,或加密属性文件。

然后在运行时加载属性文件:

Properties dbProps = new Properties();
InputStream is = new FileInputStream("database.properties");
prop.load(is);

String connURL = "jdbc:jtds:sqlserver://" + 
          dbProps.getProperty("db.server") + 
          ";databaseName=" + dbProps.getProperty("db.name") + 
          ";user=" + dbProps.getProperty("db.user") + 
          ";password=" dbProps.getProperty("db.pass");

【讨论】:

  • 你能解释一下你所说的服务器端安卓应用程序是什么意思吗?不是所有的 Android 应用程序都是客户端的吗?
  • 你是对的——所有的安卓应用程序都是客户端的。从您最初的问题来看,尚不清楚这段代码是在安卓应用程序中运行,还是在与安卓应用程序通信的服务器端应用程序中运行。
  • 嘿,我没写问题!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2019-03-09
  • 2011-10-14
  • 1970-01-01
  • 2015-09-11
相关资源
最近更新 更多