-2

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

编辑:

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

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

4

1 回答 1

1

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

在实践中,MySQL 过去曾有过许多漏洞,包括应用这些权限和阻止对主机服务器的访问。对未来有更多的期待是合理的;由于很少有管理员允许对 MySQL 服务器进行不受信任的访问,因此它不会针对攻击进行严格锁定(例如,与 Apache 之类的 Web 服务器不同)。

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

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

在任何情况下,如果我们谈论的是应用程序用户,您的业务规则将需要比您可以使用表或列级别控件管理的访问权限更细化。比如“reviewer-class users 可以将 article.state 设置为 3,但前提是 article.state 之前是 1 或 2”,或者“将 article.state 设置为 4 总是导致关联的文章内容被删除”等规则无法在表权限。

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

于 2013-09-04T10:20:47.180 回答