• | 修补程序和更新程序
之所以会有许多的安全威胁,是因为操作系统、服务及应用程序中存在着一些广为公开并为人所熟知的漏洞。如果发现了新漏洞,攻击者往往会在实施首次成功攻击后数小时内,将攻击代码张贴在 Internet 电子布告栏上。要保证数据库服务器的安全,首先要做的便是为服务器的软件安装修补程序和更新程序。可能会存在这样的情况:有漏洞,却没有相应的修补程序。如果是这样,就要了解漏洞的详细情况,以评估攻击风险及采取相应的防范措施。
|
• | 服务
服务是攻击者首选的弱点,他们可以充分利用服务的特权和功能来访问服务器,并可能访问其他计算机。某些服务被设计为通过特权帐户来运行。如果这些服务受到危害,攻击者便可执行特权操作。默认情况下,数据库服务器通常不需要启用所有服务。通过禁用不必要及不使用的服务,便可轻松、快捷地减少受攻击面。
|
• | 协议
限制客户端计算机连接到数据库服务器所能够使用的协议的范围,并确保可以保证这些协议的安全。
|
• | 帐户
限制能够从数据库服务器实施访问的 Windows 服务和用户帐户的数量,使其保持在必要的数量上。使用权限最低的帐户,并在任何情况下均为其设置强密码。用于运行 SQL Server 的最低权限帐户可限制危害 SQL Server 并设法执行操作系统命令的攻击者的危害能力。
|
• | 文件和目录
使用 NTFS 文件系统权限来防止程序、数据库和日志文件遭到未经授权的访问。如果结合 Windows 审核功能使用访问控制列表 (ACL),便可在可疑或未经授权的活动发生时检测到它的存在。
|
• | 共享
取消所有不必要的文件共享,包括默认的管理共享(如果并非必需)。利用受限的 NTFS 权限保证其余共享的安全。尽管共享可能不会直接暴露于 Internet,但执行有限和安全共享的深层防御策略可降低在服务器遭受危害时的风险。
|
• | 端口
不使用的端口在防火墙一级处于关闭状态,但防火墙背后的服务器同样须根据其端口的使用情况对端口实施封锁或限制。对于专用 SQL Server,须封锁除必要的 SQL Server 端口和身份验证所需端口外的所有其他端口。
|
• | 注册表
SQL Server 在注册表中保存有许多安全相关设置,包括配置身份验证模式。限制并控制对注册表的访问,以防止有人出于不良动机(例如,为降低数据库服务器的安全性)在未经授权的情况下更新配置设置。
|
• | 审核和日志
审核是辨别入侵者和进行中的攻击行为及诊断攻击痕迹的必不可少的工具。综合利用 Windows 和 SQL Server 的审核功能为数据库服务器配置最低级别的审核。
|
• | SQL Server 安全性
许多 SQL Server 安全性设置均可通过“企业管理器”进行控制。这些设置包括身份验证模式、审核级别及用来运行 SQL Server 服务的帐户。为提高安全性,应使用 Windows 身份验证。还应启用 SQL Server 登录审核,并确保通过最低权限帐户来运行 SQL Server 服务。
|
• | SQL Server 登录、用户及角色
SQL Server 2000 通过登录、数据库、用户及角色来管理访问控制。用户(及应用程序)通过 SQL Server 登录获得对 SQL Server 的访问。登录与数据库用户关联,而数据库用户被置于一个或更多个角色中。授予角色的权限决定登录可访问的表及可执行的操作类型。此方法用于创建最低权限数据库帐户,这些帐户只具有执行典型功能所必备的一组权限。
|
• | SQL Server 数据库对象
应复审对 SQL Server 数据库对象(如内置存储过程、扩展存储过程及 cmdExec 作业)的访问能力,并应删除所有示例数据库。
|
组成部分 | 特性 |
修补程序和更新程序
| 对 Windows 2000 和 SQL Server 应用最新的 Service Pack 和修补程序
|
服务
| 禁用非必需的服务。
不使用时禁用 MSDTC。
非必需时禁用 MSSearch 服务。
非必需时禁用 SQLServerAgent 服务。
非必需时禁用 MSSQLServerADHelper 服务。
|
协议
| 删除或禁用不必要的协议。
服务器上未启用以下协议:NetBIOS 和 SMB。
强化了 TCP/IP 堆栈。
|
帐户
| 对 SQL Server 服务帐户实施安全保护(将其设置为最低权限帐户)。
删除或禁用不必要的 Windows 帐户。
禁用 Windows 的来宾帐户。
创建新的管理员帐户。
强制执行强密码策略。
对远程登录实施限制。
禁用空会话(匿名登录)。
要求帐户委派批准。
不使用共享帐户。
限制本地 Administrators 组的成员身份(理想的情况为不超过两名成员)。
限管理员帐户进行交互式登录(或提供安全的远程管理解决方案)。
启用并强制执行 NTLMv2 身份验证(将 LMCompatibilityLevel 设置为 5)。
|
文件和目录
| 以 NTFS 格式对卷进行格式化。
Everyone 组不具有对系统或工具目录的访问权限。从服务器中删除示例目录、帮助目录和不使用的管理员目录。
强化对 SQL Server 安装文件夹的访问权限。
从 Service Pack 1 和 Service Pack 2 安装日志文件中删除密码。
删除工具、实用程序和 SDK。
删除不使用的应用程序。
使用 EFS 对敏感的数据文件加密。(这对于数据库文件 (.mdf) 为可选操作,但对于日志文件 (.ldf) 则为必需)。
|
共享
| 从服务器中删除不必要的共享。
仅限访问必需的共享。
Everyone 只在必要时才能访问共享。
非必需时删除管理共享(C$、Admin$)。
|
端口
| 封锁除 SQL Server 侦听端口 [默认为 1433] 外的所有其他端口
配置命名实例来侦听同一端口。
将非标准 SQL Server 端口(不是 TCP 1443)用作附加防御层。
将隐藏服务器选项用作附加防御层(可选)。
配置防火墙来支持 DTC 通信(如有必要)。
使用防火墙将用户与 SQL TCP/IP 端口隔离开。
|
注册表
| 从 SQL Server 注册键中删除 Everyone 组。
保证 SAM(限独立服务器)的安全。
|
审核和日志
| 记录失败的 Windows 登录尝试。
记录文件系统中失败的操作。
启用 SQL Server 登录审核。
|
SQL Server 设置
|
|
SQL Server 安全机制
| 可能的情况下,将 SQL Server 的身份验证设置为仅限 Windows。
将 SQL Server 审核级别设置为“失败”或“全部”。
SQL Server 启动服务帐户为最低权限帐户。
|
SQL Server 登录、用户及角色
| Sa 帐户使用强密码。
从非系统数据库中删除 SQL Server 来宾帐户。
从 SQL Server 登录中删除 BUILTIN\Administrators 组。
Sysadmin 角色不包含 BUILTIN\Administrators 组。
不为公共角色授予权限。
Sysadmin 角色所包含的用户不超过两个。
授予受限的(精确)数据库权限(避免使用诸如 db_datareader 和 db_datawriter 等内置的非精确角色)
不更改 SQL Server 对象的默认权限。
|
SQL Server 数据库对象
| 从服务器中删除所有示例数据库。
保证存储过程的安全。
保证扩展存储过程的安全。
限制 cmdExec 只能使用 sysadmin 角色。
|