Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Mysql 创建数据库桌面应用程序的正确方法是什么?_Mysql_Qt_Zend Framework_Rest - Fatal编程技术网

Mysql 创建数据库桌面应用程序的正确方法是什么?

Mysql 创建数据库桌面应用程序的正确方法是什么?,mysql,qt,zend-framework,rest,Mysql,Qt,Zend Framework,Rest,我刚刚意识到,在我的可执行文件中,尤其是在JAR文件中,没有最好的方法来隐藏MySQL字符串连接密码。即使在EXE中加密它也只会减慢进程(尽管我不确定从EXE文件获得加密密码需要多长时间) 所以,从我的理解,我需要中间的东西来添加、编辑、删除等到数据库。似乎是RESTAPI或SOAP服务的工作 我的问题是,我应该使用哪一个?还是我应该用别的?我在考虑Zend框架来创建这些RESTAPI。然后,我将使用Qt创建一个桌面应用程序来调用这些api。但如果我继续使用REST,我的应用程序将是一个三层应用

我刚刚意识到,在我的可执行文件中,尤其是在JAR文件中,没有最好的方法来隐藏MySQL字符串连接密码。即使在EXE中加密它也只会减慢进程(尽管我不确定从EXE文件获得加密密码需要多长时间)

所以,从我的理解,我需要中间的东西来添加、编辑、删除等到数据库。似乎是RESTAPI或SOAP服务的工作

我的问题是,我应该使用哪一个?还是我应该用别的?我在考虑Zend框架来创建这些RESTAPI。然后,我将使用Qt创建一个桌面应用程序来调用这些api。但如果我继续使用REST,我的应用程序将是一个三层应用程序。如果我只创建一个web应用程序不是更好吗?也许我应该坚持使用桌面应用程序调用这些API,因为应用程序已经完成,我只需要从直接连接到MySQL改为调用这些API来执行任务,而不是将整个应用程序更改为web

任何建议都会很有帮助。提前谢谢

更新:

我正在寻找一种安全性,可以保护我的MySQL密码连接。

混淆器只会混淆代码,它不会隐藏我的字符串数据库信息,在我看来,在使用JAD等工具对JAR进行反编译后,可以使用grep轻松找到这些信息

关于我的申请:

  • 使用集中式MySQL数据库
  • 成千上万的用户
  • 包含敏感信息
  • 我的客户端使用Linux和Windows
  • 我的服务器使用Linux
  • 所有访问均在局域网内完成,无外部连接(来自互联网等)
  • 我当前的解决方案(请评论):

  • 使用RESTAPI(因为MySQL密码在服务器中,所以更安全)
  • 使用Qt加密密码

  • 这取决于你想要什么样的安全。这是为了保护应用程序不受用户攻击吗?保护用户的数据不受其他用户的影响?保护多个用户的数据不受其他用户的影响?为了保护用户的数据免受攻击者的攻击

    在许多应用程序中,以纯文本形式存储数据库登录凭据没有什么问题。在其他情况下,您可以尝试:

  • 使用一个相当强的算法(如河豚)使用硬编码密钥加密用户选择的数据库密码
  • 每次让用户提供密码并“登录”程序
  • 以明文形式存储数据库密码,但使用硬编码密钥加密数据
  • 同上,但使用每个用户自己提供的密码加密每个用户的数据
  • 与2相同,但将每个用户的数据存储在其自己的数据库中,并将其登录信息作为数据库凭据
  • 将数据存储在安全的远程数据库中,用户必须登录才能通过SOAP API访问该数据库
  • 使用本机文件系统权限保护保存登录凭据的配置文件
  • 与#1相同,但使用自己精心设计的密钥生成系统:例如,使用随机生成的salt通过MD5运行机器SID或硬件id,然后使用结果加密登录凭据。
  • 记住,世上没有完美的安全感,所以无论你选择什么,都不需要牢不可破。它只需要足够坚固,就可以突破,使绕过安全机制的麻烦超过数据的价值。所以,举例来说,如果数据是扫雷舰中得分最高的名单,那么ROT13可能就足够了

    编辑: 我只想补充一点,即使您无法在应用程序中对加密密钥进行硬编码,Java、.NET和大多数其他流行语言/框架也有模糊处理程序。这些工具的关键用途之一是隐藏敏感的硬编码字符串,如加密密钥

    编辑2: 考虑到有关该应用程序的其他详细信息,在这种情况下,只有1、6和8适用。正如George正确指出的那样,SOAP API更适合于#6


    我还想提到的是,有一些Java资源混淆器可以加密字符串文本。这只是一个例子。

    这在很大程度上取决于你的应用程序在什么环境下运行

    a) 数据库和客户端本地
    b) 本地网络中的数据库和客户端
    c) db在互联网上

    我的两分钱:

    a) 我将创建一个db用户,不使用密码,但限制对localhost的访问
    b) 直接连接到数据库很好,但我希望每个用户都必须使用自己的密码登录,并且只授予他所需的权限。
    c) 允许mysql连接到公共服务器是个坏主意。在这种情况下,webservices将是一个很好的解决方案

    无论如何,如果你的情况是b或c,我会坚持与用户登录对话框

    也许你应该看看这个工具。 它类似于防火墙,但适用于mysql/postresql

    因此,您可以拒绝任何内容,只允许您想要的查询。

    如果您使用Java实现数据库桌面应用程序,我建议将其用作数据库。有几种方法可以保护它,除了在连接字符串中使用密码之外,还有其他方法。我建议你读一读


    使用JavaDB部署应用程序很容易,因为可以将大部分应用程序嵌入到同一个jar文件中。我在一个用Java实现的销售点应用程序中使用过它。

    拥有一个可以在没有任何身份验证的情况下调用的REST API绝对比“嵌入式”密码更安全。如果REST API不是一个好的解决方案,我会考虑一些授权方面的问题,你有什么建议?我不同意将数据库登录凭据存储在