本文介绍如何 提高SQLServer安全性,以及保护数据库免受恶意攻击的基本安全注意事项。
数据是每个组织的重要资产,而安全性差的数据库往往是安全漏洞的罪魁祸首。
数据安全由三个基本支柱组成 -机密性(confidentiality),完整性(integrity)和可用性(availability)。让我们分解在处理SQL Server安全性(当今最流行的关系数据库之一)时要采取的不同领域和步骤。
1.确保您的SQL Server的物理安全
SQL Server物理安全性不容忽视。物理安全是指限制对数据中心或其他物理服务器组件的未经授权的访问。例如,可以使用智能卡、指纹或人脸识别来实施限制访问的锁定房间。还可以为SQL Server配置受限网段。
数据中心容纳组织的基础设施,例如路由器、交换机、服务器、防火墙和存储设备。物理安全涉及保护硬件、软件和网络免受任何未经授权的访问或自然灾害。
2.保护您的操作系统
SQL Server安装在现有操作系统(如Windows或Linux)之上。因此,操作系统安全在SQL Server安全中起着至关重要的作用。
. 常规操作系统安全补丁和服务包
. 定义操作系统补丁升级策略,将补丁应用于较低环境,然后进行生产补丁始终使用稳定且受支持的产品操作系统版本。
. 不允许在数据库服务器上访问Internet
. 卸载、停止或禁用未使用的应用程序和驱动器,以确保减少潜在攻击的途径
. 开启防火墙,限制对数据库服务器访问
. 防火墙中打开特定端口。例如,默认情况下,SQL Server在端口1433上运行。因此,如果服务器上没有其他应用程序运行,您可以允许TCP端口1433和3389进行远程服务器访问。同样,分析服务使用默认端口2383作为标准端口。还可以使用SSL或TLS对SQLServer的访问。
. 利用对身份验证的扩展保护选项来防止使用服务绑定和通道绑定的身份验证中继攻击。要启用扩展保护,请转到SQL Server配置管理器,右键单击协议,然后转到高级,扩展保护。请注意,默认情况下,这是关闭的。
扩展保护
同样的也可以开启强制加密连接
强制加密
3.减少SQLServer附加功能
SQL Server外围区域提供了很多附加功能组件(例如发送电子邮件)。 这些组件可能是恶意活动访问SQL Server的潜在目标。 因此,应该禁用SQL Server中未使用的组件和功能,这样将限制潜在攻击的机会。 下面列出了可以查看和禁用的主要组件。
Scan for startup procs
OLE Automation Procedures
CLR enabled
Cross DB ownership chaining
xp_cmdshell
Database Mail XPs
4.配置SQLServer服务器的监听端口
Microsoft SQL Server对所有数据库连接使用默认端口1433。 这是数据库环境中常见的安全风险,因此,您应该使用非默认端口来加强SQLServer安全性。可以使用SQL Server配置管理器对其进行修改。
TCP 端口
5.调整SQLServer认证
数据的保护取决于对特定数据的访问进行身份验证的能力。SQL Server为数据库身份验证提供了两个选项。
Windows身份验证
Windows和SQL身份验证(混合模式)
要验证服务器身份验证模型,请右键单击SQL Server实例,点击属性,选择安全。
安全
6.记住服务帐号权限
SQL Services使用Windows帐户运行其服务。 不应使用高权限的内置帐户,例如网络服务或本地系统。 同样,对于域服务帐户,应该分配与角色相应的权限。
7.应用SQLServer补丁
Microsoft发布常规服务包(SQLServer 2016或更早版本)和累积包(SQLServer 2017及更高版本)以修复已知问题和安全问题。 因此,应始终计划在产品中实施SQL Server修补。 但是,不要直接应用补丁。 始终首先在测试环境中安装,验证和规划生产部署。
8.保护备份
谈到SQLServer安全性时,保护备份至关重要。数据库备份是创建数据库的操作状态、架构和存储数据的副本。 因此,保护它同样重要。 这意味着限制对备份文件的访问并正确加密它们因此不向所有人提供备份文件夹的创建、查看、修改和删除备份文件的权限
9. SQL Server加密
加密是SQLServer安全的重要领域。可以使用各种加密机制来保护SQL Server数据库中的敏感数据。不同的加密选项如下。
始终加密(AlwaysEncrypted):始终加密技术有助于加密客户端应用程序内的敏感数据。始终启用加密的驱动程序会自动加密和解密客户端应用程序中的敏感数据。加密密钥永远不会透露给SQL Server数据库引擎。它保护机密数据。
透明数据加密(Transparentdata encryption):加密静态数据。它有助于保护数据文件、日志文件和备份文件。
列级加密(Column-levelencryption):列级加密有助于加密特定的列数据,例如信用卡号和社会保险号。
静态数据加密(Staticdata masking):静态数据屏蔽使用定义的数据转换规则替换敏感数据。
动态数据加密(Dynamicdata masking):动态数据屏蔽有助于限制敏感数据暴露给非特权用户。
行级安全性(Row-levelsecurity):行级安全性限制数据行访问。
11.审核数据库登录记录
在涉及SQLServer安全性时,审计经常被忽视。 应该定期对失败的登录进行SQL Server审核。 可以使用默认登录审核机制来查看帐户。 例如,假设任何用户尝试使用高权限帐户连接到SQL Server。 在这种情况下,可以看到登录失败和传入请求(客户端)IP地址。 这可以帮助捕获和消除可疑活动。
可以使用扩展事件(events)、SQL跟踪、触发器(triggers)(DDL,DML or Logon)进行数据库或服务器级别审计。
12.注意服务器和数据库权限
分配服务器级或数据库级权限时,应小心谨慎。 有时,我们看到开发人员在服务器级别获得sysadmin或在数据库级别获得数据库所有者的权限。 这些分别是用户在实例或数据库级别上可以拥有的最高权限。
13.关闭SQLServer浏览器服务
SQL Server浏览器服务侦听所有传入的SQL Server连接请求。 它使用UDP端口1434并使用连接到SQL Server所需的TCP/IP端口号响应请求。 因此可以关闭浏览器服务并在应用程序字符串中明确定义端口号。 这可以避免端口号暴露给传入的连接请求,并有助于SQL Server的安全性。