【问题标题】:Connecting to MySQL in Java without having to go GPL在 Java 中连接到 MySQL 而无需使用 GPL
【发布时间】:2011-10-14 06:37:45
【问题描述】:

我正在用 Java 编写一个需要连接到在线数据库以收集一些信息的软件!我想在我的公司下销售这个软件,但问题是 Oracle 已经在 GPL 下授权了 JDBC 驱动程序,我是正确的,这意味着我不能以任何方式重新分发驱动程序,以及其他限制!

我能看到的唯一选择是使用 PostgreSQL,因为据我所知,驱动程序是在 BSD 下获得许可的,这意味着您基本上可以用它做任何您喜欢的事情。但是我已经和我的网络主机JustHost 谈过了,他们基本上说他们不支持 PostgreSQL,也没有计划,所以如果我想和他们一起托管 PostgreSQL 数据库,我将不得不支付专用服务器的费用,我可以粗鲁地补充一下。不过他们很诚实,他们确实说转移到另一家支持 PostgreSQL 的网络托管公司会更便宜!

作为最后的手段,我可​​以只使用一个简单的文本文件来传输信息。但我在这里唯一担心的是安全性。存储在数据库中的一些信息是机密的,实际上,最机密的数据将是许可证密钥,也可能是电子邮件。这显然是因为我在第一次使用时验证用户许可证密钥。也许它不是那么不安全,我只是认为人们可以很容易地编辑文件以满足那里的需要等。

我确实认为某种 php 脚本可以从 Java 与之通信的文本文件中提供所请求的信息可能更安全,但同样,我不是安全专家,所以我不知道,尤其是看到就好像我使用的是共享主机并且没有为“https”付费!

所以基本上,我想知道你会根据我的情况做些什么。你以前经历过这种困境吗?如果是这样,你会怎么做?你会推荐什么?等等

【问题讨论】:

标签: java mysql postgresql


【解决方案1】:

您可以使用MariaDB JDBC 驱动程序与 MySQL 服务器通信。它是 LGPL 而不是 GPL。

【讨论】:

  • 感谢您的回答,我认为这将是我接受的答案,但我认为我接受的解决方案要好得多。还是谢谢你
  • 谢谢! MariaDB 客户端 (JDBC) 为我工作。奇怪的是,DatabseMetaData#getColumns("", "", tableName, "") 不返回列名,但使用普通查询和SHOW COLUMNS 很容易重新编码。对于我的简单应用程序,无需更改其他源代码。
  • MariaDB jdbc 是 GPLv2。如果您希望将其保密/保留权利,请不要在您的软件中使用它。
【解决方案2】:

您可以出售您的软件,只需将数据库/驱动程序列为安装要求。

将其包含在您的文档中并完成工作。

GPL 并不意味着专有软件无法与之对话。这是一个先决条件,而不是您的软件的一部分。

另见类似问题:

MySQL licensing and GPL


更新

还请注意,您甚至可以为您提供安装库的服务向客户收费。这样一来,它就可以成为您账单的一部分,而无需客户自己安装。

【讨论】:

  • @Mikavei 我真的不想让我的用户自己安装驱动程序;我真的不想要任何安装要求,更不用说像这样的技术了!除了我读到 MySQL 告诉某人甚至给您的客户提供下载驱动程序的链接这一事实之外,这也算作重新分发,并且是不允许的!所以感谢您的回复,但我认为这将成为一个备用计划!
  • 阅读 GPL,服务器/私有库有一个 get out 子句。正如@Perception 在他的评论中提到的那样。
  • “给你的客户一个链接”完全是垃圾。在提供 GPL 软件时,您甚至可以收取合理的费用(以支付邮费等)。 gnu.org/licenses/gpl-faq.html#DoesTheGPLAllowDownloadFee
【解决方案3】:

提供网络服务来传输数据的小型服务器应用程序怎么样?那么只有那个服务器应用程序才真正需要 JDBC 驱动程序。

编辑: 对于 Web 服务,请查看 JAX-WS(这里是 java.net reference implementation)。

使用网络服务,您可以使用 Java 的内置加密库对数据进行加密,传输加密数据并在客户端解密。此外,您可以为数据传输一些散列(例如 MD5)以确保它没有被更改。

【讨论】:

  • 感谢您的建议,考虑到我对 GPL 许可证的了解还不够,尽管我不怀疑这里的任何成员,这似乎是迄今为止最“明智”的建议如果没有律师/律师在场,这样的事情太冒险了!请详细说明您的建议!我想我明白你在做什么,类似于我的 PHP 脚本想法,但用 Java 编写。但是,我想要更多信息,因为我以前从未做过类似的事情!我可以在共享主机上执行此操作吗?并且如果没有“HTTPS”等,它是否足够安全?
  • 如果可以,请使用 HTTPS。任何东西都只是“足够安全”,直到它被黑客入侵,然后为时已晚:-)
  • @Andy 我不能告诉你这是否可以在共享主机上工作,因为我们有自己的服务器,但只要主机支持 Java 或者某种应用程序服务器(其中会使几件事变得更容易)-我已经通过答案进行了更新以提供更多提示。关于加密:你也可以在 PHP 中这样做,因为算法不应该依赖于语言。
  • @Brian 不幸的是,HTTPS 目前对我来说有点贵;考虑到我的生意还没有开始!你是说没有 HTTPS,如果一个人入侵它,它就会被所有人入侵?而且,这是否意味着服务器应用程序将验证任何内容,或者只有在黑客分享破解等情况下才会发生这种情况?而且,当您说“那就太晚了”时,黑客攻击的不可逆转性如何,以及如何使其再次安全?
  • @Thomas 请你看看this help link from JustHost 关于Java。他们说他们的共享主机支持“Java Script”,但他们只说他们的专用服务器支持“Java 服务器端”!不幸的是,我认为这意味着我不能提出这样的申请,对吗?
【解决方案4】:

不确定您认为 GPL 的哪一部分排除了逐字分发?从简短的阅读中我可以看到:

  1. 您可以复制和分发本程序(或基于它的作品, 根据第 2 节)在目标代码或可执行形式下的条款 上述第 1 节和第 2 节前提是您还执行以下操作之一:

    a) 随附完整的相应机器可读文件 源代码,必须根据第 1 节的条款分发 和 2 以上在通常用于软件交换的介质上;或者,

    b) 附上书面报价,有效期至少为三年 年,给任何第三方,收费不超过您的成本 物理执行源分发,完整的机器可读 相应源代码的副本,将在 上述第 1 节和第 2 节的条款在通常用于的媒体上 软件交换;或者,

    c) 附上您收到的有关报价的信息 分发相应的源代码。 (这个替代是允许的 仅用于非商业分发且仅当您收到 具有此类报价的目标代码或可执行形式的程序,在 符合上述b小节。)

http://www.gnu.org/licenses/gpl-2.0.html

【讨论】:

  • 对不起,我完全是新手,所以我真的不明白这如何支持我的案子?对我来说仍然说我必须提供我的源代码,这是我不想做的事情!请您用通俗的话解释一下这是什么意思?
  • Andy - 你最好听听 Thomas 的建议,让你的客户端与服务器应用程序通信,并且只有直接与数据库通信。这很好,不仅因为它避免了您的法律问题,而且它实际上是一个更好的架构选项,您可以更好地保护它,减少对 SQL 注入等开放。
  • 感谢您的回复,我想我会进一步研究托马斯的建议。看起来好像会更全面!
猜你喜欢
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多