数据库安全速查表¶
简介¶
本速查表提供了安全配置 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
加密。
创建安全权限¶
开发人员在为数据库用户账户分配权限时,应采用最小权限原则(即,账户应仅具有应用程序正常运行所需的最小权限)。此原则可以在根据数据库可用功能递增的粒度级别上应用。您可以在所有环境中执行以下操作:
- 不要使用内置的
root
、sa
或SYS
账户。 - 不要授予账户数据库实例的管理权限。
- 确保账户只能从允许的主机连接。这通常是
localhost
或应用程序服务器的地址。 - 账户应仅访问其需要的特定数据库。开发、UAT 和生产环境都应使用单独的数据库和账户。
- 仅授予数据库所需的权限。大多数应用程序只需要
SELECT
、UPDATE
和DELETE
权限。账户不应是数据库的所有者,因为这可能导致权限提升漏洞。 - 避免使用数据库链接或链接服务器。如果需要,请使用仅被授予对所需最小数据库、表和系统权限的访问权限的账户。
大多数安全关键型应用程序,在更细粒度级别上应用权限,包括:
- 表级权限。
- 列级权限。
- 行级权限。
- 阻止对底层表的访问,并要求所有访问通过受限制的视图进行。
数据库配置与加固¶
数据库服务器的底层操作系统应基于安全基线(例如CIS 基准或Microsoft 安全基线)进行加固。
数据库应用程序也应进行适当配置和加固。以下原则应适用于任何数据库应用程序和平台:
- 安装所有必需的安全更新和补丁。
- 将数据库服务配置为在低权限用户账户下运行。
- 删除任何默认账户和数据库。
- 将事务日志存储在与主数据库文件分开的磁盘上。
- 配置数据库的定期备份。确保备份受到适当权限的保护,并且最好进行加密。
以下部分在上述更一般性建议的基础上,为特定数据库软件提供了一些进一步的建议。
加固 Microsoft SQL Server¶
- 禁用
xp_cmdshell
、xp_dirtree
和其他不需要的存储过程。 - 禁用公共语言运行时 (CLR) 执行。
- 禁用 SQL Browser 服务。
- 除非必要,否则禁用混合模式认证。
- 确保已删除示例Northwind 和 AdventureWorks 数据库。
- 请参阅 Microsoft 关于保护 SQL Server 的文章。
加固 MySQL 或 MariaDB 服务器¶
- 运行
mysql_secure_installation
脚本以删除默认数据库和账户。 - 禁用所有用户的 FILE 权限,以防止他们读取或写入文件。
- 请参阅 Oracle MySQL 和 MariaDB 加固指南。
加固 PostgreSQL 服务器¶
- 请参阅PostgreSQL 服务器设置和操作文档以及较旧的安全文档。
MongoDB¶
- 请参阅MongoDB 安全清单。
Redis¶
- 请参阅Redis 安全指南。