Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java桌面应用程序中安全地实现SQL查询_Java_Sql_Swing - Fatal编程技术网

如何在Java桌面应用程序中安全地实现SQL查询

如何在Java桌面应用程序中安全地实现SQL查询,java,sql,swing,Java,Sql,Swing,我正在创建一个Java桌面应用程序,它在数据库中生成并存储用户密码 我的问题是:在应用程序中实现SQL查询最安全的方法是什么? 当然,在源代码中包含查询是不安全的。我的解决方法是在本地存储db文件,但我更喜欢将数据存储在外部服务器上 那么,如何在swing应用程序中实现SQL查询而不嵌入源代码呢 当然,在源代码中包含查询是不安全的 我从未见过敏感的SQL查询。通常,您接受来自用户的敏感数据(例如,Swing字段中的密码输入),并使用该数据填充现有的参数化查询,例如 更新用户设置密码=?其中use

我正在创建一个Java桌面应用程序,它在数据库中生成并存储用户密码

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

当然,在源代码中包含查询是不安全的。我的解决方法是在本地存储db文件,但我更喜欢将数据存储在外部服务器上

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

当然,在源代码中包含查询是不安全的

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

更新用户设置密码=?其中username=?

我不知道在不实现应用程序的情况下,如何在应用程序中执行某些内容。我只是不明白你的方法。您可能想注册新用户或其他什么,并且您不想以任何方式透露您的数据库结构,对吗?你们不能像这样直接操作DB(通过sql)而不将其编码到应用程序中

解决方案: 为您的需要创建专用的RESTAPI。所有的db操作处理都将在服务器端(哈哈,您需要服务器-可以是php的简单apache主机),所以没有db结构泄露等。您需要做的就是向服务器发送带有适当数据的命令-用户名和密码。为了获得最大的安全性,您应该使用SSL与API通信


谢谢。

不需要保护查询文本。您可能对查询使用的参数的日志记录有顾虑。如果在数据库中存储原始密码,则会出现问题。因此,我建议首先不要储存

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

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

访问数据库时使用ORM是一种常见的做法。在这种情况下,应用程序完全没有SQL代码,而是通过ORMAPI访问数据库,这种情况并不少见。例如,在hibernate中,查询可能如下所示

User user = session.createCriteria(User.class)
    .add( Restrictions.eq("name", userName) )
    .uniqueResult();
即使您需要执行一些您选择的ORM不直接支持的SQL查询,SQL文本本身通常存储在一些附带的xml文件中


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

让swing应用程序与服务器对话(使用RMI、web服务或其他什么),并在服务器代码中执行SQL查询。如果您可以选择移动数据,为什么不让web服务在服务器端为您维护它呢?访问数据库比访问SQL查询更令人担忧。加密密码很少比访问SQL查询更好。我完全理解这一概念,感谢您的回复。在连接到外部数据库的Java源代码中包含SQL代码是否安全?软件的其他用户也将在该数据库中存储其详细信息。例如,用户将输入他们的姓名并生成加密密码,然后将该密码上载到数据库。因此,对于我来说,在源代码中包含SELECT和UPDATE语句是一个好主意吗?我添加了更多关于将SQL嵌入Java代码的信息。