Mysql 向公众开放SQL读访问而不允许滥用

Mysql 向公众开放SQL读访问而不允许滥用,mysql,sql,Mysql,Sql,我正在考虑允许公众对公共数据集进行只读SQL查询。之前,我在Stack Exchange聊天PHP页面上提到过这一点,并立即遇到了大量的no…no…noooooooo-样式响应 人们似乎认为这太危险了。一个人把它比作把安全锁在枪上,希望没有人被枪杀。没有人真正深入了解更多细节,但有人提到了系统调用我的问题是这样做会带来什么样的风险,可以采取什么措施来抵消这种风险(比如暂停以停止无限循环)? 这个问题稍微涵盖了这个主题,但是是关于部分用户可控制的查询,而不是完全控制。它也不能回答我的问题 编辑:为

我正在考虑允许公众对公共数据集进行只读SQL查询。之前,我在Stack Exchange聊天PHP页面上提到过这一点,并立即遇到了大量的
no…no…noooooooo-样式响应

人们似乎认为这太危险了。一个人把它比作把安全锁在枪上,希望没有人被枪杀。没有人真正深入了解更多细节,但有人提到了系统调用我的问题是这样做会带来什么样的风险,可以采取什么措施来抵消这种风险(比如暂停以停止无限循环)?

这个问题稍微涵盖了这个主题,但是是关于部分用户可控制的查询,而不是完全控制。它也不能回答我的问题

编辑:为了澄清,我可以采取哪些具体步骤来停止占用资源(无限循环等)。目前没有任何东西可以控制查询。查询在PHP页面中运行。

我想说,去吧

对于所有说不…不…不…不,考虑如下:

StackOverflow(通过Meta Stack Exchange)为任何人提供对其帖子的免费访问。此访问通过开放式sql格式完成。不相信我?你自己试试看:

想要一个我写的查询的例子吗?在这里:

<> P>为了减少暴露数据的危险,请考虑如下:

  • 不要通过sql客户端公开与数据库的直接连接。考虑使用一个接受SQL查询并返回结果的网页。

  • 分析sql命令中的任何可疑命令。我知道这很难,但是你可以,例如,阻止使用sql函数

  • 请记住,这必须在机器上运行,所以考虑安全性,并将这台机器与内核隔离。< /P>
  • 考虑终止一个需要很长时间才能完成的查询

  • 不言而喻:不要在那里保存任何可识别/用户信息

  • 考虑定期刷新模式


如果您仔细锁定MySQL服务器的保护,并且只发布允许读取各种表的用户名,您应该能够允许一些基本访问并防止对服务器的幼稚攻击(如
截断表mydata
等)

令人担忧的是更复杂的攻击

编写无法与拒绝服务攻击区分的长时间运行的数据爆炸查询并不难。无约束自联接就是一个简单的例子。如果您的MySQL端口正在侦听公共IP地址,那么笨拙或恶意的用户填充您的连接表或游标表并使您的服务器无法访问也不难

所以,我建议你去做。但是,将您的公共可见服务器视为牺牲品。将其设置为主服务器的某种克隆(但没有返回主服务器的实时链接)。把它放在公共网络上,期望intertoobz狼会攻击并屠杀它。当他们这样做时,只要恢复它并继续。这是一种有效的方法,而且效果很好


另一种选择可能是将MySQL服务器隐藏在一个安全设计的web服务后面,该web服务序列化并控制对它的访问

Goodle
SQL Injection
。例如,请参阅。不用说,除了一个专用管理员帐户(具有非常强的密码)之外,每个人都只有
select
访问权限,并且只访问所需的表,取消所有其他权限。您应该使用一个“燃烧器”数据库,在另一台机器上保留备份。如果数据是“静态”的,则从备份中隔夜重新加载(实际上是删除表并重新创建)数据库。不要在该服务器上运行任何其他内容,也不要在您自己的网络中运行它。也许你可以问一些网站,比如sqlfiddle.com,它们做什么(尽管它们的用例略有不同)。@PM77-1。我当然知道SQL注入。我说的是允许对SQL查询进行只读访问。如果不知道数据库中的所有内容、服务器上的其他内容、用于控制查询的内容以及可能的许多其他详细信息,我们无法知道您或您的服务器将遇到什么样的风险。我的SQL端口将不会打开,但我能做些什么来阻止资源占用?