2013-10-23 27 views
2

我正在创建一个Java桌面应用程序,用于在数据库上生成用户密码并将其存储。如何在Java桌面应用程序中安全地实现SQL查询

我的问题是:什么是在应用程序中实现SQL查询最安全的方法?

当然,在源代码中查询并不安全。我的工作将是在本地存储数据库文件,但我更愿意将数据存储在外部服务器上。

那么如何在swing应用程序中实现SQL查询而不需要嵌入源代码。

+2

让swing应用程序与服务器交谈(使用RMI,Web服务或其他),并在服务器代码中执行SQL查询。 –

+0

如果您可以选择移动数据,为什么没有Web服务在服务器端为您维护它?访问数据库比访问SQL查询更为关心。 –

回答

0

没有必要保护查询文本。您可能有关于记录查询使用的参数的问题。如果您将原始密码存储在数据库中,这是一个问题。所以我建议首先不要存储raw passwords

我会详细介绍一下将SQL嵌入Java代码。如果你的应用程序与数据库一起工作,你需要调用数据库,这意味着执行SQL语句。避免这种情况的唯一方法是将此工作委托给另一个应用程序,以便您的应用程序不使用SQL,而使用一些自定义协议/ API,并且该应用程序将代表它执行SQL查询。

您可能需要将SQL与Java代码分开存储,但这不是出于安全考虑,而是主要因为需要更适当地构造应用程序。这是不将SQL嵌入到Java代码中的主要驱动力是代码可读性,性能,维护和代码重用。

访问数据库时使用ORM是一种常见的做法。在这种情况下,您的应用程序根本不具有SQL代码,而是通过ORM API访问数据库。在休眠例如查询可能看起来像

User user = session.createCriteria(User.class) 
    .add(Restrictions.eq("name", userName)) 
    .uniqueResult(); 

而且,即使你需要执行不直接通过您所选择的ORM支持的一些SQL查询的SQL文本本身通常存储在有的伴有xml文件。

请注意,在后一种情况下,尽管技术上SQL没有嵌入到Java代码中,但它仍驻留在您的某个应用程序包中。

+1

很少将密码加密成比[salting和hashing]更好的选择(https://crackstation.net/hashing-security.htm)。 –

+0

你是绝对正确的,在我身边的措辞不好。 –

+0

我明白这个概念完全谢谢你的回应。在连接到外部数据库的Java源代码中安装SQL代码是安全的,其中该软件的其他用户也将存储其详细信息。例如,用户将输入他们的名字并生成一个加密的密码,然后这个密码将被上传到数据库。所以对于我来说,在源代码中使用SELECT和UPDATE语句会是一个好主意吗? – adebesin

2

当然,在源代码中查询并不安全。

我从来没有见过SQL 查询这是敏感的。通常,您接受来自用户的敏感数据(例如输入Swing字段的密码),并使用它填充现有的参数化查询,例如,

UPDATE users SET password=? WHERE username=? 
0

我不知道你是怎么想在你的应用程序中执行某些东西而不执行它。我只是不理解你的方法。您可能想要注册新用户或其他内容,并且您不想以任何方式公开您的数据库结构,对吗?你不能这样做,直接操作DB(通过SQL),而不是编码到应用程序。

解决方案: 为您的需求创建专用的REST API。所有数据库操作处理将在服务器端(哈,你需要服务器 - 可以简单的Apache主机的PHP),所以没有数据库结构的启示等。所有你需要做的就是发送命令到服务器与适当的数据 - 用户名和密码。为了最大限度地提高安全性,您应该使用SSL来与API通信。

谢谢。

相关问题