跳到内容

数据库安全速查表

简介

本速查表提供了安全配置 SQL 和 NoSQL 数据库的建议。它旨在供负责管理数据库的应用程序开发人员使用。有关防范 SQL 注入攻击的详细信息,请参阅SQL 注入防范速查表

保护后端数据库

应用程序的后端数据库应与其他服务器隔离,并且仅与尽可能少的主机连接。此任务将取决于系统和网络架构。请考虑以下建议:

  • 禁用网络 (TCP) 访问,并要求所有访问通过本地套接字文件或命名管道进行。
  • 将数据库配置为仅绑定到 localhost。
  • 使用防火墙规则限制特定主机对网络端口的访问。
  • 将数据库服务器放置在与应用服务器隔离的独立 DMZ 中。

应采取类似的保护措施来保护用于数据库的任何基于 Web 的管理工具,例如 phpMyAdmin。

当应用程序在不受信任的系统(例如胖客户端)上运行时,它应始终通过可强制执行适当访问控制和限制的 API 连接到后端。胖客户端绝不应直接连接到后端数据库。

实施传输层保护

大多数数据库默认配置都以未加密的网络连接开始,尽管有些数据库确实加密了初始认证(例如 Microsoft SQL Server)。即使初始认证已加密,其余流量也将未加密,各种敏感信息将以明文形式通过网络发送。应采取以下步骤来防止未加密流量:

  • 将数据库配置为仅允许加密连接。
  • 在服务器上安装受信任的数字证书。
  • 客户端应用程序使用 TLSv1.2+ 和现代密码套件(例如 AES-GCM 或 ChaCha20)进行连接。
  • 客户端应用程序验证数字证书是否正确。

传输层安全速查表包含有关安全配置 TLS 的进一步指导。

配置安全认证

数据库应始终要求认证,包括来自本地服务器的连接。数据库账户应:

  • 使用强且唯一的密码进行保护。
  • 供单个应用程序或服务使用。
  • 按照下面的权限部分所述,配置所需的最小权限。

与任何拥有自己用户账户的系统一样,应遵循常规账户管理流程,包括:

  • 定期审查账户以确保它们仍然是必需的。
  • 定期审查权限。
  • 在应用程序停用时删除用户账户。
  • 当员工离职或有理由相信密码可能已被泄露时,更改密码。

对于 Microsoft SQL Server,请考虑使用Windows 或集成认证,它使用现有 Windows 账户而非 SQL Server 账户。这还消除了在应用程序中存储凭据的要求,因为它将使用运行它的 Windows 用户的凭据进行连接。Windows 本机认证插件为 MySQL 提供了类似的功能。

安全存储数据库凭据

数据库凭据绝不应存储在应用程序源代码中,尤其是未加密的情况下。相反,它们应存储在满足以下条件的配置文件中:

  • 位于 Web 根目录之外。
  • 具有适当的权限,以便只有所需用户才能读取。
  • 未签入源代码仓库。

在可能的情况下,这些凭据也应使用内置功能进行加密或以其他方式保护,例如 ASP.NET 中可用的 web.config 加密。

创建安全权限

开发人员在为数据库用户账户分配权限时,应采用最小权限原则(即,账户应仅具有应用程序正常运行所需的最小权限)。此原则可以在根据数据库可用功能递增的粒度级别上应用。您可以在所有环境中执行以下操作:

  • 不要使用内置的 rootsaSYS 账户。
  • 不要授予账户数据库实例的管理权限。
  • 确保账户只能从允许的主机连接。这通常是 localhost 或应用程序服务器的地址。
  • 账户应仅访问其需要的特定数据库。开发、UAT 和生产环境都应使用单独的数据库和账户。
  • 仅授予数据库所需的权限。大多数应用程序只需要 SELECTUPDATEDELETE 权限。账户不应是数据库的所有者,因为这可能导致权限提升漏洞。
  • 避免使用数据库链接或链接服务器。如果需要,请使用仅被授予对所需最小数据库、表和系统权限的访问权限的账户。

大多数安全关键型应用程序,在更细粒度级别上应用权限,包括:

  • 表级权限。
  • 列级权限。
  • 行级权限。
  • 阻止对底层表的访问,并要求所有访问通过受限制的视图进行。

数据库配置与加固

数据库服务器的底层操作系统应基于安全基线(例如CIS 基准Microsoft 安全基线)进行加固。

数据库应用程序也应进行适当配置和加固。以下原则应适用于任何数据库应用程序和平台:

  • 安装所有必需的安全更新和补丁。
  • 将数据库服务配置为在低权限用户账户下运行。
  • 删除任何默认账户和数据库。
  • 事务日志存储在与主数据库文件分开的磁盘上。
  • 配置数据库的定期备份。确保备份受到适当权限的保护,并且最好进行加密。

以下部分在上述更一般性建议的基础上,为特定数据库软件提供了一些进一步的建议。

加固 Microsoft SQL Server

加固 MySQL 或 MariaDB 服务器

  • 运行 mysql_secure_installation 脚本以删除默认数据库和账户。
  • 禁用所有用户的 FILE 权限,以防止他们读取或写入文件。
  • 请参阅 Oracle MySQLMariaDB 加固指南。

加固 PostgreSQL 服务器

MongoDB

Redis