sql server 安全配置及建议配置,操作前做好备份记录!操作前做好备份记录!操作前做好备份记录!
确保将“登录审核”设置为“失败”和“成功登录”
设置日志记录成功和失败的登录SQL Server身份验证尝试。 记录成功和失败的登录信息可提供关键信息,这些信息可用于检测/确认密码猜测攻击。 此外,记录成功的登录尝试可用于在司法调查期间确认服务器访问。
建议配置
执行以下步骤来设置审核级别: 1.打开SQL Server Management Studio。 2.右键单击目标实例,然后选择“属性”并导航到“安全性” 标签。 3.在“登录审核”下选择选项“成功登录失败和成功登录” 部分,然后单击确定。 4.重新启动SQL Server实例。
确保Windows本地组不是SQL登录名
本地Windows组不应用作SQL Server实例的登录名。 允许本地Windows组作为SQL登录名提供了一个漏洞,任何具有操作系统级别管理员权限(但没有SQL Server权限)的人都可以将用户添加到本地Windows组中,从而使他们自己或其他人可以访问SQL Server实例
建议配置
1.对于每个LocalGroupName登录名,如果需要,请创建一个等效的AD组,其中包含 仅所需的用户帐户。 2.添加AD组或单个Windows帐户作为SQL Server登录名并授予它 所需的权限。 3.替换<名称>后,使用以下语法删除LocalGroupName登录名。
USE [master]
GO
DROP LOGIN []
GO
确保“ xp_cmdshell”服务器配置选项设置为“ 0” 入侵
xp_cmdshell选项控制经过身份验证的SQL Server用户是否可以使用xp_cmdshell扩展存储过程来执行操作系统命令Shell命令并以SQL客户端内的行形式返回结果。 攻击者通常使用xp_cmdshell过程向数据库服务器的底层操作系统读取数据或从中读取数据。
建议配置
运行以下T-SQL命令:
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
确保“ sa”登录帐户已重命名
sa帐户是具有sysadmin特权的众所周知且经常使用的SQL Server登录。 sa登录名是安装期间创建的原始登录名,并且始终具有principal_id = 1和sid = 0x01。 如果名称未知,则对sa登录名发起密码猜测和蛮力攻击更加困难。
建议配置
在以下语句中用自定义的名称替换
ALTER LOGIN sa WITH NAME = ;
确保将“ sa”登录帐户设置为“已禁用”
sa帐户是sysadmin中一个广为人知且经常使用的SQL Server特权帐户。 这是安装期间创建的原始登录,并且始终具 Principal_id = 1,sid = 0x01。实施此控制可降低攻击者对众所周知的主体执行暴力攻击的可能性。
建议配置
运行以下T-SQL命令:
USE [master]
GO
DECLARE @tsql nvarchar(max)
SET @tsql = 'ALTER LOGIN ' + SUSER_NAME(0x01) + ' DISABLE'
EXEC (@tsql)
GO
确保“跨数据库所有权链接”服务器配置选项设置为“ 0”
跨数据库所有权链接选项控制实例(或服务器)级别上所有数据库之间的跨数据库所有权链接。 启用后,此选项允许数据库中db_owner角色的成员访问任何其他数据库中的登录名所拥有的对象,从而导致不必要的信息泄露。 必要时,跨数据库所有权链接仅应为 通过使用ALTER DATABASE
建议配置
运行以下T-SQL命令:
EXECUTE sp_configure 'cross db ownership chaining', 0;
RECONFIGURE;
GO
确保将SQL Server配置为使用非标准端口
如果启用,将为默认SQL Server实例分配默认端口TCP:1433,以进行TCP / IP通信。 管理员还可以将命名实例配置为使用TCP:1433进行通信。 TCP:1433是众所周知的SQL Server端口,应更改此端口分配。使用非默认端口有助于保护数据库免受针对默认端口的攻击。
建议配置
1.在SQL Server配置管理器的控制台窗格中,依次展开“ SQL Server网络配置”,“ <实例名称>的协议”,然后双击TCP / IP或VIA协议。 2.在“ TCP / IP属性”对话框的“ IP地址”选项卡上,以IP1,IP2到IPAll的格式显示几个IP地址。 其中之一是用于回送适配器的IP地址127.0.0.1。 在计算机上为每个IP地址显示其他IP地址 3.将“ TCP端口”字段从1433更改为另一个非标准端口,或将“ TCP端口”字段保留为空,并将“ TCP动态端口”值设置为0以启用动态端口分配,然后单击“确定”。 4.在控制台窗格中,单击“ SQL Server服务”。 5.在详细信息窗格中,右键单击SQL Server(
确保Sysadmin角色中所有经过SQL身份验证的登录名的“ CHECK_EXPIRATION”选项都设置为“ ON”
将Windows中使用的相同密码过期策略应用于SQL Server内部使用的密码。 确保SQL登录名符合Windows Server Benchmark所应用的安全密码策略,将确保频繁更改具有sysadmin特权的SQL登录名的密码,以帮助防止通过蛮力攻击造成的损害。 CONTROL SERVER是sysadmin的等效权限,并且还应该要求具有该权限的登录名具有到期的密码。
建议配置
运行以下T-SQL语句,以CHECK_EXPIRATION = OFF查找sysadmin或等效登录名。 不应返回任何行。
SELECT l.[name], 'sysadmin membership' AS 'Access_Method'
FROM sys.sql_logins AS l
WHERE IS_SRVROLEMEMBER('sysadmin',name) = 1
AND l.is_expiration_checked <> 1
UNION ALL
SELECT l.[name], 'CONTROL SERVER' AS 'Access_Method'
FROM sys.sql_logins AS l
JOIN sys.server_permissions AS p
ON l.principal_id = p.grantee_principal_id
WHERE p.type = 'CL' AND p.state IN ('G', 'W')
AND l.is_expiration_checked <> 1;
对于审核程序发现的每个
ALTER LOGIN [login_name] WITH CHECK_EXPIRATION = ON;
确保从SQL Server数据库中删除“孤立的用户”
未在服务器实例上为其定义相应SQL Server登录名或未正确定义数据库用户的数据库用户无法登录到该实例,并且称为孤立用户,应将其删除。 孤儿用户应被删除,以避免在任何情况下滥用那些坏掉的用户 办法。
建议配置
如果使用下面引用的Microsoft文档记录的过程,孤立用户无法或不应该与现有或新登录名匹配,请在适当的数据库中运行以下T-SQL查询以删除孤立用户:
USE [];
GO
DROP USER ;
确保所有SQL身份验证登录名的“ CHECK_POLICY”选项都设置为“ ON”
将Windows中使用的相同密码过期策略应用于SQL Server内部使用的密码。 确保SQL登录名符合Windows Server Benchmark所应用的安全密码策略,将确保频繁更改具有sysadmin特权的SQL登录名的密码,以帮助防止通过蛮力攻击造成的损害。 控制 SERVER是sysadmin的等效权限,并且还应该要求具有该权限的登录名具有到期的密码。
建议配置
使用以下代码段确定SQL登录名的状态以及是否强制执行其密码复杂性。
SELECT name, is_disabled
FROM sys.sql_logins
WHERE is_policy_checked = 0;
对于审核过程发现的每个
ALTER LOGIN [login_name] WITH CHECK_POLICY= ON;