博客
保护SQL的11个步骤
抽象形状抽象形状
加入27,000多个网络安全通讯订阅者

无论您运行的是Microsoft的SQL Server(即将在Linux上运行)或开源MySQL,您需要锁定数据库以保持数据的私密性和安全性。这11个步骤将指导您了解数据库安全性的一些基本原理以及如何实现它们。结合强化的Web服务器配置,安全的数据库服务器将阻止应用程序成为您网络的入口点,并防止数据最终被转储到Internet上。在配置新的SQL Server时,切记从一开始就考虑安全性。它应该是常规流程的一部分,而不是追溯应用的内容,因为某些关键的安全措施要求对不安全安装的数据库服务器和应用程序进行基本配置更改。

1.隔离数据库服务器

生产数据库服务器应尽可能与其他应用程序和服务隔离。专用的数据库服务器占用空间较小,因此 攻击面,而不必担心资源竞争或流量冲突。操作系统应精简,仅安装并运行必要的服务。除非数据库服务器需要其他应用程序,否则请不要安装它们。

根据环境的大小,您应该考虑将SQL Server放在受限的网段/ VLAN中,以便只有经过授权的流量才能传递给它。通常,只有应用程序服务器或Web服务器将直接与数据库通信,因此可以制定严格的网络策略来防止非法连接。这应该不言而喻,但是永远不要在端口1433/1434(MSSQL)和3306/3307(MySQL)上打开数据库服务器以访问Internet。

2.定制数据库安装

微软SQL功能示例(来源:Microsoft.com)

微软SQL和MySQL都提供了大量的附加功能,您可能不需要任何特定实例就可以使用其中的大多数功能。通过删除不需要的部分,可以减少可能的开发利用。如果要保留尚未使用的功能以供使用,请在测试或开发环境中进行操作-最好将生产保持尽可能低的锁定状态,尤其是在确定新模块可能产生的影响之前您的环境。

3.保持更新

微软SQL的MySQL 已定期修补,因此请确保您的版本是最新的。被利用的大多数漏洞已经有一年多的时间了,因此及时安装安全补丁可以通过简单地密封这些漏洞来防止大多数攻击。拥有定期的修补计划和协议可以帮助在测试环境中实施更新,以便在不中断生产的情况下发现任何负面影响。许多商店缺乏这种奢侈,只能靠裤子坐下来,直接将更新安装到生产中,并希望达到最好。幸运的是,通常情况下可以解决此问题,但如果无法解决,它很快就会变坏,因此至少应了解您的回滚选项和过程以及补丁程序的确切更改。

4.限制数据库进程

运行数据库服务的用户确定访问数据库进程对服务器其余部分的访问权,包括文件系统,执行程序的能力等。与大多数Linux应用程序一样,MySQL通常将以专用的mysql用户帐户运行,并且对服务器其余部分的权限最小。您可以使用简单的ps命令进行验证,并确保没有将MySQL配置为以root身份运行,这肯定会发生,特别是在极端情况下,例如,对故障进行故障排除,一旦危机发生就不会重新配置被避免了。

但是在Windows安装中,MSSQL通常作为本地系统或管理员帐户运行,从而允许对数据库过程(包括存储过程和命令外壳程序接口,如xp_cmdshell)进行完全访问。理想情况下,MSSQL应该以最小的特权作为专用的非管理员本地帐户运行。较新的MS安装向导甚至可以为您自动执行此步骤,因此,如果您要安装全新的服务器,请务必配置此选项。其他SQL服务(例如SQL Agent)也应作为受限的本地帐户运行,并根据需要授予例如备份目录的权限。

如果不采取此步骤,可能会导致受到威胁的数据库服务器破坏计算机的其余部分,并可能渗入网络。

5.限制SQL流量

如第一步中所述,数据库服务器通常只有另一个(或几个)服务器连接到该服务器。在这种情况下,应该在其他任何地方都禁止访问数据库端口上的服务器。通过仅允许往返于指定IP地址的SQL通信,可以确保防火墙内的恶意行为者或受感染的客户端不会破坏您的服务器。在某些情况下,客户端将需要直接连接到数据库服务器本身,例如使用胖客户端前端应用程序。此处使用相同的逻辑,将那些SQL连接限制到需要它的特定IP(或至少IP段)。因为这些是端点,所以请确保正确保护它们,因为恶意软件可以扫描和攻击SQL Server。你可以用 Linux上的iptablesWindows防火墙,或者最好是专用防火墙设备。

6.分配权限时使用最低权限

