远程访问MySQL - UNSAFE?

时间:2013-09-03 13:35:40

标签: mysql security connection

打开mysql服务器端口以允许远程连接是不安全的吗? 如果它不安全,什么是更好的解决方案?

编辑:

- 我需要读写权限。 - 每个用户都有一个密码来连接。这意味着没有任何用户可以连接到数据库。

这个环境有哪些安全问题? 有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

原则上,MySQL有一个严格的权限系统,可以设置为允许远程用户访问他们完成工作所需的表的最低级别。

在实践中,MySQL过去曾经有过许多漏洞,无论是应用这些权限还是阻止访问主机服务器。未来期望更多是合理的;由于很少有管理员允许对MySQL服务器进行不受信任的访问,因此它不会受到严密的攻击(例如,像Apache这样的Web服务器)。

MySQL的身份验证模型也很薄弱:密码作为未加保留的哈希存储在表中,并且没有针对暴力密码攻击的保护。对于可信服务器应用程序和数据库之间的通信,您可以侥幸逃脱;对于不完全信任的第三方进行身份验证,这还不够好。

如果您的“用户”是数据库管理员,则可以为他们提供远程访问,并通过IP地址/防火墙或SSH隧道锁定访问权限。如果“用户”是不完全信任的第三方,您希望将数据库用作客户端应用程序的一部分,我不会。绝对不要开放访问整个公共互联网。

在任何情况下,如果我们讨论的是应用程序用户,那么您的业务规则将需要更多的访问权限粒度,而不是使用表级或列级控件进行管理。例如,像“审阅者类用户可以将article.state设置为3,但仅当article.state先前为1或2”或“将article.state设置为4始终导致关联的词句被删除”之类的规则无法在表权限。

为此,您几乎总是需要原始表存储和远程客户端/应用程序之间的某个组件来管理请求。该层传统上是一个单独的服务器应用程序,它是唯一与数据库通信的应用程序。理论上,您可以在数据库存储过程中编写该组件,并且只允许用户访问proc而不是表。但是,与通用编程语言相比,在存储过程中做任何复杂的操作都是一种超级难以编写和维护的问题。