像任何系统上的用户一样,数据库用户应仅具有执行任务所需的访问权限,也称为 最小特权原则。如果可能,请远离MySQL中的“ ALL”授予和MSSQL中的sysadmin角色成员资格。考虑授予读取权限 意见 而不是直接访问表,以在必要时保护敏感字段。存储过程,维护计划和其他自动化任务应以具有适当权限集的专用用户身份运行。此措施可防止任何一台数据库服务器或任何恶意或受感染的用户破坏整个系统。通常,应用程序说明会要求您让他们的用户成为完全访问管理员角色。这与一般的最佳做法背道而驰,通常代表的是要求过多访问权限的草率编程,或者是出于支持考虑而取消安全性的考虑,而这两种考虑都没有考虑到您的数据的最大利益,因此请始终考虑实施应用程序帐户如何影响您的整体弹性。

7.设置强管理员密码

在MSSQL中,无论何时选择混合模式身份验证,都将使用sa帐户。 Microsoft建议使用Windows集成身份验证,但是许多应用程序需要 混合模式 支持他们的数据库用户和连接字符串。如果您确实启用了混合模式身份验证,请确保使用 复杂密码 以防止它被强行使用。


同样,MySQL的root用户应具有复杂的密码。如果有人正在扫描您的数据库服务器,那么他们要做的第一件事就是尝试以默认的admin帐户登录,因此将其锁定失败可能会导致系统整体受损。

8.审核数据库登录

您的整体日志记录和监视的一部分应包括 登录审核 用于您的SQL数据库。至少 这些记录 将在法医情况下证明是有用的,但是如果定期监视甚至将其集成到自动通知系统中,则反复失败的登录名可以在攻击和其他问题变得严重之前就发出警报,从而使您可以在登录成功的登录名时禁用受感染的用户或更改其密码。保留有关管理员,用户和应用程序已连接的记录,以帮助进行故障排除和更改管理。

9.保护您的备份

你猜怎么了?备份的数据与生产数据库的数据相同,因此需要与服务器本身一样小心地保护其安全。这可能意味着锁定备份目录,限制对托管数据的服务器或存储的访问,可移动介质的物理安全性,对备份的网络访问以及查看谁有权执行和访问备份。只是,别忘了涉及安全性时备份已成为数据生态系统的一部分,否则有人可能只是通过打开的窗口来绕过障碍之门。

10.防止SQL注入

当Web应用程序接受用户输入并将其发送到数据库时,未经消毒的数据可以将恶意代码“注入”到服务器中,并执行未经授权的任务,包括获得完全的shell访问权限,具体取决于服务器的配置。称为 SQL注入,有几种方法可以缓解这些攻击,包括上面的第6步,它限制了用户执行未经授权的任务的能力,但是 其实只有一种预防方法,那就是要利用 存储过程 而不是直接进行SQL查询以进行Webapp交互。

储存程序 仅接受预先建立的参数,并且只能执行非常特定的功能,因此它们可以防止将数据注入到原始SQL查询中。这是多年来的最佳实践,但是许多生产应用程序仍在运行带有SQLi漏洞的代码,而SQLi漏洞是Internet上最常利用的漏洞之一。

11.持续可见性

安全地进行所有设置和配置可以为您省去很多麻烦。但是,确保数据库系统安全的唯一方法是始终根据其创建的策略运行其配置状态的可见性。这样,当发生某些更改时,您会收到通知,例如以sysadmin身份添加了新的db用户或具有db_owner权限。如果没有这样的内容,您实际上是在猜测自上次检查以来没有发生任何变化,或者即使您要确定,也必须手动收集配置信息,这既费时又无济于事,才能执行此操作。将来进行相同的检查需要重复进行此工作。 UpGuard 提供对SQL数据库系统以及其他服务器和网络设备的连续可见性。

自由

白色UpGuard徽标
可供下载的UpGuard免费资源
学到更多

下载我们的免费电子书和白皮书

关于网络安全和供应商风险管理的见解。
白色UpGuard徽标
电子书,报告& Whitepapers
可供下载的UpGuard免费资源
UpGuard客户支持团队UpGuard客户支持团队UpGuard客户支持团队

观看UpGuard的实际应用

与我们的一位网络安全专家预订免费的个性化入职电话。
抽象形状抽象形状

相关文章

了解有关网络安全的最新问题的更多信息。
传送图标

注册我们的时事通讯

每周在收件箱中获取最新精选的网络安全新闻,漏洞,事件和更新。
抽象形状抽象形状
免费即时安全评分

您的组织有多安全?

索取免费的网络安全报告,以发现您的网站,电子邮件,网络和品牌上的主要风险。
  • 检查图标
    您可以立即采取行动的即时见解
  • 检查图标
    13个风险因素,包括电子邮件安全,SSL,DNS运行状况,开放端口和常见漏洞
网站安全扫描结果网站安全扫描等级抽象形状